HTTP中Method含义与区别

HTTP/1.1包含GET HEAD POST OPTIONS PUT DELETE TRACE CONNECT这8个方法

  1. 安全方法(Safe Methods)是指用户不管进行多少次操作,资源的状态都不会改变。比如说,GET和HEAD方法仅能获取资源,而不会执行动作(action),这些方法属于“安全”的方法。
    而POST,PUT,DELETE方法改变了资源的状态,可能会执行不安全的动作,使用者应该意识到这一点。

  2. 幂等(Idempotent Methods)是数学的一个用语,对于单个输入或者无输入的运算方法,如果每次都是同样的结果,则称其是幂等的。方法GET,HEAD,PUT,DELETE都有这种性质。POST方法不是幂等的,比如常见的POST重复加载问题:当我们多次发出同样的POST请求后,其结果是创建出了若干的资源。

  3. Option方法是指,对一个已有的request/response chain,请求URI指定资源的选项信息。这种方法的响应是不能缓存的。请求URI中是否带"*"(星号)决定了请求应用于服务器的所有资源还是特定资源。

  4. GET方法意思是获取被请求URI(Request-URI)指定的信息,该信息以实体的型式呈现。如果请求URI指向的是一个数据生成过程,那么这个生成的数据应该作为一个实体在响应中返回。GET请求的响应是可缓存的。

  5. HEAD方法和GET方法一致,区别在于HEAD方法不需要服务器在响应里返回消息主体。HEAD请求响应里HTTP头域里的元信息应该和GET请求响应里的元信息一致。此方法被用来获取请求实体的元信息,而不需要传输实体主体(entity-body)。此方法经常被用来测试超文本链接的有效性,可访问性,和最近的改变。HEAD请求的响应是可缓存的。

  6. POST方法:给源服务器一个请求,源服务器接受这个请求中的实体,然后可以将其作为资源的一部分。POST方法的实际功能是由服务器决定的,并且经常依赖于请求URI(Request-URI)。POST方法提交的实体是请求URI的从属物,就好像一个文件从属于一个目录,一篇新闻文章从属于一个新闻组,或者一条记录从属于一个数据库
    POST方法执行的动作可能不会对请求URI所指的资源起作用。在这种情况下,200(成功)或者204(没有内容)将是适合的响应状态,这取决于响应是否包含一个描述结果的实体。如果资源被源服务器创建,响应应该是201(Created)并且包含一个实体,此实体描述了请求的状态并且此实体引用了一个新资源和一个Location头域。
    POST方法的响应是可缓存的。除非响应里有Cache-Control或者Expires头域指示其响应不可缓存。而303响应能指导用户获得可缓存的响应。

  7. PUT方法:请求服务器把请求里包含的实体存储在请求URI(Request-URI)标识下。如果请求URI(Request-URI)指定的的资源已经在源服务器上存在,那么此请求里的实体应该被当作是源服务器在此URI所指定资源实体的修改版本。如果请求URI(Request-URI)指定的资源不存在,并且此URI被用户代理定义为一个新资源,那么源服务器就应该根据请求里的实体创建一个此URI所标识下的资源。如果一个新的资源被创建了,源服务器必须能向用户代理发送201(已创建)响应。如果已存在的资源被改变了,那么源服务器应该发送200(Ok)或者204(无内容)响应。如果资源不能根据请求URI创建或者改变,应该给出一个合适的错误响应来反应问题的性质。实体的接收者不能忽略任何它不理解的Content-*(如:Content-Range)头域,并且必须返回501(没有被实现)响应。PUT方法的响应不应该被缓存。

  8. POST方法PUT方法最根本的区别在于,请求URI(Request-URI)的含义不同。POST请求里的URI指示的是一个能处理请求实体的资源(可能是一段程序,如jsp里的servlet)。而PUT方法请求里有一个实体,而且用户代理知道URI意指什么,并且服务器不能把此请求应用于其他URI指定的资源。如果服务器期望请求被应用于一个不同的URI,那么它必须发送301(永久移动了)响应;用户代理可以自己决定是否重定向请求。

  9. DELETE方法请求源服务器删除请求URI指定的资源。客户端不能保证此操作能被执行,即使源服务器返回成功状态码。服务器打算删除资源或把此资源移到一个不可访问的位置时返回成功。如果响应里包含描述成功的实体,响应应该是200(Ok);如果DELETE动作没有通过,应该以202(已接受)响应;如果DELETE方法请求已经通过了,但响应不包含实体,那么应该以204(无内容)响应。DELETE方法的响应是不能被缓存的。

  10. TRACE方法被用于激发一个远程的应用层的请求消息回路。最后的接收者或者是接收请求里Max-Forwards头域值为0源服务器或者是代理服务器或者是网关。TRACE请求不能包含一个实体。TRACE方法允许客户端知道请求链的另一端接收什么,并且利用那些数据去测试或诊断。Via头域值有特殊的用途,因为它可以作为请求链的跟踪信息。利用Max-Forwards头域允许客户端限制请求链的长度去测试一串代理服务器是否在无限回路里转发消息。如果请求是有效的,响应应该在响应实体主体里包含整个请求消息,并且响应应该包含一个Content-Type头域值为”message/http”的头域。TRACE方法的响应不能不缓存。

  11. HTTP1.1协议规范保留了CONNECT方法,此方法是为了能用于能动态切换到隧道的代理服务器(proxy)。

推荐阅读:RESTful API 设计指南

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • API定义规范 本规范设计基于如下使用场景: 请求频率不是非常高:如果产品的使用周期内请求频率非常高,建议使用双通...
    有涯逐无涯阅读 2,441评论 0 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,087评论 18 139
  • 前言 HTTP Method的历史: HTTP 0.9 这个版本只有GET方法 HTTP 1.0 这个版本有G...
    老马的春天阅读 25,799评论 3 9
  • 8. 方法定义(Method Definitions) 通用的HTTP/1.0的方法集将在下面定义,虽然该方法集可...
    Palomar阅读 2,999评论 0 2
  • 内容只是引子,引出被未知域阻断的相逢, 他们在不同领域里,用不同形式的内容,把人们最大范围的链接起来,成为彼此的美...
    Vickiy阅读 263评论 0 0