其中最常用方法有GET, POST, HEAD
GET 请求获取Request-URI所标识的资源,浏览器用于向服务器获取资源;
POST 在Request-URI所标识的资源后附加新的数据,常用于提交表单;
HEAD 请求获取由Request-URI所标识的资源的响应消息报头
其它方法有PUT, DELETE, TRACE, OPTIONS, CONNECT
PUT 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE 请求服务器删除Request-URI所标识的资源
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
CONNECT 保留
【http响应:状态行+报头+响应正文】
抓包的响应部分:
HTTP/1.1 200 OK Date: Wed, 22 Apr 2009 12:24:17 GMT Server: Apache/1.3.27 (Unix) mod_utf8/1.2 Last-Modified: Tue, 14 Apr 2009 01:24:46 GMT ETag: "2b4338-d294-49e3e5de" Accept-Ranges: bytes Content-Length: 53908 Connection: close Content-Type: image/jpeg |
状态行
HTTP-Version Status-Code Reason-Phrase CRLF
Status-Code表示服务器发回的响应状态代码,Reason-Phrase表示状态代码的文本描述。
状态码有三位数字组成,且第一位表示响应类别,共五种:
1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求
【报头】
http有四种消息报头:普通报头(general-header),请求报头(request-header),响应报头(response-header),实体报头(entity-header)
普通报头
有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只能用于正在传输的消息。
general-header = Cache-Control | Connection | Date | Pragma | Trailer | Transfer-Encoding | Upgrade | Via | Warning
Cache-Control是一种单向独立的缓存指令,分为两种:
cache-request-directive = no-cache | no-store | max-age | max-stale | min-fresh | no-transform | only-if-cached | cache-extension
cache-response-directive = public | private | no-cache | no-store | "no-transform | must-revalidate | proxy-revalidate | max-age | s-maxage | cache-extension
Connection为发送方指定连接的选项,且禁止代理在后面的连接中通讯。HTTP/1.1定义"close"连
接选项表示连接在完成响应后关闭,因为不支持“永久连接”,必须在每个“请求-响应”中包含“Connection:close”。
请求报头
请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
request-header = Accept | Accept-Charset | Accept-Encoding | Accept-Language | Authorization | Expect | From | Host | If-Match | If-Modified-Since | If-None-Match | If-Range | If-Unmodified-Since | Max-Forwards | Proxy-Authorization | Range | Referer | TE | User-Agent
Accept请求报头域用于指定客户端接受哪些类型的信息,如Accept:image/gif表示结构gif图像。Accept-Charset,Accept-Encoding,Accept-Language类似。
Host是请求报文必须的,格式为“Host:主机:端口”
User-Agent包含用户代理信息,用于统计,协议侵害跟踪和用户代理的自动识别。该域可将客户端将它的操作系统、浏览器和其它属性告诉服务器。
响应报头
响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。
response-header = Accept-Ranges | Age | ETag | Location | Proxy-Authenticate | Retry-After | Server | Vary | WWW-Authenticate
Accept-Ranges允许服务器指出它对某个资源的请求的可接受范围。
Location用于重定向接受者到一个新的位置,该域常用在更换域名的时候,如
Location:
Server指示服务器使用的软件,如Server: CERN/3.0 libwww/2.17
WWW-Authenticate:必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。
实体报头
请求和响应消息可以传送一个实体,一个实体由实体报头域和实体正文(可选)组成。
entity-header = Allow | Content-Encoding | Content-Language | Content-Length | Content-Location | Content-MD5 | Content-Range | Content-Type | Expires | Last-Modified
Allow列出由Request-URI标示的资源的支持的方法集,它必须被包含在405(方法不允许)的响应中,如Allow:GET HEAD PUT
Content-Encoding用作对媒体类型的修饰符,指出应用到实体正文的附加内容的编码。
Content-Type用于指明发送给接收方的实体正文的媒体类型。在使用HEAD方法或者指出GET请求要发送媒体的类型的情况下包含Content-Type域。
Expires指示响应过期的日期和时间。
Last-Modified用于指示资源的最后修改日期和时间。
p.s. 还有扩展头,如Cookie, Set-Cookie...
详细参考见RFC2616