一、HTTP协议小结
当浏览器和服务器进行交互的过程中,双方都必须遵循一个规则,这个规则就是HTTP协议。当用户有请求需求时,需要先给服务器发送请求,然后服务器接收客户端的请求并反馈响应,接着浏览器开始解析HTML中的代码并对页面进行渲染,最终呈现给用户,这就是浏览器的一个解析过程,其中最重要的便是请求与相应的环节。
通过访问了一个网页获取的请求头和响应头为例,以下将对其一一进行说明
————————————————————————————
下面是浏览器代表用户发出的请求
GET /xianjian6x/css/style.css HTTP/1.1
此处为请求头,格式为:传输方式为get,资源路径为其服务器下/xianjian6x/css/style.css,采用HTTP1.1的协议版本
Accept: text/css
此处表示服务器可以接受的类型为txt/css
Referer: http://pal6.changyou.com/home/
此处表示用户从http://pal6.changyou.com/home/这个页面发出访问请求
Accept-Language: zh-CN
此处表示浏览器所需要服务器给响应的语言是简体中文
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
此处表示用户的浏览器类型
Accept-Encoding: gzip, deflate
此处表示浏览器能进行的解码方式是gzip
Host: cyldimages.changyou.com
此处表示初始化主机端口
If-Modified-Since: Wed, 08 Jul 2015 07:21:37 GMT
此处用此请求头来对比服务器的文件,若时间一致,从缓冲中直接读取数据
If-None-Match: "12d8010-150a-51a57fd422240"
If-None-Match需要和ETag 配合使用,首先If-None-Match和之前客户端给ETag(和缓冲相关的一个头)分配的编号进行匹配,如果一致,则表示缓冲没有改动,返回304的状态码。若不一致,则表示有改动,此时需重新获取请求的资源,并重新给ETag分配编号
DNT: 1
此请求头表示禁止追踪的意思。
Connection: Keep-Alive
此处表示服务器需要持续连接
Cookie: 客户端通过这个头,可以带点数据给服务器
———————————————————————
另外补充几个浏览该网页时未用到的请求头
Accept-Charset:
此请求头示浏览器支持的字符集类型
Content-Type:
此请求头表示内容类型
Content-Length:
此请求头表示请求消息正文的长度
Date:Date: Mon, 22 Aug 2011 01:55:39 GMT
此请求头表示请求时间GMT(格林威治时间)
——————————————————————————————————
服务器反馈的响应如下
HTTP/1.0 304 Not Modified
此处表示响应头,格式为:HTTP协议为1.0,状态码为304,处理方式是Not Modified表示没有更改,可以直接从缓存中调用
Date: Sat, 12 Sep 2015 11:38:29 GMT
此处表示请求时间
Content-Type: text/css
此处表示服务器相应的内容类型是text/css的
Last-Modified: Wed, 08 Jul 2015 07:21:37 GMT
此处表示上一次修改的时间
ETag: "12d8010-150a-51a57fd422240"
此处表示给予缓冲一个唯一的编号。
X-Via: 1.0 huzhou85:8106 (Cdn Cache Server V2.0), 1.0 jy151:1 (Cdn Cache Server V2.0)
Connection: keep-alive
此处表示服务器一直处于持续连接状态
————————————————————————————
补充一些浏览该网页时未用到的响应头
Location:
此响应头指定的新的资源访问地址,一般和302配合使用
Server:
此响应头示服务器的类型
Content-Encoding:
此响应表示服务器发送的数据采用的编码类型
Content-Length:
此响应表示服务器发回的正文的长度
Content-Language:
此响应表示服务发送的文本的语言
Refresh:
此响应头表示服务器指示浏览器刷新频率。单位是秒
Content-Disposition:
此响应头表示服务器告诉浏览器这个网页以下载的方式打开
Set-Cookie:
此响应头服务器端发送的Cookie
Expires: 0 \ Cache-Control: no-cache \ Pragma: no-cache
这三个响应头组合使用,可以让浏览器不要缓存数据