关于http协议,相信一般的人都知道,相关的文章网上一抓一大把。但是对http协议的细节真的都清楚了吗?我自问了一下,很是惭愧,于是决定好好捋捋。
刨开表层看内在,首先装上httpwatch亲眼目睹一下http的真容:访问google看看
请求报头
GET http://www.google.com/ HTTP/1.1 Accept: application/x-shockwave-flash, image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */* Accept-Language: zh-cn User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) Accept-Encoding: gzip, deflate Proxy-Connection: Keep-Alive Host: www.google.com Cookie: PREF=ID=f3aa0c45021b6ab1:U=b049e7b9deea7680:FF=0:NW=1:TM=1286955376:LM=1286956336:S=mA1groKA... |
- GET http://www.google.com/ HTTP/1.1
指明http协议中信息提交的方式,最常用的有两种方式,第一种为GET,第二种为POST
- Accept: application/x-shockwave-flash, image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/vnd.ms-excel…
Accept请求报头域用于指定客户端接受哪些类型的信息,如:Accept:image/gif,表明客户端希望接受GIF图象格式的资源;Accept:text/html,表明客户端希望接受html文本。
- Accept-Language: zh-cn
指定Accept-Language指定返回的字符集,这里zh-cn表示是中文
- User-Agent
我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。
- Accept-Encoding
Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码。如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受
- Proxy-Connection
这里表示我是通过代理服务器访问的,嘿嘿,你懂的。Kepp-Alive表示使用socket长连接。
- Host
Host请求报头域主要用于指定被请求资源的Internet主机和端口号,此处使用缺省端口号80
- Cookie
表示我的cookie信息
响应报头与实体报头:
当服务器接收到这个请求后,根据这个请求的描述,返回相应的内容:
HTTP/1.1 200 OK Date: Wed, 26 Jan 2011 03:04:20 GMT Server: gws Expires: -1 Cache-Control: private, max-age=0 Content-Type: text/html; charset=UTF-8 Content-Encoding: gzip Content-Length: 5575 X-XSS-Protection: 1; mode=block X-Cache: MISS from google.com X-Cache-Lookup: MISS from google.com:86 Connection: close |
- HTTP/1.1 200 OK:指定http的协议和返回码,指定使用的是http/1.1协议,返回码是200 ok
- Server:包含服务器用来处理请求的软件信息。与User-Agent请求报头域是相对应的,GWS是google专用的web服务器.
- Expires:表示超时时间
- Cache-Control:表示使用的缓存机制;
Cache-Control: cache-directive
cache-directive可以为以下:
request时用到:
| "no-cache"
| "no-store"
| "max-age" "=" delta-seconds
| "max-stale" [ "=" delta-seconds ]
| "min-fresh" "=" delta-seconds
| "no-transform"
| "only-if-cached"
| "cache-extension"
response时用到:
| "public"
| "private" [ "=" <;"> field-name <"> ]
| "no-cache" [ "=" <;"> field-name <"> ]
| "no-store"
| "no-transform"
| "must-revalidate"
| "proxy-revalidate"
| "max-age" "=" delta-seconds
| "s-maxage" "=" delta-seconds
| "cache-extension"
部分说明:
根据是否可缓存分为
Public 指示响应可被任何缓存区缓存。
Private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的
部分响应消息,此响应消息对于其他用户的请求无效。
no-cache 指示请求或响应消息不能缓存(HTTP/1.0用Pragma的no-cache替换)
根据什么能被缓存
no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
根据缓存超时
max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale 指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以
接收超出超时期指定值之内的响应消息。
- Content-Encoding:表示采用的编码方式,这里是采用gzip压缩
- Content-Type: 用于指明发送给接收者的实体正文的媒体类型
- Content-Length:用于指明实体正文的长度,以字节方式存储的十进制数字来表示。
- X-Cache: 表示我的 http request 是由 proxy server 回的 ,MISS 表 proxy 無資料
以上只是http协议报头的一部分内容,未完待续…
分类: Web
标签: http协议
Web
摘要: 关于http协议,相信一般的人都知道,相关的文章网上一抓一大把。但是对http协议的细节真的都清楚了吗?我自问了一下,很是惭愧,于是决定好好捋捋。刨开表层看内在,首先装上httpwatch亲眼目睹一下http的真容:访问google看看请求报头GET http://www.google.com/ HTTP/1.1Accept: application/x-shockwave-flash, image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint阅读全文
摘要: 缓存(cache)和缓冲(buffer)的区别:缓存(cache):缓存的目的是把需要花费昂贵开销的计算结果保存起来,在以后需要的时候直接取出,避免重复的计算。缓冲(buffer):目的在于改善各部件之间因为速度不同而引发的问题。起到将快速设备与慢速设备平滑衔接的作用。页面缓存(Page Cache)页面缓存就是将动态计算的结果进行缓存,避免动态内容不必要的重复计算,主要是针对动态生成的html页面和动态图片或动态XML数据等;缓存持久化和搜索 如果缓存文件非常多,cache目录下会拥挤大量的文件,如果缓存的文件的读写频度比较高,对CPU的影响是非常大的;解决的方案: 1、使用支持目录hash阅读全文
摘要: 什么是带宽?误解:“数据在线路中的移动速度”、“数据的传输速度”我们所说的带宽是指数据的发送速度,比如百兆网卡,指网卡的最大发送速度是100Mbps,也就是说网卡在一秒钟最多可以发送100Mb的数据;相关的因素:数据发送装置将二进制信号传送到线路的能力,也称信号传输频率,以及另一端数据接收装置对二进制信号接收的能力,也包括线路对传输频率的支持程度;数据传输介质的并行度,等价于计算机系统总线宽度的概念;习惯与约定b:比特单位 bit;B:字节单位 Byte;1KB = 1024B;1kb = 1000b;M与K 的换算同上;什么是吞吐率?吞吐率(Throughput),是指web服务器单位时间内阅读全文