/*******************************
GET /index.html HTTP/1.1
Host: localhost:8088
connection: Keep-Alive
******************************/
3、request
header
Host, 请求头,标名请求主机器名,可为IP也可为域名,http1.1后强制使用,用此请求信息,可在服务端做WEB虚拟机,实现一机多WEB服务
Content-Length,请求、响应体的数据字节大小
Accept-Encoding,请求头,可接受的文本压缩算法,如: gzip, deflate
Accept-Language,请求头,支持语言,客户端浏览器的设置,如:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
User-Agent,请求头,浏览器信息,如:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:12.0) Gecko/20100101 Firefox/12.0,
细心会注册到IE也会用Mozilla,这是一个历史问题,早期WEB服务器貌似有问题,只支持Mozilla,微软IE做为后起之秀只能伪装成Mozilla
Cookie,请求头,服务器或客户端在上次设置的COOKIE,包括作用域名(.360buy.com),过期时间,键与值。大部分WEB服务器都会在第一次访问时在响应头上加Set-Cookie,如:BAIDUID=49415814CDBBB4CE65EC50EE4BB65E9A:FG=1; expires=Wed, 07-Nov-42 07:03:34 GMT; path=/; domain=.baidu.com
Referer,从一个连接打开一个新页面,新页面的请求一般会加此信息,标名是从哪里跳过来的,所有的页面的打开历史链就可被挖掘出来,有利于分析用户行为与CPS分成
4、reponse
header
Content-Type, 响应的数据类型:text/html;charset=gbk
Content-Length,响应的数据体大小
Content-Encoding, 如果为文本、HTML信息,则使用的编码方式
Date, 当前服务器日期
Server, 服务器名
Set-Cookie,第一次访问或服务设置COOKIE时,响应头里会有此信息,如,BAIDUID=49415814CDBBB4CE65EC50EE4BB65E9A:FG=1;
expires=Wed, 07-Nov-42 07:03:34 GMT; path=/; domain=.baidu.com
5、
Cache-Control , Expires控制缓存的两个响应头,如果都出现在响应头里,按Cache-Controler计算
Cache-Control,为响应头信息,取值为:
Public,当前系统任何登录的用户都可使用
Private,当前系统登录的此用户进行缓存
no-cache,不做缓存
max-age,缓存指定秒数,如Cache-control: max-age=5,表示当访问此网页后的5秒内再次访问不会去服务器
Expires,为响应头,Http1.1以上版本,与Max-Age一样,用来控制缓存
6, Last-Modified,
If-Modified-Since
Last-Modified, 为响应头,标名本资料上一次的修改时间
If-Modified-Since,为请求头,把上一次请求的Last-Modified日期信息为值进行请求,如果服务器判断Last-Modified时间与服务器一致则直接返回304,浏览器使用本地缓存进行显示。一般用来节省带宽,加速请求与显示。
7、ETag
+ If-Match同样是缓存策略,做为以上的补充
ETag,为响应头,在 http1.1中规定为一个字串,具体格式未定义,用来校验客户端缓存
If-Match,为请求头信息,把上一次请求响应的Etag带上进行请求,服务端的处理方法比较灵活,做为Cache-Control,Expires,Last-
Modified的补充,可不以时间为参考的缓存策略。
Apache默认对html的Etag取值为INode+Mtime+Size
如:Etag”2e681a-6-5d044840″1
用途:
-
a,仅仅改变的修改时间,但内容未做修改
-
b,修改非常频繁,一秒内修改千次,但Cache-Control与Last-Modified,只能控制在秒级,这是对控制力度的进一步提升
-
c,某些服务器不能精确的得到文件的最后修改时间,个例,我们使用的服务器都已支持,所以所用不多。
8、Connection
Keep-Alive
HTTP协议采用TCP协议,每次页面资源请求都被规定为一次连接,而每次连接的TCP三次握手关闭时的四次通信与端口滞留等待防止数据包未传送,
而每个TCP都是一个打开文件IO句柄数,Unix/Linux又对这个做了严格的限制。
一个网页,大量资源文件(html\css\javascript\image)需要加载量时需要大数据量的TCP连接,为了减少socket连接数提供KeepAlive,使一个tcp连接可重复使用。
事实也证明用Keep-Alive速度也更快(但移动客户端接口开发会关掉此属性)。
9、Range:
10-100
取信息的一部分,断点下载时常用
10、返回状态码
200,返回成功
501,服务器内容错误
304,使用本地缓firebug
404,资源没有找到
11,ios开发之http协议
在 iPhone 开发中,必然会用到 HTTP 通信协议。 所以有必要对 HTTP协议有一个清晰的认识。
HTTP 协议主要有以下几个特点:
(1)HTTP 协议的工作方式是典型的C/S 结构
所谓 C/S 结构,就是为每个应用 独立开发一个客户端软件。 与此对应的是B/S结构, B/S 结构是采用浏览器作为通用的软件客户端。 所以从这个意义上来讲, B/S结构仍然是C/S 结构的一种。
(2)数据传输少
client 向server端 通过HTTP 协议请求服务时,只需传送请求方法和所请求资源的路径(URL),因此,需要传输的数据非常的少。
(3)可以通过HTTP 协议传输任意类型的数据对象
一般来说,HTTP协议是用来传输HTTP脚本的, 但实际上,HTTP协议可以用来传输任何形式的数据对象,不论是文本文件还是二进制文件,甚至是流文件都可以通过HTTP协议进行传输。
(4) HTTP协议是面向一次连接的网络协议
所谓一次连接是指限制每次连接只处理一个请求。当server 处理完client发来的HTTP请求,并反馈给client端一个HTTP回复后, 即断开连接。 如果client需要再次发送请求,则需要重新建立连接。 对HTTP协议来说,连接一次,server端只对client 端服务一次。
(5)HTTP协议 是无状态协议
所谓无状态,是指协议对于事物处理没有处理能力,即HTTP协议的两次连接之间没有任何关系。这就意味着,如果client的后续请求需要用到上一次连接时的信息,那么或者要求client 端重传上次的请求,或者client端保存上次连接请求时的记录。
在iPhone 开发 C/S 客户端软件时,我们需要对 HTTP协议 有一个全面的了解。 针对HTTP协议以上五种状态,需要设计适用的 C/S 交互协议和数据报文格式。 也会用到 数据缓存, Cache 技术、 Cookie 技术 等。