完整的 HTTP 1.1规范说明书来自于RFC 2616,你可以在http://www.talentdigger.cn/home/link.php?url=d3d3LnJmYy1lZGl0b3Iub3JnLw%3D%3D在线查阅。HTTP 1.1的状态码被标记为新特性,因为许多浏览器只支持 HTTP 1.0。你应只把状态码发送给支持 HTTP 1.1的客户端,支持协议版本可以通过调用request.getRequestProtocol来检查。
本部分余下的内容会详细地介绍 HTTP 1.1中的状态码。这些状态码被分为五大类:
100-199 用于指定客户端应相应的某些动作。
200-299 用于表示请求成功。
300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。
400-499 用于指出客户端的错误。
500-599 用于支持服务器错误。
HttpServletResponse中的常量代表关联不同标准消息的状态码。在servlet程序中,你会更多地用到这些常量的标识来使用状态码。例如:你一般会使用response.setStatus(response.SC_NO_CONTENT)而不是 response.setStatus(204),因为后者不易理解而且容易导致错误。但是,你应当注意到服务器允许对消息轻微的改变,而客户端只注意状态码的数字值。所以服务器可能只返回 HTTP/1.1 200 而不是 HTTP/1.1 200 OK。
100 (Continue/继续)
如果服务器收到头信息中带有100-continue的请求,这是指客户端询问是否可以在后续的请求中发送附件。在这种情况下,服务器用100(SC_CONTINUE)允许客户端继续或用417 (Expectation Failed)告诉客户端不同意接受附件。这个状态码是 HTTP 1.1中新加入的。
101 (Switching Protocols/转换协议)
101 (SC_SWITCHING_PROTOCOLS)状态码是指服务器将按照其上的头信息变为一个不同的协议。这是 HTTP 1.1中新加入的。
200 (OK/正常)
200 (SC_OK)的意思是一切正常。一般用于相应GET和POST请求。这个状态码对servlet是缺省的;如果没有调用setStatus方法的话,就会得到200。
201 (Created/已创建)
201 (SC_CREATED)表示服务器在请求的响应中建立了新文档;应在定位头信息中给出它的URL。
202 (Accepted/接受)
202 (SC_ACCEPTED)告诉客户端请求正在被执行,但还没有处理完。
203 (Non-Authoritative Information/非官方信息)
状态码203 (SC_NON_AUTHORITATIVE_INFORMATION)是表示文档被正常的返回,但是由于正在使用的是文档副本所以某些响应头信息可能不正确。这是 HTTP 1.1中新加入的。
204 (No Content/无内容)
在并没有新文档的情况下,204 (SC_NO_CONTENT)确保浏览器继续显示先前的文档。这各状态码对于用户周期性的重载某一页非常有用,并且你可以确定先前的页面是否已经更新。例如,某个servlet可能作如下操作:
int pageVersion =Integer.parseInt(request.getParameter("pageVersion"));
if (pageVersion >;= currentVersion) {
response.setStatus(response.SC_NO_CONTENT);
} else {
// Create regular page
}
但是,这种方法对通过刷新响应头信息或等价的HTML标记自动重载的页面起作用,因为它会返回一个204状态码停止以后的重载。但基于JavaScript脚本的自动重载在这种情况下仍然需要能够起作用。可以阅读本书7.2 ( HTTP 1.1 Response Headers and Their Meaning/HTTP 1.1响应头信息以及他们的意义)部分的详细讨论。
205 (Reset Content/重置内容)
重置内容205 (SC_RESET_CONTENT)的意思是虽然没有新文档但浏览器要重置文档显示。这个状态码用于强迫浏览器清除表单域。这是 HTTP 1.1中新加入的。
206 (Partial Content/局部内容)
206 (SC_PARTIAL_CONTENT)是在服务器完成了一个包含Range头信息的局部请求时被发送的。这是 HTTP 1.1中新加入的。
300 (Multiple Choices/多重选择)
300 (SC_MULTIPLE_CHOICES)表示被请求的文档可以在多个地方找到,并将在返回的文档中列出来。如果服务器有首选设置,首选项将会被列于定位响应头信息中。
301 (Moved Permanently)
301 (SC_MOVED_PERMANENTLY)状态是指所请求的文档在别的地方;文档新的URL会在定位响应头信息中给出。浏览器会自动连接到新的URL。
302 (Found/找到)
与301有些类似,只是定位头信息中所给的URL应被理解为临时交换地址而不是永久的。注意:在 HTTP 1.0中,消息是临时移动(Moved Temporarily)的而不是被找到,因此HttpServletResponse中的常量是SC_MOVED_TEMPORARILY不是我们以为的SC_FOUND。
注意
代表状态码302的常量是SC_MOVED_TEMPORARILY而不是SC_FOUND。
状态码302是非常有用的因为浏览器自动连接在定为响应头信息中给出的新URL。这非常有用,而且为此有一个专门的方法——sendRedirect。使用response.sendRedirect(url)比调用response.setStatus(response.SC_MOVED_TEMPORARILY)和response.setHeader("Location", url)多几个好处。首先,response.sendRedirect(url)方法明显要简单和容易。第二,servlet自动建立一页保存这一连接以提供给那些不能自动转向的浏览器显示。最后,在servlet 2.2版本(J2EE中的版本)中,sendRedirect能够处理相对路径,自动转换为绝对路径。但是你只能在2.1版本中使用绝对路径。
如果你将用户转向到站点的另一页中,你要用 HttpServletResponse 中的 encodeURL 方法传送URL。这么做可预防不断使用基于URL重写的会话跟踪的情况。URL重写是一种在你的网站跟踪不使用 cookies 的用户的方法。这是通过在每一个URL尾部附加路径信息实现的,但是 servlet 会话跟踪API会自动的注意这些细节。会话跟踪在第九章讨论,并且养成使用 encodeURL 的习惯会使以后添加会话跟踪的功能更容易很多。
核心技巧
如果你将用户转向到你的站点的其他页面,用 response.sendRedirect(response.encodeURL(url)) 的方式事先计划好会话跟踪(session tracking)要比只是调用 response.sendRedirect(url) 好的多。
这个状态码有时可以与301交换使用。例如,如果你错误的访问了http://www.talentdigger.cn/home/link.php?url=aG9zdC9%2BdXNlcg%3D%3D(路径信息不完整),有些服务器就会回复301状态码而有些则回复302。从技术上说,如果最初的请求是GET浏览器只是被假定自动转向。如果想了解更多细节,请看状态码307的讨论。
303 (See Other/参见其他信息)
这个状态码和 301、302 相似,只是如果最初的请求是 POST,那么新文档(在定位头信息中给出)药用 GET 找回。这个状态码是新加入 HTTP 1.1中的。
304 (Not Modified/为修正)
当客户端有一个缓存的文档,通过提供一个 If-Modified-Since 头信息可指出客户端只希望文档在指定日期之后有所修改时才会重载此文档,用这种方式可以进行有条件的请求。304 (SC_NOT_MODIFIED)是指缓冲的版本已经被更新并且客户端应刷新文档。另外,服务器将返回请求的文档及状态码 200。servlet一般情况下不会直接设置这个状态码。它们会实现getLastModified方法并根据修正日期让默认服务方法处理有条件的请求。这个方法的例程已在2.8部分(An Example Using Servlet Initialization and Page Modification Dates/一个使用servlet初始化和页面修正日期的例子)给出。
305 (Use Proxy/使用代理)
305 (SC_USE_PROXY)表示所请求的文档要通过定位头信息中的代理服务器获得。这个状态码是新加入 HTTP 1.1中的。
307 (Temporary Redirect/临时重定向)
浏览器处理307状态的规则与302相同。307状态被加入到 HTTP 1.1中是由于许多浏览器在收到302响应时即使是原始消息为POST的情况下仍然执行了错误的转向。只有在收到303响应时才假定浏览器会在POST请求时重定向。添加这个新的状态码的目的很明确:在响应为303时按照GET和POST请求转向;而在307响应时则按照GET请求转向而不是POST请求。注意:由于某些原因在HttpServletResponse中还没有与这个状态对应的常量。该状态码是新加入HTTP 1.1中的。
注意
在 HttpServletResponse 中没有 SC_TEMPORARY_REDIRECT 常量,所以你只能显示的使用307状态码。
400 (Bad Request/错误请求)
400 (SC_BAD_REQUEST)指出客户端请求中的语法错误。
401 (Unauthorized/未授权)
401 (SC_UNAUTHORIZED)表示客户端在授权头信息中没有有效的身份信息时访问受到密码保护的页面。这个响应必须包含一个WWW-Authenticate的授权信息头。例如,在本书4.5部分中的“Restricting Access to Web Pages./限制访问Web页。”
403 (Forbidden/禁止)
403 (SC_FORBIDDEN)的意思是除非拥有授权否则服务器拒绝提供所请求的资源。这个状态经常会由于服务器上的损坏文件或目录许可而引起。
404 (Not Found/未找到)
404 (SC_NOT_FOUND)状态每个网络程序员可能都遇到过,他告诉客户端所给的地址无法找到任何资源。它是表示“没有所访问页面”的标准方式。这个状态码是常用的响应并且在HttpServletResponse类中有专门的方法实现它:sendError("message")。相对于setStatus使用sendError得好处是:服务器会自动生成一个错误页来显示错误信息。但是,Internet Explorer 5浏览器却默认忽略你发挥的错误页面并显示其自定义的错误提示页面,虽然微软这么做违反了 HTTP 规范。要关闭此功能,在工具菜单里,选择Internet选项,进入高级标签页,并确认“显示友好的 HTTP 错误信息”选项(在我的浏览器中是倒数第8各选项)没有被选。但是很少有用户知道此选项,因此这个特性被IE5隐藏了起来使用户无法看到你所返回给用户的信息。而其他主流浏览器及IE4都完全的显示服务器生成的错误提示页面。可以参考图6-3及6-4中的例子。
核心警告
默认情况下,IE5忽略服务端生成的错误提示页面。
405 (Method Not Allowed/方法未允许)
405 (SC_METHOD_NOT_ALLOWED)指出请求方法(GET, POST, HEAD, PUT, DELETE, 等)对某些特定的资源不允许使用。该状态码是新加入 HTTP 1.1中的。
406 (Not Acceptable/无法访问)
406 (SC_NOT_ACCEPTABLE)表示请求资源的MIME类型与客户端中Accept头信息中指定的类型不一致。见本书7.2部分中的表7.1(HTTP 1.1 Response Headers and Their Meaning/HTTP 1.1响应头信息以及他们的意义)中对MIME类型的介绍。406是新加入 HTTP 1.1中的。
407 (Proxy Authentication Required/代理服务器认证要求)
407 (SC_PROXY_AUTHENTICATION_REQUIRED)与401状态有些相似,只是这个状态用于代理服务器。该状态指出客户端必须通过代理服务器的认证。代理服务器返回一个Proxy-Authenticate响应头信息给客户端,这会引起客户端使用带有Proxy-Authorization请求的头信息重新连接。该状态码是新加入 HTTP 1.1中的。
408 (Request Timeout/请求超时)
408 (SC_REQUEST_TIMEOUT)是指服务端等待客户端发送请求的时间过长。该状态码是新加入 HTTP 1.1中的。
409 (Conflict/冲突)
该状态通常与PUT请求一同使用,409 (SC_CONFLICT)状态常被用于试图上传版本不正确的文件时。该状态码是新加入 HTTP 1.1中的。
410 (Gone/已经不存在)
410 (SC_GONE)告诉客户端所请求的文档已经不存在并且没有更新的地址。410状态不同于404,410是在指导文档已被移走的情况下使用,而404则用于未知原因的无法访问。该状态码是新加入 HTTP 1.1中的。
411 (Length Required/需要数据长度)
411 (SC_LENGTH_REQUIRED)表示服务器不能处理请求(假设为带有附件的POST请求),除非客户端发送Content-Length头信息指出发送给服务器的数据的大小。该状态是新加入 HTTP 1.1的。
412 (Precondition Failed/先决条件错误)
412 (SC_PRECONDITION_FAILED)状态指出请求头信息中的某些先决条件是错误的。该状态是新加入 HTTP 1.1的。
413 (Request Entity Too Large/请求实体过大)
413 (SC_REQUEST_ENTITY_TOO_LARGE)告诉客户端现在所请求的文档比服务器现在想要处理的要大。如果服务器认为能够过一段时间处理,则会包含一个Retry-After的响应头信息。该状态是新加入 HTTP 1.1的。
414 (Request URI Too Long/请求URI过长)
414 (SC_REQUEST_URI_TOO_LONG)状态用于在URI过长的情况时。这里所指的“URI”是指URL中主机、域名及端口号之后的内容。例如:在URL--http://www.y2k-disaster.com:8080/we/look/silly/now/中URI是指/we/look/silly/now/。该状态是新加入 HTTP 1.1的。
415 (Unsupported Media Type/不支持的媒体格式)
415 (SC_UNSUPPORTED_MEDIA_TYPE)意味着请求所带的附件的格式类型服务器不知道如何处理。该状态是新加入 HTTP 1.1的。
416 (Requested Range Not Satisfiable/请求范围无法满足)
416表示客户端包含了一个服务器无法满足的Range头信息的请求。该状态是新加入 HTTP 1.1的。奇怪的是,在servlet 2.1版本API的HttpServletResponse中并没有相应的常量代表该状态。
注意
在servlet 2.1的规范中,类HttpServletResponse并没有SC_REQUESTED_RANGE_NOT_SATISFIABLE 这样的常量,所以你只能直接使用416。在servlet 2.2版本之后都包含了此常量。
417 (Expectation Failed/期望失败)
如果服务器得到一个带有100-continue值的Expect请求头信息,这是指客户端正在询问是否可以在后面的请求中发送附件。在这种情况下,服务器也会用该状态(417)告诉浏览器服务器不接收该附件或用100 (SC_CONTINUE)状态告诉客户端可以继续发送附件。该状态是新加入 HTTP 1.1的。
500 (Internal Server Error/内部服务器错误)
500 (SC_INTERNAL_SERVER_ERROR) 是常用的“服务器错误”状态。该状态经常由CGI程序引起也可能(但愿不会如此!)由无法正常运行的或返回头信息格式不正确的servlet引起。
501 (Not Implemented/未实现)
501 (SC_NOT_IMPLEMENTED)状态告诉客户端服务器不支持请求中要求的功能。例如,客户端执行了如PUT这样的服务器并不支持的命令。
502 (Bad Gateway/错误的网关)
502 (SC_BAD_GATEWAY)被用于充当代理或网关的服务器;该状态指出接收服务器接收到远端服务器的错误响应。
503 (Service Unavailable/服务无法获得)
状态码503 (SC_SERVICE_UNAVAILABLE)表示服务器由于在维护或已经超载而无法响应。例如,如果某些线程或数据库连接池已经没有空闲则servlet会返回这个头信息。服务器可提供一个Retry-After头信息告诉客户端什么时候可以在试一次。
504 (Gateway Timeout/网关超时)
该状态也用于充当代理或网关的服务器;它指出接收服务器没有从远端服务器得到及时的响应。该状态是新加入 HTTP 1.1的。
505 (HTTP Version Not Supported/不支持的 HTTP 版本)
505 (SC_HTTP_VERSION_NOT_SUPPORTED)状态码是说服务器并不支持在请求中所标明 HTTP 版本。该状态是新加入 HTTP 1.1的。
- 浏览: 1871189 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wangyudong:
Wisdom RESTClient工具地址更新了哦https: ...
前端模拟POST发送数据-Chrome下的REST Client(接口测试利器) -
wangyudong:
很多REST Client是不支持自动化测试RESTful A ...
前端模拟POST发送数据-Chrome下的REST Client(接口测试利器) -
higkoo:
一个非常棒的系统,要是能支持LDAP等开源认证就完美了。
Cynthia 是个问题管理/BUG管理/任务管理/项目管理系统。 -
寻光之旅:
标签库使用有啥好处呢?
thinkphp 使用标签库的步骤 -
lgdjy123:
Android:TextView属性大全
发表评论
-
Lumen写事件
2018-02-10 10:46 7681.在事件里面定义事件 <?php /** * ... -
PHP设计模式之状态机模式-实现业务流控制
2018-01-28 11:16 1777应用场景:在我们日常开发中经常会遇到各种状态的切换,例如电 ... -
装wampserver时显示计算机丢失MSVCR110.dll
2017-03-07 10:15 1176http://www.microsoft.com/zh-CN ... -
phpdocument的使用
2016-10-25 16:24 593官网: https://www.phpdoc.org/ ... -
微信调试方法
2016-05-24 09:25 7701. 在本地搭建类似LAMP的环境(或者WAMP)都行,目的 ... -
创建自己的composer包
2015-12-10 17:01 975创建一个composer/packagist包 在g ... -
微信nickname乱码及mysql编码格式设置(utf8mb4)
2015-12-08 12:24 1713将数据库的编码设置为utf8mb4_general_ci ... -
docker php 配置
2015-10-28 18:10 1102FROM php:5.6-fpm MAINTAINER S ... -
四种数据存储结构---顺序存储 链接存储 索引存储 散列存储
2015-08-15 21:54 1508存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储。 ... -
分享PHP代码检查经验
2015-08-09 23:03 1595问: 团队十多人开发, 如何保证代码规范统一? http ... -
php过滤只匹配中英文字符串
2015-08-04 15:26 1892<?php $str = "php $ ... -
移除emoji内容
2015-08-04 14:52 1230public static function removeE ... -
php 敏感词过滤高级版
2015-08-04 10:20 1479前面介绍过一个过滤了 ... -
php过滤广告内容(兼职,QQ号,淘宝兼职,网址)
2015-08-04 10:17 1180如果你网站有评论那么你肯定会发现你网站经常会被一人注入广告了 ... -
写第一个PHP扩展, 实现计算数组的个数
2015-07-20 19:09 1337需求: 写第一个PHP扩展, 里面包含一个函数叫 maxw ... -
PHP常用设计模式单例, 工厂, 观察者, 责任链, 装饰, 策略,适配,桥接模式
2015-07-15 11:08 1638// 多态, 在JAVA中是这样用的, 其实在PHP当中可 ... -
php命令行界面
2015-07-16 17:03 958常用选项 php -v php -i ... -
使用phpdocument
2015-07-14 17:05 868pear install phpdoc phpDocumen ... -
将session存储到数据库中
2015-07-14 15:33 813CREATE TABLE sessions ( id ... -
正则表达式向前查找向后查找,环绕或零宽断言
2015-07-14 12:40 2395向前查找和向后查找 1. 向前查找:根据要匹配的字符序列后 ...
相关推荐
### HTTP状态码大全详解 HTTP协议作为Web应用的基础通信协议之一,在互联网中扮演着至关重要的角色。它定义了一系列的状态码来表示服务器响应客户端请求的状态。本文将详细介绍HTTP状态码的各种类型及其含义,帮助...
### HTTP状态码详解 HTTP协议是互联网上应用最广泛的协议之一,它定义了客户端与服务器之间的通信规则。在HTTP通信过程中,服务器会返回一个状态码来告知客户端请求的状态。本篇将详细介绍各种HTTP状态码的意义及其...
HTTP状态码大全.jpg
最全的HTTP状态码大全!最全的HTTP状态码大全!最全的HTTP状态码大全!
HTTP(超文本传输协议)状态码是服务器向客户端反馈请求处理结果的一种方式。HTTP 1.1 规范定义了五类状态码,每类都表示不同的含义。以下是这些状态码的详细解释: 100-199:信息性状态码 这类状态码用于告知...
HTTP状态码是网络开发者在构建和维护Web应用时必须熟知的重要元素。它们是服务器与客户端之间通信的关键,用于指示请求是否成功以及发生何种问题。HTTP状态码由三位数字组成,分为五类,每类代表不同的含义。 1xx...
#### 一、信息性状态码(1xx) ...综上所述,HTTP状态码对于理解客户端与服务器之间的交互至关重要。通过正确识别和解释这些状态码,开发者和网络管理员可以有效地诊断问题、优化应用程序性能并提升用户体验。
### 服务器返回状态码详解 #### 一、概述 ...以上是HTTP状态码的基本解释及应用场景。理解这些状态码对于开发人员、运维人员以及SEO专家来说都非常重要,能够帮助他们更好地调试应用、优化性能并提升用户体验。
服务器返回状态码是HTTP协议中用于表示客户端请求结果的重要组成部分。这些状态码是三位数字,按照三位数字的分类,大致可以分为五类:1xx(信息响应),2xx(成功),3xx(重定向),4xx(客户端错误),5xx...
- **304 Not Modified**:如果请求包含一个有效的缓存,并且该缓存未过期,则服务器将返回此状态码,表明资源未更改,客户端可以继续使用其缓存的版本。 - **305 Use Proxy**:请求必须通过由Location字段指定的代理...
此外,文章提到了一些在线工具,如HTTP状态码大全和代码格式化美化工具,这些工具对于开发者调试和优化代码非常有帮助。在编写和维护PHP代码时,正确地格式化和美化代码可以提高代码的可读性和可维护性。 总之,...
关于HTTP请求头信息,你可以使用在线工具来查看和分析,例如文中提到的“HTTP状态码大全”工具,可以帮助你更好地理解和处理HTTP响应。此外,对于PHP代码的格式化和美化,也有相应的在线工具可以使用,如“PHP代码...
这个状态码最初被称为“Moved Temporarily”,但现在它实际上是 HTTP/1.1 中的“Found”状态码。 - **303 See Other**:这个状态码意味着请求成功,但响应并不包含数据,而是提供了一个新的 URI,客户端应该通过 GET...
1. 状态码大全:列出所有可能的HTTP状态码及其含义,方便开发者查询。 2. 实例解析:通过实际的HTTP响应示例,解释不同状态码的产生场景和应对策略。 3. 开发者工具:提供在线工具,帮助开发者检查和测试HTTP状态码...
### HTTP状态码详解 HTTP(Hypertext Transfer Protocol)是互联网上应用最为广泛的一种网络协议。它是一种详细规定了浏览器和万维网服务器之间互相通信的规则。HTTP状态码是由三位数字组成的标识符,用于指示...
在实际应用过程中,由于各种原因可能会出现不同类型的错误,这些错误通常通过特定的HTTP状态码进行标识。下面将对常见的HTTP错误代码进行全面解析。 #### 一、HTTP 400系列错误:客户端错误 - **400 Bad Request...
### HTTP返回码大全(中英解释) HTTP返回码在Web开发和网络通信中扮演着重要的角色,它们用于指示客户端与服务器之间交互的状态。下面将详细介绍HTTP返回码的分类及其含义,帮助开发者更好地理解和处理网络请求。 ...