http200、301、304等状态码详解
当浏览者访问⼀个⽹页时,浏览者的浏览器会向⽹页所在服务器发出请求。当浏览器接收并显⽰⽹页前,此⽹页所在的服务器会返回⼀个包含HTTP状态码的信息头(server header)⽤以响应浏览器的请求
HTTP状态码的英⽂为HTTP Status Code。下⾯是常见的HTTP状态码:
•200 - 请求成功
•301 - 资源(⽹页等)被永久转移到其它URL
•404 - 请求的资源(⽹页等)不存在
•500 - 内部服务器错误
200表⽰正常0k,这个是地球⼈都知道的了。
301 Moved Permanently 表⽰客户请求的⽂档在其他地⽅,新的URL在Location头中给出,浏览器应该⾃动地访问新的URL。304 Not Modified:客户端有缓冲的⽂件并发出了⼀个条件性的请求(⼀般是提供If-Modified-Since头表⽰客户只想⽐指定⽇期更新的⽂档)。服务器告诉客户,原来缓冲的⽂档还可以继续使⽤。
如果客户端在请求⼀个⽂件的时候,发现⾃⼰缓存的⽂件有 Last Modified ,那么在请求中会包含 If Modified Since ,这个时间就是缓存⽂件的 Last Modified 。因此,如果请求中包含 If Modified Since,就说明已经有缓存在客户端。只要判断这个时间和当前请求的⽂件的修改时间就可以确定是返回 304 还是 200 。对于静态⽂件,例如:CSS、图⽚,服务器会⾃动完成Last Modified 和 If Modified Since 的⽐较,完成缓存或者更新。但是对于动态页⾯,就是动态产⽣的页⾯,往往没有包含Last Modified 信息,这样浏览器、⽹关等都不会做缓存,也就是在每次请求的时候都完成⼀个 200 的请求。
⼀般的⼤的站点的图⽚服务器都有实现HTTP 304 缓存功能。
这个 304 状态⼀般主要在⽤户刷新页⾯(F5键)的时候触发,当⽤户在刷新页⾯的时候,因为原来的页⾯⾥的很多图⽚已经缓存过,客户端的浏览器已经记录了图⽚的最后更新时间(Last Mod),所以在⽤户刷新页⾯的时候,会向服务器提交⼀个字段:If-Modified-Since: Wed, 08 Sep 2010 21:35:06 GMT
这个时候,服务器端的程序先取得这个字段的值,然后与服务器上的图⽚最后修改时间对⽐,如果相同,就直接返回 304 Not Modified ,然后停⽌。这样就不⽤把图⽚重新传输到客户端,达到节省带宽的⽬的。
关于 Cache-Control: max-age=秒和 Expires
Expires = 时间,HTTP 1.0 版本,缓存的载⽌时间,允许客户端在这个时间之前不去检查(发请求)
max-age = 秒,HTTP 1.1版本,资源在本地缓存多少秒。
如果max-age和Expires同时存在,则被Cache-Control的max-age覆盖。
Expires 的⼀个缺点就是,返回的到期时间是服务器端的时间,这样存在⼀个问题,如果客户端的时间与服务器的时间相差很⼤,那么误差就很⼤,所以在HTTP 1.1版开始,使⽤Cache-Control: max-age=秒替代。
所有状态码汇总:
1xx(临时响应)
表⽰临时响应并需要请求者继续执⾏操作的状态代码。
代码说明
100 (继续)请求者应当继续提出请求。服务器返回此代码表⽰已收到请求的第⼀部分,正在等待其余部分。
101 (切换协议)请求者已要求服务器切换协议,服务器已确认并准备切换。
2xx (成功)
表⽰成功处理了请求的状态代码。
代码说明
200 (成功)服务器已成功处理了请求。通常,这表⽰服务器提供了请求的⽹页。
201 (已创建)请求成功并且服务器创建了新的资源。
202 (已接受)服务器已接受请求,但尚未处理。
203 (⾮授权信息)服务器已成功处理了请求,但返回的信息可能来⾃另⼀来源。
204 (⽆内容)服务器成功处理了请求,但没有返回任何内容。
205 (重置内容)服务器成功处理了请求,但没有返回任何内容。
206 (部分内容)服务器成功处理了部分 GET 请求。
3xx (重定向)
表⽰要完成请求,需要进⼀步操作。通常,这些状态代码⽤来重定向。
代码说明
300 (多种选择)针对请求,服务器可执⾏多种操作。服务器可根据请求者 (user agent) 选择⼀项操作,或提供操作列表供请求者选择。
301 (永久移动)请求的⽹页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会⾃动将请求者转到新位置。
302 (临时移动)服务器⽬前从不同位置的⽹页响应请求,但请求者应继续使⽤原有位置来进⾏以后的请求。
303 (查看其他位置)请求者应当对不同的位置使⽤单独的 GET 请求来检索响应时,服务器返回此代码。
304 (未修改)⾃从上次请求后,请求的⽹页未修改过。服务器返回此响应时,不会返回⽹页内容。
305 (使⽤代理)请求者只能使⽤代理访问请求的⽹页。如果服务器返回此响应,还表⽰请求者应使⽤代理。
307 (临时重定向)服务器⽬前从不同位置的⽹页响应请求,但请求者应继续使⽤原有位置来进⾏以后的请求。
4xx(请求错误)
这些状态代码表⽰请求可能出错,妨碍了服务器的处理。
代码说明
400 (错误请求)服务器不理解请求的语法。
401 (未授权)请求要求⾝份验证。对于需要登录的⽹页,服务器可能返回此响应。
403 (禁⽌)服务器拒绝请求。
404 (未到)服务器不到请求的⽹页。
405 (⽅法禁⽤)禁⽤请求中指定的⽅法。
406 (不接受)⽆法使⽤请求的内容特性响应请求的⽹页。
407 (需要代理授权)此状态代码与 401(未授权)类似,但指定请求者应当授权使⽤代理。
408 (请求超时)服务器等候请求时发⽣超时。
409 (冲突)服务器在完成请求时发⽣冲突。服务器必须在响应中包含有关冲突的信息。
410 (已删除)如果请求的资源已永久删除,服务器就会返回此响应。
411 (需要有效长度)服务器不接受不含有效内容长度标头字段的请求。
412 (未满⾜前提条件)服务器未满⾜请求者在请求中设置的其中⼀个前提条件。
413 (请求实体过⼤)服务器⽆法处理请求,因为请求实体过⼤,超出服务器的处理能⼒。
414 (请求的 URI 过长)请求的 URI(通常为⽹址)过长,服务器⽆法处理。
415 (不⽀持的媒体类型)请求的格式不受请求页⾯的⽀持。
416 (请求范围不符合要求)如果页⾯⽆法提供请求的范围,则服务器会返回此状态代码。
417 (未满⾜期望值)服务器未满⾜"期望"请求标头字段的要求。
5xx(服务器错误)
这些状态代码表⽰服务器在尝试处理请求时发⽣内部错误。这些错误可能是服务器本⾝的错误,⽽不是请求出错。
代码说明
500 (服务器内部错误)服务器遇到错误,⽆法完成请求。
501 (尚未实施)服务器不具备完成请求的功能。例如,服务器⽆法识别请求⽅法时可能会返回此代码。
502 (错误⽹关)服务器作为⽹关或代理,从上游服务器收到⽆效响应。
503 (服务不可⽤)服务器⽬前⽆法使⽤(由于超载或停机维护)。通常,这只是暂时状态。
504 (⽹关超时)服务器作为⽹关或代理,但是没有及时从上游服务器收到请求。
505 (HTTP 版本不受⽀持)服务器不⽀持请求中所⽤的 HTTP 协议版本。HTTP状态码的分类
HTTP状态码由三个⼗进制数字组成,第⼀个⼗进制数字定义了状态码的类型,后两个数字没有分类的作⽤。HTTP状态码共分为5种类型:
分类分类描述
1**信息,服务器收到请求,需要请求者继续执⾏操作
2**成功,操作被成功接收并处理
3**重定向,需要进⼀步的操作以完成请求
4**客户端错误,请求包含语法错误或⽆法完成请求
5**服务器错误,服务器在处理请求的过程中发⽣了错误
HTTP状态码表(版本1)此表含状态码英⽂名称
状态码状态码英⽂名
重定向英文
中⽂描述
1开头的状态码
100Continue继续。客户端应继续其请求
Switching切换协议。服务器根据客户端的请求切换协议。只能切换到更⾼级
101Protocols的协议,例如,切换到HTTP的新版本协议2开头的状态码
200OK请求成功。⼀般⽤于GET与POST请求201Created已创建。成功请求并创建了新的资源
202Accepted已接受。已经接受请求,但未处理完成
203Non-
Authoritative
Information
⾮授权信息。请求成功。但返回的meta信息不在原始的服务器,⽽
是⼀个副本
204No Content⽆内容。服务器成功处理,但未返回内容。在未更新⽹页的情况
下,可确保浏览器继续显⽰当前⽂档
205Reset Content重置内容。服务器处理成功,⽤户终端(例如:浏览器)应重置⽂
档视图。可通过此返回码清除浏览器的表单域
206Partial
Content部分内容。服务器成功处理了部分GET请求
3开头的状态码
300Multiple
Choices
多种选择。请求的资源可包括多个位置,相应可返回⼀个资源特征
与地址的列表⽤于⽤户终端(例如:浏览器)选择
301Moved
Permanently
永久移动。请求的资源已被永久的移动到新URI,返回信息会包括
新的URI,浏览器会⾃动定向到新URI。今后任何新的请求都应使
⽤新的URI代替
302Found临时移动。与301类似。但资源只是临时被移动。客户端应继续使
⽤原有URI
303See Other查看其它地址。与301类似。使⽤GET和POST请求查看
304Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供⼀个头信息指出客户端希望只返回在指定⽇期之后修改的资源
305Use Proxy使⽤代理。所请求的资源必须通过代理访问306Unused已经被废弃的HTTP状态码
307Temporary
Redirect临时重定向。与302类似。使⽤GET请求重定向
4开头的状态码
400Bad Request客户端请求的语法错误,服务器⽆法理解401Unauthorized请求要求⽤户的⾝份认证
402Payment
Required保留,将来使⽤
403Forbidden服务器理解请求客户端的请求,但是拒绝执⾏此请求
404Not Found服务器⽆法根据客户端的请求到资源(⽹页)。通过此代码,⽹
站设计⼈员可设置"您所请求的资源⽆法到"的个性页⾯
405Method Not
Allowed客户端请求中的⽅法被禁⽌
406Not
Acceptable服务器⽆法根据客户端请求的内容特性完成请求
407Proxy
Authentication
Required
请求要求代理的⾝份认证,与401类似,但请求者应当使⽤代理进
⾏授权
408Request
Time-out服务器等待客户端发送的请求时间过长,超时
409Conflict服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求
时发⽣了冲突
410Gone 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使⽤410代码,⽹站设计⼈员可通过301代码指定资源的新位置
411Length
Required服务器⽆法处理客户端发送的不带Content-Length的请求信息
412Precondition
Failed客户端请求信息的先决条件错误
状态码状态码英⽂名
中⽂描述
413Request
Entity Too
Large
由于请求的实体过⼤,服务器⽆法处理,因此拒绝请求。为防⽌客
户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时⽆
法处理,则会包含⼀个Retry-After的响应信息
414Request-URI
Too Large请求的URI过长(URI通常为⽹址),服务器⽆法处理
415Unsupported
Media Type服务器⽆法处理请求附带的媒体格式
416Requested
range not
satisfiable
客户端请求的范围⽆效
417Expectation
Failed服务器⽆法满⾜Expect的请求头信息
5开头的状态码
500Internal
Server Error服务器内部错误,⽆法完成请求
501Not
Implemented服务器不⽀持请求的功能,⽆法完成请求
502Bad Gateway充当⽹关或代理的服务器,从远端服务器接收到了⼀个⽆效的请求
503Service
Unavailable
由于超载或系统维护,服务器暂时的⽆法处理客户端的请求。延时
的长度可包含在服务器的Retry-After头信息中
504Gateway
Time-out充当⽹关或代理的服务器,未及时从远端服务器获取请求
505HTTP Version
not supported服务器不⽀持请求的HTTP协议的版本,⽆法完成处理
状态码状态码英⽂名
中⽂描述
HTTP状态码列表(版本2)此表的描述更详细些状态码含义
100客户端应当继续发送请求。这个临时响应是⽤来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送⼀个最终响应。
101服务器已经理解了客户端的请求,并将通过Upgrade 消息头通知客户端采⽤不同的协议来完成这个请求。在发送完这个响应最后的空⾏后,服务器将会切换到在Upgrade 消息头中定义的那些协议。  只
有在切换新的协议更有好处的时候才应该采取类似措施。例如,切换到新的HTTP 版本⽐旧版本更有优势,或者切换到⼀个实时且同步的协议以传送利⽤此类特性的资源。
102由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执⾏。200请求已成功,请求所希望的响应头或数据体将随此响应返回。
201请求已经被实现,⽽且有⼀个新的资源已经依据请求的需要⽽建⽴,且其 URI 已经随Location 头信息返回。假如需要的资源⽆法及时建⽴的话,应当返回 '202 Accepted'。
202服务器已接受请求,但尚未处理。正如它可能被拒绝⼀样,最终该请求可能会也可能不会被执⾏。在异步操作的场合下,没有⽐发送这个状态码更⽅便的做法了。  返回202状态码的响应的⽬的是允许服务器接受其他过程的请求(例如某个每天只执⾏⼀次的基于批处理的操作),⽽不必让客户端⼀直保持与服务器的连接直到批处理操作全部完成。在接受请求处理并返回202状态码的响应应当在返回的实体中包含⼀些指⽰处理当前状态的信息,以及指向处理状态监视器或状态预测的指针,以便⽤户能够估计操作是否已经完成。
203服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,⽽是来⾃本地或者第三⽅的拷贝。当前的信息可能是原始版本的⼦集或者超集。例如,包含资源的元数据可能导致原始服务器知道元信息的超级。使⽤此状态码不是必须的,⽽且只有在响应不使⽤此状态码便会返
回200 OK的情况下才是合适的。
服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息。响应可能通过实体头部的形式,返回新的或更新后的元信息。如果存在这些头部信息,则应当与所请求的变量相呼应。  如果客户端是浏览器的话,那
204么⽤户浏览器应保留发送了该请求的页⾯,⽽不产⽣任何⽂档视图上的变化,即使按照规范新的或更新后的元信息应当被应⽤到⽤户浏览器活动视图中的⽂档。
  由于204响应被禁⽌包含任何消息体,因此它始终以消息头后的第⼀个空⾏结尾。
205服务器成功处理了请求,且没有返回任何内容。但是与204响应不同,返回此状态码的响应要求请求者重置⽂档视图。该响应主要是被⽤于接受⽤户输⼊后,⽴即重置表单,以便⽤户能够轻松地开始另⼀次输⼊。  与204响应⼀样,该响应也被禁⽌包含任何消息体,且以消息头后的第⼀个空⾏结束。
206服务器已经成功处理了部分 GET 请求。类似于 FlashGet 或者迅雷这类的 HTTP 下载⼯具都是使⽤此类响应实现断点续传或者将⼀个⼤⽂档分解为多个下载段同时下载。  该请求必须包含 Range 头信息来指⽰客户端希望得到的内容范围,并且可能包含 If-Range 来作为请求条件。  响应必须包含如下的头部域:  Content-Range ⽤以指⽰本次响应中返回的内容的范围;如果是 Content-Type 为 multipart/byte
ranges 的多段下载,则每⼀ multipart 段中都应包含 Content-Range 域⽤以指⽰本段的内容范围。假如响应中包含 Content-Length,那么它的数值必须匹配它返回的内容范围的真实字节数。  Date   ETag 和/或Content-Location,假如同样的请求本应该返回200响应。  Expires, Cache-Control,和/或 Vary,假如其值可能与之前相同变量的其他响应对应的值不同的话。  假如本响应请求使⽤了 If-Range 强缓存验证,那么本次响应不应该包含其他实体头;假如本响应的请求使⽤了 If-Range 弱缓存验证,那么本次响应禁⽌包含其他实体头;这避免了缓存的实体内容和更新了的实体头信息之间的不⼀致。否则,本响应就应当包含所有本应该返回200响应中应当返回的所有实体头部域。  假如 ETag 或 Last-Modified 头部不能精确匹配的话,则客户端缓存应禁⽌将206响应返回的内容与之前任何缓存过的内容组合在⼀起。  任何不⽀持Range 以及 Content-Range 头的缓存都禁⽌缓存206响应返回的内容。
207由WebDAV(RFC 2518)扩展的状态码,代表之后的消息体将是⼀个XML消息,并且可能依照之前⼦请求数量的不同,包含⼀系列独⽴的响应代码。
300被请求的资源有⼀系列可供选择的回馈信息,每个都有⾃⼰特定的地址和浏览器驱动的商议信息。⽤户或浏览器能够⾃⾏选择⼀个⾸选的地址进⾏重定向。  除⾮这是⼀个 HEAD 请求,否则该响应应当包括⼀个资源特性及地址的列表的实体,以便⽤户或浏览器从中选择最合适的重定向地址。这个实体的格式由Content-Type 定义的格式所决定。浏览器可能根据响应的格式以及浏览器⾃⾝能⼒,⾃动作出最合适的选择。当然,RFC 2616规范并没有规定这样的⾃动选择该如何进⾏。  如果服务器本⾝已经有了
⾸选的回馈选择,那么在 Location 中应当指明这个回馈的 URI;浏览器可能会将这个 Location 值作为⾃动重定向的地址。此外,除⾮额外指定,否则这个响应也是可缓存的。
301被请求的资源已永久移动到新位置,并且将来任何对此资源的引⽤都应该使⽤本响应返回的若⼲个 URI 之⼀。如果可能,拥有链接编辑功能的客户端应当⾃动把请求的地址修改为从服务器反馈回来的地址。除⾮额外指定,否则这个响应也是可缓存的。  新的永久性的 URI 应当在响应的 Location 域中返回。除⾮这是⼀个 HEAD 请求,否则响应的实体中应当包含指向新的 URI 的超链接及简短说明。  如果这不是⼀个 GET 或者 HEAD 请求,因此浏览器禁⽌⾃动进⾏重定向,除⾮得到⽤户的确认,因为请求的条件可能因此发⽣变化。  注意:对于某些使⽤ HTTP/1.0 协议的浏览器,当它们发送的 POST 请求得到了⼀个301响应的话,接下来的重定向请求将会变成 GET ⽅式。
302请求的资源现在临时从不同的 URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进⾏了指定的情况下,这个响应才是可缓存的。  新的临时性的 URI 应当在响应的Location 域中返回。除⾮这是⼀个 HEAD 请求,否则响应的实体中应当包含指向新的 URI 的超链接及简短说明。  如果这不是⼀个 GET 或者 HEAD 请求,那么浏览器禁⽌⾃动进⾏重定向,除⾮得到⽤户的确认,因为请求的条件可能因此发⽣变化。  注意:虽然RFC 1945和RFC 2068规范不允许客户端在重定向时改变请求的⽅法,但是很多现存的浏览器将302响应视作为303响应,并且使⽤GET ⽅式访问在 Location 中规定的 URI,⽽⽆视原先请求的⽅法。状态码303和
307被添加了进来,⽤以明确服务器期待客户端进⾏何种反应。
303对应当前请求的响应可以在另⼀个 URI 上被到,⽽且客户端应当采⽤ GET 的⽅式访问那个资源。这个⽅法的存在主要是为了允许由脚本激活的POST请求输出重定向到⼀个新的资源。这个新的 URI 不是原始资源的替代引⽤。同时,303响应禁⽌被缓存。当然,第⼆个请求(重定向)可能被缓存。  新的 URI 应当在响应的 Location 域中返回。除⾮这是⼀个 HEAD 请求,否则响应的实体中应当包
状态码含义

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。