服务器返回的14种常见HTTP状态码

usbwc 8年前
   <p>当我们从客户端向服务器发送请求时</p>    <p>服务器向我们返回状态码</p>    <p>状态码就是告诉我们服务器响应的状态</p>    <p>通过它,我们就可以知道当前请求是成功了还是出现了什么问题</p>    <p>状态码是由3位数字和原因短语组成的(比如最常见的:200 OK)</p>    <p>其中第一位数字表示响应类别,响应类别从1到5分为五种</p>    <p>add:其实我查阅资料发现还有一个6打头的一个 600 Unparseable Response Headers</p>    <p>表示服务器没有返回响应头部,只返回实体内容,也算做服务器错误状态码吧,不过绝对不常见</p>    <table>     <thead>      <tr>       <th>状态码</th>       <th>响应类别</th>       <th>原因短语</th>      </tr>     </thead>     <tbody>      <tr>       <td>1XX</td>       <td>信息性状态码(Informational)</td>       <td>服务器正在处理请求</td>      </tr>      <tr>       <td>2XX</td>       <td>成功状态码(Success)</td>       <td>请求已正常处理完毕</td>      </tr>      <tr>       <td>3XX</td>       <td>重定向状态码(Redirection)</td>       <td>需要进行额外操作以完成请求</td>      </tr>      <tr>       <td>4XX</td>       <td>客户端错误状态码(Client Error)</td>       <td>客户端原因导致服务器无法处理请求</td>      </tr>      <tr>       <td>5XX</td>       <td>服务器错误状态码(Server Error)</td>       <td>服务器原因导致处理请求出错</td>      </tr>     </tbody>    </table>    <p>状态码响应类别的的定义是必须遵守的,后面的两个数字服务器自己DIY也没什么问题</p>    <p>RFC2616(用来指定HTTP协议标准的文档)标准定义的就有四十多种,加上扩展能达到六十种</p>    <p>不过常见的大概只有十四种,下面我来谈谈这些有代表性的14种HTTP状态码</p>    <h2>2XX 成功</h2>    <h2>200 OK</h2>    <p>表示请求被服务器正常处理</p>    <p>最常见的就是这个了</p>    <p>随着这个状态码返回的信息跟你的请求方法有关</p>    <p>比如GET请求,请求的资源会作为响应实体返回</p>    <p>而HEAD请求,信息只存在于响应报文首部,因为它不会返回报文实体,只返回报文首部</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/1dd00dfc141dee1dccbc768d75eced63.png"></p>    <h2>204 No Content</h2>    <p>表示请求已成功处理,但是没有内容返回(就应该没有内容返回的状况)</p>    <p>也就是返回的响应报文中没有报文实体(其实是没有报文实体的主体部分)</p>    <p>浏览器向服务器发送请求后收到了204,那么浏览器页面不会发生更新</p>    <p>一般用在只是客户端向服务器发送信息,而服务器不用向客户端返回什么信息的情况</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/1109d61fbb27fba8313458590384e785.png"></p>    <h2>206 Partial Content</h2>    <p>表示服务器已经完成了部分GET请求(客户端进行了范围请求)</p>    <p>响应报文中包含Content-Range指定范围的实体内容</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/11925cf89bc2300c5caf80fcf8060e59.png"></p>    <h2>3XX 重定向</h2>    <h2>301 Moved Permanently</h2>    <p>永久重定向,表示请求的资源已经永久的搬到了其他位置</p>    <p>就是说资源已经被分配了新的URI</p>    <p>新的URI应该提示在响应报文的Location首部字段</p>    <p>只要不是HEAD请求,响应实体应该包含新URI的超链接和简短的说明</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/52f619ac33dc1d039d7c4093206f9728.png"></p>    <h2>302 Found</h2>    <p>临时重定向,表示请求的资源临时搬到了其他位置</p>    <p>请求的资源暂时被配到到了新的URI</p>    <p>和301很像,只不过资源是临时移动,资源在将来可能还会改变</p>    <p>同样地,新的临时URI应该提示在响应报文的Location首部字段</p>    <p>只要不是HEAD请求,响应实体应该包含新URI的超链接和简短的说明</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/b5e058d748caa9d1463b97e94c5b37eb.png"></p>    <h2>303 See Other</h2>    <p>表示请求资源存在另一个URI,应使用GET定向获取请求资源</p>    <p>303功能与302一样,区别只是303明确客户端应该使用GET访问</p>    <p>(很多HTTP/1.1之前的浏览器不能理解303,但是大家都把302当303对待,使用GET请求新URI)</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/8975a345642fad432ba80dbaa21eb66c.png"></p>    <h2>304 Not Modified</h2>    <p>表示客户端发送附带条件的请求(GET方法请求报文中的IF…)时,条件不满足</p>    <p>返回304时,不包含任何响应主体</p>    <p>虽然304被划分在3XX,但和重定向一毛钱关系都没有</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/f5d90eb1eb250522b35e8681878f6ab9.png"></p>    <h2>307 Temporary Redirect</h2>    <p>临时重定向,和302有着相同含义</p>    <p>尽管302标准禁止POST变为GET,但没人听他的</p>    <p>而307就会遵照标准,不会从POST变为GET</p>    <p>但处理响应行为,各个浏览器可能不同</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/372d18f3faa913044c66f893f84f86a2.png"></p>    <h2>4XX 客户端错误</h2>    <h2>400 Bad Request</h2>    <p>表示请求报文存在语法错误或参数错误,服务器不理解</p>    <p>服务器不应该重复提交这个请求</p>    <p>需要修改请求内容后再次发送</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/dbad23401b40d74a2c2c25a4f2f4149f.png"></p>    <h2>401 Unauthorized</h2>    <p>表示发送的请求需要有HTTP认证信息或者是认证失败了</p>    <p>返回401的响应必须包含一个适用于被请求资源的WWW-Authenticate首部以质询用户信息</p>    <p>浏览器初次接受401时,会弹出认证窗口</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/ae563457882bb55d61a50bbba86dff66.png"></p>    <h2>403 Forbidden</h2>    <p>表示对请求资源的访问被服务器拒绝了</p>    <p>服务器可以对此作出解释,也可以不解释</p>    <p>想说明的话可以在响应实体的主体部分描述原因</p>    <p>比如说你可能没有访问权限</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/5d761097164ee63ca3ad633a1395949d.png"></p>    <h2>404 Not Found</h2>    <p>表示服务器找不到你请求的资源</p>    <p>也有可能服务器就是不想给你然后骗你找不到(⊙ˍ⊙)</p>    <p>而且大多服务器都是这么玩这个状态码的</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/ca4ac9ec6c8abe0dad7f383ff5272962.png"></p>    <h2>5XX 服务器错误</h2>    <h2>500 Internal Server Error</h2>    <p>表示服务器执行请求的时候出错了</p>    <p>可能是Web应用有bug或临时故障</p>    <p>更有可能是服务器源代码有bug…</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/64f601554315155f7441b846b0c828b1.png"></p>    <h2>503 Service Unavailable</h2>    <p>表示服务器超负载或正停机维护,无法处理请求</p>    <p>如果服务器知道还需要多长时间,就写入Retry-After首部字段返回</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/a03e7c4fa0988b1eeefe7b1377ced5b2.png"></p>    <h2>总结</h2>    <p>返回的状态码和状态不一致的情况是有可能发生得</p>    <p>比如Web应用程序内部错误,但仍然返回 200 OK</p>    <ul>     <li>200 OK<br> 请求正常处理完毕</li>     <li>204 No Content<br> 请求成功处理,没有实体的主体返回</li>     <li>206 Partial Content<br> GET范围请求已成功处理</li>     <li>301 Moved Permanently<br> 永久重定向,资源已永久分配新URI</li>     <li>302 Found<br> 临时重定向,资源已临时分配新URI</li>     <li>303 See Other<br> 临时重定向,期望使用GET定向获取</li>     <li>304 Not Modified<br> 发送的附带条件请求未满足</li>     <li>307 Temporary Redirect<br> 临时重定向,POST不会变成GET</li>     <li>400 Bad Request<br> 请求报文语法错误或参数错误</li>     <li>401 Unauthorized<br> 需要通过HTTP认证,或认证失败</li>     <li>403 Forbidden<br> 请求资源被拒绝</li>     <li>404 Not Found<br> 无法找到请求资源(服务器无理由拒绝)</li>     <li>500 Internal Server Error<br> 服务器故障或Web应用故障</li>     <li>503 Service Unavailable<br> 服务器超负载或停机维护</li>    </ul>    <p> </p>    <p>来自:http://www.androidchina.net/6013.html</p>    <p> </p>