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状态码和与之关联的消息:
状态码 |
消息 |
描述 |
---|---|---|
100 |
Continue |
只有一部分请求被服务器接收,但只要没被服务器拒绝,客户端就会延续这个请求 |
101 |
Switching Protocols |
服务器交换机协议 |
200 |
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"Content-Length |
"没有被定义,服务器拒绝接受请求 |
412 |
Precondition Failed |
请求的前提条件被服务器评估为false |
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状态码的方法
下表列出了HttpServletResponse 类中用来设置状态码的方法:
S.N. |
方法 & 描述 |
---|---|
1 |
public void setStatus ( int statusCode ) 此方法可以设置任意的状态码。如果您的响应包含一个特殊的状态码和一个文档,请确保在用PrintWriter返回任何内容前调用setStatus方法 |
2 |
public void sendRedirect(String url) 此方法产生302响应,同时产生一个 Location 头告诉URL 一个新的文档 |
3 |
public void sendError(int code, String message) 此方法将一个状态码(通常为 404)和一个短消息,自动插入HTML文档中并发回给客户端 |
接下来的例子将会发送407错误码给浏览器,然后浏览器将会告诉您"Need authentication!!!"。
<html>
<head>
<title>Setting HTTP Status Code</title>
</head>
<body>
<% // 设置错误代码,并说明原因 response.sendError(407, "Need authentication!!!" ); %>
</body>
</html>
访问以上JSP页面,将会得到以下结果:
您也可以试试使用其他的状态码,看会不会得到什么意想不到结果。