常见的HTTP METHOD的不同性质分析:GET,POST和其他4种METHOD的差别




  HTTP协定中定义了多种不同的method,浏览器或是其他程式再进行HTTP连线时,会使用这些method来进行连线并取得回复。

  这些method到底有什么差别呢?

  这里列举常见的六种HTTP Method分别是head,get,post,delete,put,patch。

  其实还有很多其他得Method,为什么要特别提到这六种呢?因为这六种跟网页的资料有非常大的关系。

  先从最常见的get和post说起吧。

  一个刚接触网页的人或是早期用PHP写网页的人常常混用get和post,因为两者的功能基本上是相同的,而且以前主流是使用网址的Query String和不同的URL来区分功能(比如上传和搜寻),但是现在愈来愈多网页用API导向,也就是一个URL负责一个“业务”,对于上传和浏览分别用不同的Method来处理。

  举例来说,我们现在有一个可以留言的留言板,我们通常会使用get来取得现在的留言,而要新增新的留言时,我们会post到这个位置(有点像是问服务生今天的菜单,然后跟同一个服务生点餐)。一些比较早期的网页则可能混用get和post,把浏览留言和新增留言放在不同网址(有点像把领钱和存钱规划在不同柜台办理)。
  所以我们现在知道,不同的Method就是对同一件事情做不同的操作。
  再来举服务生点餐的例子,

  假设现在我们要点餐,我们必须先知道菜单是什么(get),

    1. 我们会向服务生点餐(post),
    2. 我们想要取消刚才点的餐点(delete),
    3. 我们想要重新点一次(put),
    4. 我们想要加点甜点和饮料(patch)。

  到这里我们已经提到了主要的Method了(head是取得get的http header而不取得内容,性质上我们可以当作跟get一样),至于这几种Method的行为我们可以统整一下:

    1. head:和get一样,只是head只会取的HTTP header的资料。
    2. get:取得我们想要的资料。
    3. post:新增一项资料。(如果存在会新增一个新的)
    4. put:新增一项资料,如果存在就覆盖过去。(还是只有一笔资料)。
    5. patch:附加新的资料在已经存在的资料后面。(资料必须已经存在,patch会扩充这项资料)
    6. delete:删除资料。

  说了这么多,其实这些Method也只是HTTP建议我们这样做而已,至于网站架设者是不是有遵守又是令外一回事了。(比如说他可以选择用delete来新增留言)

  不过,遵守规定是有好处的,因为浏览器会根据不同的Method做不同的事,Google的机器人也会根据连结的不同做不一样的事(Google有一只爬虫会不停更新全世界的网站)。

  举一个例子,现在有一个行事历网页,有很多的行事历事项,旁边有修改和删除的按钮。

  如果这些按钮使用get,Google的爬虫就会全部去按一遍(他想要知道你的网站的所有内容,他才能建立索引),然后我们的行事历就被删光光了!!

  如果我们把删除按钮改成用delete,Google就不会去按了(他只会按get的连结)。
  另外一个例子是,假设现在网路状况不好,我们用网路ATM转帐,传送出去后却因为网路不稳而浏览器没收到回应,这时如果浏览器自动重新整理,就会送出两笔转帐要求!!
  但是如果转帐使用post,浏览器不但不会自动重新整理,甚至使用者要求重新整理时还会跳出警告讯息。

  上面两个例子告诉我们,不同的Method间接的告诉使用者应该怎么样操作这些动作。

  这里有两个性质,Safe是是否安全,如果会修改资料就是不安全,间接说明是否可以快取(不重复发出请求);Idempotent则是是否可以在不确定有没有成功送出时重新发出请求。

  我们可以整理成以下表格:


Safe?(是否安全)
Idempotent?(是否可以重新整理)
GET
Y
Y
POST
N
N
PATCH
N
N
PUT
N
Y
DELETE
N
Y


   我们发现,除了get之外的Method都会修改到资料,所以如果我们要写一支爬虫,我们就必须要注意,不可以轻易的去触动除了get以外的Method,因为我们可能会无意间改到资料。

   而get,put,delete都可以重新整理,是因为put会覆盖掉原本的资料(跟服务生说“我”要吃牛排说10次还是只会来一份牛排),delete则是一定会清除资料(跟服务生说我不吃了),所以这3个Method都可以重复呼叫,所以当网路不稳定时浏览器可以被允许自动重新整理。

   想想如果我们违反这些规定会有什么结果。
   我们重复和服务生说“一份牛排”(POST)那结果将是我们点了很多份牛排。

   我们重复和服务生说“加一份甜点”(patch)那结果就是很多份甜点。

   我们架设网站和写爬虫时,如果可以尽量遵守这些协定,就可以避免不必要的麻烦。
    

打赏

取消 我去学网

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少
微信

打开微信扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

  1. #2

    木庄网络博客(2016/10/28 11:41:03)
    不错的网站主题,看着相当舒服

  2. #1

    木庄网络博客(2016/10/14 21:02:39)
    博客做得好漂亮哦!