1.3.2 HTTP的请求
HTTP的请求方式共分为OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE和CONNECT八种(注意:这些方法均为大写),其中比较常用的为GET和POST。
(1)OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向Web服务器发送‘*’的请求来测试服务器的功能性。
(2)HEAD:向服务器所要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
(3)GET:向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如,在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。
(4)POST:向指定资源提交数据进行处理请求(比如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和(或)已有资源的修改。
(5)PUT:向指定资源位置上传其最新内容。
(6)DELETE:请求服务器删除Request-URL所标识的资源。
(7)TRACE:回显服务器收到的请求,主要用于测试或诊断。
(8)CONNECT:HTTP 1.1协议中预留给能够将连接改为管道方式的代理服务器。
HTTP的请求分为以下三部分。
①请求行。
②请求头。
③请求正文。
来看下图1-8,这是一个用Fidder4捕捉到访问http://www.3testing.com网站的请求内容。
图1-8 Fiddler 4 捕捉HTTP的请求信息
其中第一行,GET /HTTP/1.1为请求行,GET表示请求方法,包括前面所介绍的八种方法之一;/表示访问的是根目录;HTTP/1.1表示协议版本号为1.1。
后面的都是为请求头,关于请求头,具体介绍读者可以上RFC 2616官方网站查询,在这里不进行介绍了。
由于这个请求没有没有请求数据,所以没有请求正文。图1-9是一个带请求数据的POST请求的请求正文例子。
图1-9 Fiddler 4 捕捉HTTP的请求正文
1.3.3 HTTP的应答
HTTP的应答返回码包含服务器响应情况,见表1-1。
表1-1 HTTP返回码
消息 | 描述 |
---|---|
100 Continue | 客户应该和自己的请求继续。中间的应答被用于告知客户请求的初始部分已经收到并且还没有被服务器所拒绝 |
101 Switching Protocols | 服务器转换协议:服务器将遵从客户的请求转换到另外一种协议 |
200 OK | 请求成功(其后是对GET和POST请求的应答文档) |
201 Created | 请求被创建完成,同时新的资源被创建 |
202 Accepted | 提供处理的请求已被接受,但是处理未完成 |
203 Non-authoritative Information | 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝 |
204 No Content | 没有新文档。浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的 |
205 Reset Content | 没有新文档。但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容 |
206 Partial Content | 客户发送了一个带有Range头的GET请求,服务器完成了它 |
300 Multiple Choices | 多重选择。链接列表。用户可以选择某链接到达目的地。最多允许五个地址 |
301 Moved Permanently | 所请求的页面已经转移至新的URL |
302 Found | 所请求的页面已经临时转移至新的URL |
303 See Other | 所请求的页面可在别的URL下被找到 |
304 Not Modified | 未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用 |
305 Use Proxy | 客户请求的文档应该通过Location头所指明的代理服务器提取 |
306 Unused | 此代码被用于前一版本。目前已不再使用,但是代码依然被保留 |
307 Temporary Redirect | 被请求的页面已经临时移至新的URL |
400 Bad Request | 错误的请求 |
401 Unauthorized | 被请求的页面需要用户名和密码 |
401.1 | 登录失败 |
401.2 | 服务器配置导致登录失败 |
401.3 | 由于ACL对资源的限制而未获得授权 |
401.4 | 帅选授权失败 |
401.5 | ISAPI/CGI应用程序授权失败 |
401.7 | 访问被Web服务器上的URL授权策略拒绝。IIS 6.0专用代码 |
402 Payment Required | 尚无法使用 |
403 Forbidden | 被禁止请求页面的访问 |
403.1 | 被禁止执行访问 |
403.2 | 被禁止读访问 |
403.3 | 被禁止写访问 |
403.4 | 要求SSL |
403.5 | 要求SSL 128 |
403.6 | 被拒绝IP地址。 |
403.7 | 要求客户端证书 |
403.8 | 被拒绝站点访问 |
403.9 | 用户数过多 |
403.10 | 配置无效 |
403.11 | 密码更改 |
403.12 | 映射表访问被拒绝 |
403.13 | 客户端证书被吊销 |
403.14 | 拒绝目录列表 |
403.15 | 超出客户端访问许可 |
403.16 | 客户端证书不受信任或无效 |
403.17 | 客户端证书已过期或尚未生效 |
403.18 | 在当前的应用程序池中不能执行所请求的URL。IIS 6.0专用代码 |
403.19 | 不能为这个应用程序池中的客户端执行CGI。IIS 6.0专用代码 |
403.20 | PASSPORT登录失败。IIS 6.0专用代码 |
404 Not Found | 服务器无法找到被请求的页面 |
404.0 | 没有找到文件或目录 |
404.1 | 无法在所请求的端口上访问Web站点 |
404.2 | Web服务扩展锁定策略阻止本请求 |
404.3 | MIME 映射策略阻止本请求 |
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 | 服务器评估请求中的前提条件为失败 |
413 Request Entity Too Large | 由于所请求的实体太大,服务器不会接受请求 |
414 Request-url Too Long | 由于URL太长,服务器不会接受请求。当POST的请求被转换为GET请求的时候会触发这个情况 |
415 Unsupported Media Type | 由于媒介类型不被支持,服务器不会接受请求 |
416 Requested Range Not Satisfiable | 服务器不能满足客户在请求中指定的Range头 |
417 Expectation Failed | 执行失败 |
423 | 锁定的错误 |
500 Internal Server Error | 请求未完成。服务器遇到不可预知的情况 |
500.12 | 应用程序正忙于在Web服务器上重新启动 |
500.13 | Web服务器太忙 |
500.15 | 不允许直接请求Global.asa |
500.16 | UNC授权凭据不正确。IIS 6.0专用代码 |
500.18 | URL授权存储不能打开。IIS 6.0专用代码 |
500.100 | 内部ASP错误 |
501 Not Implemented | 请求未完成。服务器不支持所请求的功能 |
502 Bad Gateway | 请求未完成。服务器从上游服务器收到一个无效的响应 |
502.1 | CGI应用程序超时 |
502.2 | CGI应用程序出错 |
503 Service Unavailable | 请求未完成。服务器临时过载或宕机 |
504 Gateway Timeout | 网关超时 |
505 HTTP Version Not Supported | 服务器不支持请求中指明的HTTP协议版本 |
在这里共分为以下五类。
(1)1XX:指示信息---表示接收到请求,继续进程。
(2)2XX:成功-表示请求已被成功接收、理解和接受。
(3)3XX:重定向---要完成请求必须进行更进一步的操作。
(4)4XX:客户端错误---请求有语法错误或者无法实现。
(5)5XX:服务器错误---服务器未能实现合法请求。
HTTP的应答与请求非常相似,也分为以下三部分。
①应答行。
②应答头。
③ 应答正文。
看下图1-10,这是一个用Fidder4捕捉到访问http://www.3testing.com网站的应答内容。
图1-10 Fiddler 4捕捉HTTP应答信息
其中,HTTP/1.1 200 OK为应答行,如上节一样HTTP/1.1表示HTTP版本编号;200表示返回码,包括前面提到五类中的任意一个;OK表示返回短语。
下面的都为应答头,大家也可以上RFC 2616官方网站查询。
返回正文就是一般所看到的HTML代码。