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).
以下是可能从Web服务器返回的HTTP状态代码和相关消息的列表 :
代码 | 消息 | 描述 |
---|---|---|
100 | 继续 | 服务器只接收到部分请求,但只要它没有被拒绝,客户端就应该继续请求 |
101 | 切换协议 | 服务器切换协议. |
200 | 确定 | 请求正常 |
201 | 创建 | 请求完成,并创建新资源 |
202 | 接受 | 请求被接受处理,但处理不完整. |
203 | 非权威信息 | |
204 | 无内容 | |
205 | 重置内容 | |
206 | 部分内容 | |
300 | Multiple Choices | 链接列表.用户可以选择链接并转到该位置.最多五个地址 |
301 | 永久移动 | 请求的页面已移至新网址 |
302 | 找到 | 请求的页面暂时移动到新网址 |
303 | 参见其他 | 请求的页面可以在不同的网址下找到 |
304 | 未修改 | |
305 | 使用代理 | |
306 | 未使用 | 此代码用于以前的版本.它已不再使用,但代码保留 |
307 | 临时重定向 | 请求的页面暂时移动到新的URL. |
400 | 错误请求 | 服务器不明白请求 |
401 | 未经授权 | 请求的页面需要用户名和密码 |
402 | 需要付款 | 您无法使用此代码 |
403 | Forbidden | 禁止访问所请求的page |
404 | Not Found | 服务器找不到请求的页面. |
405 | 方法不允许 | 不允许在请求中指定的方法. |
406 | 不可接受 | 服务器只能生成客户端不接受的响应. |
407 | 需要代理身份验证 | 在提供此请求之前,您必须使用代理服务器进行身份验证. |
408 | 请求超时 | 请求花费的时间比服务器准备等待的时间长. |
409 | 冲突 | 请求无法是comp因冲突而被租借. |
410 | Gone | 请求的页面不再可用. |
411 | 长度必需 | 未定义"Content-Length".没有它,服务器将不接受请求. |
412 | 前提条件失败 | 服务器评估为false的请求中给出的前提条件. |
413 | 请求实体太大 | 服务器将不接受请求,因为请求实体太大. |
414 | Request-url太长 | 服务器不接受请求,因为网址太长.将"post"请求转换为带有长查询信息的"get"请求时发生. |
415 | 不支持的媒体类型 | 服务器不接受请求,因为不支持媒体类型. |
417 | 预期失败 | |
500 | 内部服务器错误 | 请求未完成.服务器遇到意外情况. |
501 | 未实现 | 请求未完成.服务器不支持所需的功能. |
502 | Bad Gateway | 请求未完成.服务器从上游服务器收到无效响应. |
503 | 服务不可用 | 请求未完成.服务器暂时超载或停机. |
504 | 网关超时 | 网关已超时. |
505 | 不支持HTTP版本 | 服务器不支持"http协议"版本. |
以下方法可以用于在servlet程序中设置HTTP状态代码.这些方法可用于 HttpServletResponse 对象.
Sr.No. | 方法&描述 |
---|---|
1 | public void setStatus(int statusCode) 此方法设置任意状态代码. setStatus方法将int(状态代码)作为参数.如果您的响应包含特殊状态代码和文档,请务必在使用 PrintWriter 实际返回任何内容之前调用setStatus. |
2 | public void sendRedirect(String url) 此方法生成302响应以及 Location 标题给出新文档的URL |
3 | public void sendError(int code,String message) 此方法发送状态代码(通常为404)以及在HTML文档中自动格式化并发送到客户端的短消息. |
以下是向客户端浏览器发送407错误代码的示例,浏览器会显示"需要身份验证!! !"消息.
// Import required java libraries import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; // Extend HttpServlet class public class showError extends HttpServlet { // Method to handle GET method request. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Set error code and reason. response.sendError(407, "Need authentication!!!" ); } // Method to handle POST method request. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
现在调用上面的servlet会显示以下结果 :
HTTP Status 407 - Need authentication!!!type Status reportmessageNeed authentication!!!descriptionThe client must first authenticate itself with the proxy (Need authentication!!!).Apache Tomcat/5.5.29