Hugo

一个沉淀知识的地方!

0%

Http请求方法及响应码

前言

本文只是用于速查请求方法和响应码而写的,详细细节请转到 MDN Web Doce 查看。

1.请求方法

方法 作用
GET GET方法请求一个指定资源的表示形式. 使用GET的请求应该只被用于获取数据
POST POST方法用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用
PUT PUT方法用请求有效载荷替换目标资源的所有当前表示
HEAD HEAD方法请求一个与GET请求的响应相同的响应,但没有响应体
DELETE DELETE方法删除指定的资源
CONNECT CONNECT方法建立一个到由目标资源标识的服务器的隧道
OPTIONS OPTIONS方法用于描述目标资源的通信选项
TRACE TRACE方法沿着到目标资源的路径执行一个消息环回测试
PATCH PATCH方法用于对资源应用部分修改

2.响应码

响应码 状态描述 说明
100 Continue HTTP 100 Continue 信息型状态响应码表示目前为止一切正常, 客户端应该继续请求, 如果已完成请求则忽略.
101 Switching Protocol HTTP 101 Switching Protocol(协议切换)状态码表示服务器应客户端升级协议的请求(Upgrade (en-US)请求头)正在切换协议。
103 Early Hints 103 Early Hints 信息状态响应码,一般和 Link header(首部)一起使用,来允许用户在服务器还在准备响应数据的时候预加载一些资源。
200 OK 状态码 200 OK 表明请求已经成功. 默认情况下状态码为200的响应可以被缓存。
不同请求方式对于请求成功的意义如下:
- GET: 已经取得资源,并将资源添加到响应的消息体中。
- HEAD: 响应的消息体为头部信息。
- POST: 响应的消息体中包含此次请求的结果。
- TRACE: 响应的消息体中包含服务器接收到的请求信息。
PUTDELETE 的请求成功通常并不是响应200 OK的状态码而是 204 No Content 表示无内容(或者 201 Created表示一个资源首次被创建成功)。
201 Created 在HTTP协议中,201 Created 是一个代表成功的应答状态码,表示请求已经被成功处理,并且创建了新的资源。新的资源在应答返回之前已经被创建。同时新增的资源会在应答消息体中返回,其地址或者是原始请求的路径,或者是 Location 首部的值。
这个状态码的常规使用场景是作为 POST 请求的返回值。
202 Accepted 响应状态码 202 Accepted 表示服务器端已经收到请求消息,但是尚未进行处理。但是对于请求的处理确实无保证的,即稍后无法通过 HTTP 协议给客户端发送一个异步请求来告知其请求的处理结果。这个状态码被设计用来将请求交由另外一个进程或者服务器来进行处理,或者是对请求进行批处理的情形。
203 Non-Authoritative Information 在 HTTP 协议中,响应状态码 203 Non-Authoritative Information 表示请求已经成功被响应,但是获得的负载与源头服务器的状态码为 200 (OK)的响应相比,经过了拥有转换功能的 proxy (代理服务器)的修改。
The 203 状态码有点类似于 Warning 首部的 [214](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Warning#warning_codes)(Transformation Applied)警告码,后者的优势在于可以应用于任何状态码的响应之中。
204 No Content HTTP 204 No Content成功状态响应码,表示该请求已经成功了,但是客户端客户不需要离开当前页面。默认情况下 204 响应是可缓存的。一个 ETag 标头包含在此类响应中。
使用惯例是,在 PUT 请求中进行资源更新,但是不需要改变当前展示给用户的页面,那么返回 204 No Content。如果创建了资源,则返回 201 Created 。如果应将页面更改为新更新的页面,则应改用 200
205 Reset Content 在 HTTP 协议中,响应状态码 205 Reset Content 用来通知客户端重置文档视图,比如清空表单内容、重置 canvas 状态或者刷新用户界面。
206 Partial Content HTTP 206 Partial Content 成功状态响应代码表示请求已成功,并且主体包含所请求的数据区间,该数据区间是在请求的 Range 首部指定的。
如果只包含一个数据区间,那么整个响应的 Content-Type 首部的值为所请求的文件的类型,同时包含 Content-Range 首部。
如果包含多个数据区间,那么整个响应的 Content-Type 首部的值为 multipart/byteranges ,其中一个片段对应一个数据区间,并提供 Content-RangeContent-Type 描述信息。
300 Multiple Choices 300 Multiple Choices 是一个用来表示重定向的响应状态码,表示该请求拥有多种可能的响应。用户代理或者用户自身应该从中选择一个。由于没有如何进行选择的标准方法,这个状态码极少使用。
假如服务器可以提供一个优先选择,那么它应该生成一个 Location 首部。
301 Moved Permanently HTTP 301永久重定向 说明请求的资源已经被移动到了由 Location 头部指定的url上,是固定的不会再改变。搜索引擎会根据该响应修正。
尽管标准要求浏览器在收到该响应并进行重定向时不应该修改http method和body,但是有一些浏览器可能会有问题。所以最好是在应对GETHEAD 方法时使用301,其他情况使用308 来替代301。
302 Found HTTP 302Found 重定向状态码表明请求的资源被暂时的移动到了由Location 头部指定的 URL 上。浏览器会重定向到这个URL, 但是搜索引擎不会对该资源的链接进行更新 (In SEO-speak, it is said that the link-juice is not sent to the new URL)。
即使规范要求浏览器在重定向时保证请求方法和请求主体不变,但并不是所有的用户代理都会遵循这一点,你依然可以看到有缺陷的软件的存在。所以推荐仅在响应 GETHEAD 方法时采用 302 状态码,而在其他时候使用 307 Temporary Redirect 来替代,因为在这些场景下方法变换是明确禁止的。
在确实需要将重定向请求的方法转换为 GET的场景下,可以使用 303 See Other。例如在使用 PUT 方法进行文件上传操作时,需要返回确认信息(例如“你已经成功上传了xyz”)而不是上传的资源本身,就可以使用这个状态码。
303 See Other HTTP 303 See Other 重定向状态码,通常作为 PUTPOST 操作的返回结果,它表示重定向链接指向的不是新上传的资源,而是另外一个页面,比如消息确认页面或上传进度页面。而请求重定向页面的方法要总是使用 GET
304 Not Modified HTTP 304 Not Modified 说明无需再次传输请求的内容,也就是说可以使用缓存的内容。这通常是在一些安全的方法(safe),例如GETHEAD 或在请求中附带了头部信息: If-None-MatchIf-Modified-Since
如果是 200 OK ,响应会带有头部 Cache-Control, Content-Location, Date, ETag, Expires,和 Vary.
307 Temporary Redirect HTTP 307 Temporary Redirect,临时重定向响应状态码,表示请求的资源暂时地被移动到了响应的 Location 首部所指向的 URL 上。
原始请求中的请求方法和消息主体会在重定向请求中被重用。在确实需要将重定向请求的方法转换为 GET 的场景下,可以考虑使用 303 See Other 状态码。例如,在使用 PUT 方法进行文件上传操作时,如果需要返回一条确认信息(例如“你已经成功上传了 XYZ”),而不是返回上传的资源本身,就可以使用这个状态码。
状态码 307302 之间的唯一区别在于,当发送重定向请求的时候,307 状态码可以确保请求方法和消息主体不会发生变化。如果使用 302 响应状态码,一些旧客户端会错误地将请求方法转换为 GET:也就是说,在 Web 中,如果使用了 GET 以外的请求方法,且返回了 302 状态码,则重定向后的请求方法是不可预测的;但如果使用 307 状态码,之后的请求方法就是可预测的。对于 GET 请求来说,两种情况没有区别。
308 Permanent Redirect 在 HTTP 协议中, 308 Permanent Redirect(永久重定向)是表示重定向的响应状态码,说明请求的资源已经被永久的移动到了由 Location 首部指定的 URL 上。浏览器会进行重定向,同时搜索引擎也会更新其链接(用 SEO 的行话来说,意思是“链接汁”(link juice)被传递到了新的 URL)。
在重定向过程中,请求方法和消息主体不会发生改变,然而在返回 301 状态码的情况下,请求方法有时候会被客户端错误地修改为 GET 方法。
400 Bad Request HTTP 400 Bad Request 响应状态码表示由于语法无效,服务器无法理解该请求。 客户端不应该在未经修改的情况下重复此请求。
401 Unauthorized 状态码 401 Unauthorized 代表客户端错误,指的是由于缺乏目标资源要求的身份验证凭证,发送的请求未得到满足。
这个状态码会与 WWW-Authenticate 首部一起发送,其中包含有如何进行验证的信息。
这个状态类似于 403, 但是在该情况下,依然可以进行身份验证。
402 Payment Required 402 Payment Required 是一个被保留使用的非标准客户端错误状态响应码。
有时, 这个状态码表明直到客户端付费之后请求才会被处理。402状态码被创建最初目的是用于数字现金或微型支付系统, 表明客户端请求的内容只有付费之后才能获取。目前还不存在标准的使用约定, 不同的实体可以在不同的环境下使用。
403 Forbidden 状态码 403 Forbidden 代表客户端错误,指的是服务器端有能力处理该请求,但是拒绝授权访问。
这个状态类似于 401,但进入该状态后不能再继续进行验证。该访问是长期禁止的,并且与应用逻辑密切相关(例如不正确的密码)。
404 Not Found 状态码 404Not Found 代表客户端错误,指的是服务器端无法找到所请求的资源。返回该响应的链接通常称为坏链(broken link)或死链(dead link),它们会导向链接出错处理(link rot)页面。
404 状态码并不能说明请求的资源是临时还是永久丢失。如果服务器知道该资源是永久丢失,那么应该返回 410 (Gone) 而不是 404 。
405 Method Not Allowed 状态码 405 Method Not Allowed 表明服务器禁止了使用当前 HTTP 方法的请求。
406 Not Acceptable HTTP 协议中的 406Not Acceptable 状态码表示客户端错误,指代服务器端无法提供与 Accept-Charset 以及 Accept-Language 消息头指定的值相匹配的响应。
在实际应用中,这个错误状态码极少使用:不是给用户返回一个晦涩难懂(且难以更正)的错误状态码,而是将相关的消息头忽略,同时给用户提供一个看得见摸得着的页面。这种做法基于这样一个假设:即便是不能达到用户十分满意,也强于返回错误状态码。
如果服务器返回了这个错误状态码,那么消息体中应该包含所能提供的资源表现形式的列表,允许用户手动进行选择。
407 Proxy Authentication Required 状态码 407 Proxy Authentication Required 代表客户端错误,指的是由于缺乏位于浏览器与可以访问所请求资源的服务器之间的代理服务器(proxy server )要求的身份验证凭证,发送的请求尚未得到满足。
这个状态码会与 Proxy-Authenticate 首部一起发送,其中包含有如何进行验证的信息。
408 Request Timeout 响应状态码 408 Request Timeout 表示服务器想要将没有在使用的连接关闭。一些服务器会在空闲连接上发送此信息,即便是在客户端没有发送任何请求的情况下
服务器应该在此类响应中将 Connection 首部的值设置为 “close”,因为 408 意味着服务器已经决定将连接关闭,而不是继续等待。
这类响应出现的比较频繁,源于一些浏览器——例如 Chrome, Firefox 27+, 或者 IE9 等——使用 HTTP 协议中的预连接机制来加速上网体验。同时应该注意到,某些服务器会直接关闭连接,而不发送此类消息。
409 Conflict 响应状态码 409 Conflict 表示请求与服务器端目标资源的当前状态相冲突。
冲突最有可能发生在对 PUT 请求的响应中。例如,当上传文件的版本比服务器上已存在的要旧,从而导致版本冲突的时候,那么就有可能收到状态码为 409 的响应。
410 Gone HTTP 410丢失 说明请求的目标资源在原服务器上不存在了,并且是永久性的丢失。如果不清楚是否为永久或临时的丢失,应该使用404
411 Length Required 响应状态码 411Length Required 属于客户端错误,表示由于缺少确定的Content-Length 首部字段,服务器拒绝客户端的请求。
注意,按照规范,当使用分块模式传输数据的时候, Content-Length 首部是不存在的,但是需要在每一个分块的开始添加该分块的长度,用十六进制数字表示。参见 Transfer-Encoding 获取更多细节信息。
412 Precondition Failed 在 HTTP 协议中,响应状态码 412 Precondition Failed(先决条件失败)表示客户端错误,意味着对于目标资源的访问请求被拒绝。这通常发生于采用除 GETHEAD 之外的方法进行条件请求时,由首部字段 If-Unmodified-SinceIf-None-Match 规定的先决条件不成立的情况下。这时候,请求的操作——通常是上传或修改文件——无法执行,从而返回该错误状态码。
413 Payload Too Large 响应状态码 413 Payload Too Large 表示请求主体的大小超过了服务器愿意或有能力处理的限度,服务器可能会(may)关闭连接以防止客户端继续发送该请求。
如果“超出限度”是暂时性的,服务器应该返回 Retry-After 首部字段,说明这是暂时性的,以及客户端可以在什么时间(after what time)后重试。
414 URI Too Long 响应码 414 URI Too Long 表示客户端所请求的 URI 超过了服务器允许的范围。
以下是造成这种罕见情况的几种可能原因:
- 当客户端误将 POST 请求当作 GET 请求时,会带有一个较长的查询字符串(query);
- 当客户端堕入重定向循环黑洞时,例如,指向自身后缀的重定向URI前缀(a redirected URI prefix that points to a suffix of itself);
- 当客户端对服务器进行攻击,试图寻找潜在的漏洞时。
415 Unsupported Media Type 415 Unsupported Media Type 是一种HTTP协议的错误状态代码,表示服务器由于不支持其有效载荷的格式,从而拒绝接受客户端的请求。
格式问题的出现有可能源于客户端在 Content-TypeContent-Encoding 首部中指定的格式,也可能源于直接对负载数据进行检测的结果。
416 Range Not Satisfiable HTTP 416Range Not Satisfiable 错误状态码意味着服务器无法处理所请求的数据区间。最常见的情况是所请求的数据区间不在文件范围之内,也就是说,Range 首部的值,虽然从语法上来说是没问题的,但是从语义上来说却没有意义。
416 响应报文包含一个 Content-Range 首部,提示无法满足的数据区间(用星号 * 表示),后面紧跟着一个“/”,再后面是当前资源的长度。例如:Content-Range: */12777
遇到这一错误状态码时,浏览器一般有两种策略:要么终止操作(例如,一项中断的下载操作被认为是不可恢复的),要么再次请求整个文件。
417 Expectation Failed HTTP协议中的 417 Expectation Failed 状态码表示客户端错误,意味着服务器无法满足 Expect 请求消息头中的期望条件。
参考 Expect 消息头获得更多的相关细节信息。
418 I'm a teapot HTTP 418 I'm a teapot 客户端错误响应代码表示服务器拒绝冲泡咖啡,因为它是个茶壶。
该错误是超文本咖啡壶控制协议的参考,和 1998 年愚人节的玩笑。
422 Unprocessable Entity HTTP 422 状态码表示服务器理解请求实体的内容类型,并且请求实体的语法是正确的,但是服务器无法处理所包含的指令。
425 Too Early 状态码 425 Too Early 代表服务器不愿意冒风险来处理该请求,原因是处理该请求可能会被“重放”,从而造成潜在的重放攻击
426 Upgrade Required 426 Upgrade Required 是一种HTTP协议的错误状态代码,表示服务器拒绝处理客户端使用当前协议发送的请求,但是可以接受其使用升级后的协议发送的请求。
服务器会在响应中使用 Upgrade (en-US) 首部来指定要求的协议。
428 Precondition Required 在HTTP协议中,响应状态码 428 Precondition Required 表示服务器端要求发送条件请求。
一般的,这种情况意味着必要的条件首部——如 If-Match ——的缺失。.
当一个条件首部的值不能匹配服务器端的状态的时候,应答的状态码应该是 412 Precondition Failed,前置条件验证失败。
429 Too Many Requests 在HTTP协议中,响应状态码 429 Too Many Requests 表示在一定的时间内用户发送了太多的请求,即超出了“频次限制”。
在响应中,可以提供一个 Retry-After 首部来提示用户需要等待多长时间之后再发送新的请求。
431 Request Header Fields Too Large 响应码 431 Request Header Fields Too Large 表示由于请求中的首部字段的值过大,服务器拒绝接受客户端的请求。客户端可以在缩减首部字段的体积后再次发送请求。
该响应码可以用于首部总体体积过大的情况,也可以用于单个首部体积过大的情况。
这种错误不应该出现于经过良好测试的投入使用的系统当中,而是更多出现于测试新系统的时候
451 Unavailable For Legal Reasons 451Unavailable For Legal Reasons (因法律原因不可用)是一种HTTP协议的错误状态代码,表示服务器由于法律原因,无法提供客户端请求的资源,例如可能会导致法律诉讼的页面。
500 Internal Server Error 在 HTTP 协议中,500 Internal Server Error 是表示服务器端错误的响应状态码,意味着所请求的服务器遇到意外的情况并阻止其执行请求。
这个错误代码是一个通用的“万能”响应代码。有时候,对于类似于 500 这样的错误,服务器管理员会更加详细地记录相关的请求信息来防止以后同样错误的出现。
501 Not Implemented HTTP 501Not Implemented 服务器错误响应码表示请求的方法不被服务器支持,因此无法被处理。服务器必须支持的方法(即不会返回这个状态码的方法)只有 GETHEAD
请注意,你无法修复 501 错误,需要被访问的 web 服务器去修复该问题。
502 Bad Gateway 502Bad Gateway 是一种HTTP协议的服务器端错误状态代码,它表示作为网关或代理角色的服务器,从上游服务器(如tomcat、php-fpm)中接收到的响应是无效的。
Gateway (网关)在计算机网络体系中可以指代不同的设备,502 错误通常不是客户端能够修复的,而是需要由途径的Web服务器或者代理服务器对其进行修复。
503 Service Unavailable 503Service Unavailable 是一种HTTP协议的服务器端错误状态代码,它表示服务器尚未处于可以接受请求的状态。
通常造成这种情况的原因是由于服务器停机维护或者已超载。注意在发送该响应的时候,应该同时发送一个对用户友好的页面来解释问题发生的原因。该种响应应该用于临时状况下,与之同时,在可行的情况下,应该在 Retry-After 首部字段中包含服务恢复的预期时间。
缓存相关的首部在与该响应一同发送时应该小心使用,因为 503 状态码通常应用于临时状况下,而此类响应一般不应该进行缓存。
504 Gateway Timeout 504Gateway Timeout 是一种HTTP协议的服务器端错误状态代码,表示扮演网关或者代理的服务器无法在规定的时间内获得想要的响应。
Gateway (网关)在计算机网络体系中可以指代不同的设备,504 错误通常不是在客户端可以修复的,而是需要由途径的Web服务器或者代理服务器对其进行修复。
505 HTTP Version Not Supported 505 HTTP Version Not Supported 是一种HTTP协议的服务器端错误状态代码,表示服务器不支持请求所使用的 HTTP 版本。
506 Variant Also Negotiates HTTP协议的 506 Variant Also Negotiates 响应状态码 可以在TCN(透明内容协商,见RF2295)上下文给出。TCN协议允许客户端取回给定资源的最佳变量/变元,这里服务器支持多个变量/变元。
506码表示内部服务器配置错误,其中所选变量/变元自身被配置为参与内容协商,因此并不是合适的协商端点。
507 Insufficient Storage HTTP协议的 507 Insufficient Storage 响应状态码 可以在WebDAV协议(基于web的分布式创作和版本控制,参见RFC 4918)中给出。
507码表示服务器不能存储相关内容。准确地说,一个方法可能没有被执行,因为服务器不能存储其表达形式,这里的表达形式指:方法所附带的数据,而且其请求必需已经发送成功。
508 Loop Detected HTTP协议的 508 Loop Detected 状态码可以在WebDAV协议(基于Web的分布式创作和版本控制)中给出。
508码表示服务器中断一个操作,因为它在处理具有“Depth: infinity”的请求时遇到了一个无限循环。508码表示整个操作失败。
510 Not Extended HTTP协议的 510 Not Extended 响应状态码在HTTP扩展框架协议(参见RFC 2774)中发送。
在HTTP扩展框架协议中 ,一个客户端可以发送一个包含扩展声明的请求,该声明描述了要使用的扩展。如果服务器接收到这样的请求,但是请求不支持任何所描述的扩展,那么服务器将使用510状态码进行响应。
511 Network Authentication Required 511 Network Authentication Required 是一种HTTP协议的错误状态代码,表示客户端需要通过验证才能使用该网络。
该状态码不是由源头服务器生成的,而是由控制网络访问的拦截代理服务器生成的。
网络运营商们有时候会在准许使用网络之前要求用户进行身份验证、接受某些条款,或者进行其他形式的与用户之间的互动(例如在网络咖啡厅或者机场)。他们通常用用户设备的 MAC 地址来进行识别。