JSP - HTTP 状态码
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 | 服务器不支持“http 协议”版本。 |
设置 HTTP 状态码的方法:
有以下方法可以用来设置 servlet 程序的 HTTP 状态码。有了 HttpServletResponse 对象,这些方法都是可用的。
S.N. | 方法 &描述 |
---|---|
1 |
public void setStatus ( int statusCode ) 此方法设置一个任意的状态码。setStatus 方法接受一个 int(状态码)作为参数。如果你的响应包含一个特殊的状态码和文档,在实际中用 PrintWriter 返回任何内容之前一定要调用 setStatus。 |
2 |
public void sendRedirect(String url) 该方法生成一个 302 响应以及一个位置标题给出新文档的 URL。 |
3 |
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 将显示如下所示的结果:
HTTP Status 407 - Need authentication!!!
type Status report
message Need authentication!!!
description The client must first authenticate itself with the proxy (Need authentication!!!).
Apache Tomcat/5.5.29
想要使用 HTTP 状态代码变得更加舒适,尝试设置不同的状态代码和描述。