以下内容引用自http://wiki.jikexueyuan.com/project/jsp/http-status-codes.html:
HTTP请求格式和HTTP响应消息的格式一样,都有以下结构:
- 一个初始状态行+CRLF(回车+换行,即新行)
- 零个或多个标题行+CRLF
- 一个空行,即一个CRLF
- 一个可选的消息体,像文件,查询数据或查询输出
例如,一个服务器响应标题看起来如下所示:
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
状态行包含HTTP版本(例子中的HTTP/1.1),状态码(例子中的200)和对应状态代码的短消息(例子中的OK)。
下面是HTTP状态代码和相关可能从Web服务器返回的消息的一个列表:
编码: | 消息: | 描述: |
---|---|---|
100 | Continue | 只有一部分的服务器请求已经收到,但只要没有被拒绝,客户端应该继续请求 |
101 | Switching Protocols | 服务器交换了协议。 |
200 | OK | 请求是OK |
201 | Created | 请求已经完成,新的资源被创建 |
202 | Accepted | 请求被接受处理,但是处理还没有完成。 |
203 | Non-authoritative Information | |
204 | No Content | |
205 | Reset Content | |
206 | Partial Content | |
300 | Multiple Choices | 一个链接列表。用户可以选择一个链接然后跳转到那个位置。最多可选择5个地址 |
301 | Moved Permanently | 请求页面已经被移到新的URL中 |
302 | Found | 请求页面暂时被移到新的URL中 |
303 | See Other | 请求页面可在不同的URL中找到 |
304 | Not Modified | |
305 | Use Proxy | |
306 | Unused | 该代码是在前一版本使用的。它已不再使用,但该代码保留下来了。 |
307 | Temporary Redirect | 请求页面被暂时移到新的URL中。 |
400 | Bad Request | 服务器没有理解请求。 |
401 | Unauthorized | 请求页面需要用户名和密码 |
402 | Payment Required | 不能使用这个代码 |
403 | Forbidden | 不允许访问请求页面 |
404 | Not Found | 服务器找不到请求页面。 |
405 | Method Not Allowed | 在请求中指定的方法不允许使用。 |
406 | Not Acceptable | 服务器只能生成一个不被客户端接收的响应。 |
407 | Proxy Authentication Required | 在这个请求得到服务之前,必须验证一个代理服务器。 |
408 | Request Timeout | 请求花费的时间比服务器准备等待的时间长。 |
409 | Conflict | 由于冲突请求不能实现。 |
410 | Gone | 请求页面不再可用。 |
411 | Length Required | "内容-长度" 没有被定义。没有它服务器不会接受请求。 |
412 | Precondition Failed | 服务器给出给定的请求评估的前提为假。 |
413 | Request Entity Too Large | 服务器不会接受请求,因为请求实体太大。 |
414 | Request-url Too Long | 服务器不会接受请求,因为URL太长。当把“POST”请求转换为带有很长的查询信息的“GET”请求时,这种情况就会发生 |
415 | Unsupported Media Type | 服务器不会接受请求因为媒体类型不支持。 |
417 | Expectation Failed | |
500 | Internal Server Error | 请求未完成。服务器遇到了意外情况。 |
501 | Not Implemented | 请求未能完成。服务器不支持所需的功能。 |
502 | Bad Gateway | 请求未能完成。服务器从上游服务器收到无效响应 |
503 | Service Unavailable | 请求未能完成。服务器暂时过载或瘫痪。 |
504 | Gateway Timeout | 网关超时。 |
505 | HTTP Version Not Supported | 服务器不支持“HHTP协议”版本。 |
设置HTTP状态码的方法:
有以下方法可以用来设置 servlet 程序的 HTTP 状态码。有了 HttpServletResponse 对象,这些方法都是可用的。
方法 | 描述 |
---|---|
public void setStatus ( int statusCode ) | 此方法设置一个任意的状态码。setStatus方法接受一个 int(状态码)作为参数。如果响应包含一个特殊的状态码和文档,在实际中用PrintWriter返回任何内容之前一定要调用setStatus。 |
public void sendRedirect(String url) | 该方法生成一个302响应以及一个位置标题给出新文档的URL。 |
public void sendError(int code, String message) | 这种方法发送一个状态码(通常是404)以及一个在HTML文档内自动格式化的短消息并发送到客户端。 |
HTTP 状态码实例:
下面的例子将发送407错误代码到客户端浏览器,浏览器将显示“需要验证! ! !”的消息。
<html>
<head>
<title>Setting HTTP Status Code</title>
</head>
<body>
<%
// Set error code and reason.
response.sendError(407, "Need authentication!!!" );
%>
</body>
</html>
现在调用上述代码,JSP将显示如下所示的结果:
测试工程:https://github.com/easonjim/5_java_example/tree/master/jspbasics/test6