Chinaunix首页 | 论坛 | 博客
  • 博客访问: 283810
  • 博文数量: 41
  • 博客积分: 2630
  • 博客等级: 少校
  • 技术积分: 702
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-30 15:56
文章分类

全部博文(41)

文章存档

2012年(2)

2011年(2)

2010年(3)

2009年(26)

2008年(8)

我的朋友

分类: 系统运维

2009-04-22 22:54:26

超文本传输协议(http)是Web的核心,它是一个基于请求与响应模式的、无状态的、应用层的协议,使用TCP作为底层传输协议。当前使用的版本有HTTP/1.0和HTTP/1.1。
HTTP1.1和HTTP1.0的主要分别:
在同一个tcp的连接中可以传送多个HTTP请求和响应;
多个请求和响应可以重叠,多个请求和响应可以同时进行;
更加多的请求头和响应头。
 
 
http请求:请求行+报头+请求正文
访问202.114.0.248()时的抓包的请求部分:
GET //f/WWWlogin/1239673058/wzxadds.jpg HTTP/1.1
Accept: */*
Accept-Language: zh-CN
Referer:

x-flash-version: 10,0,12,36
Cache-Control: no-transform
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR
2.0.50727)
Host: 202.114.0.248
Connection: Keep-Alive
 
请求行
Method  Request-URI  HTTP-Version  CRLF(回车换行符)

其中最常用方法有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
阅读(1880) | 评论(0) | 转发(0) |
0

上一篇:Struct memory layout

下一篇:VIM技巧积累

给主人留下些什么吧!~~