标签:
1、"Accept"字段:
HTTP Header 包含了一系列重要的信息
例如状态码,响应类型,文件编码等...
按字母顺序排列
第一个HTTP Header 就是Accept
Accept 只出现在Request中
其含义是: 浏览器端可以接受的媒体类型
例如 Accept: text/html 代表浏览器可以接受服务器回发的类型为 text/html 也就是我们常说的html文档
如果服务器无法返回text/html类型的数据,服务器应该返回一个406错误(non acceptable)
通配符 * 代表任意类型
例如 Accept: */* 代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)
又例如 Accept: text/* 代表所有的text的子类都是可以被接受的
Accept可以支持用,分隔的多个类型
例如 Accept: audio/*; q=0.2, audio/basic 的大意是, 浏览器比较喜欢audio/basic的媒体类型, 不过如果没有这个类型的话 其他的audio类型也可以
在这里出现了一个q=0.2 , 这是一个代表关联程度的值,默认值是一,按照从大到小排列
例如 Accept: text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c
可接受的类型优先级如下
1) text/html text/x-c
2)text/x-dvi
3)text/plain
q是一个0-1之间的数值, q的默认值是1, q=0代表不可接受(non acceptable)
原文地址(英文): http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
2、"Accept-Charset"字段:
Accept-Charset 代表了浏览器支持的字符集
例如: Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
代表这个浏览器比较喜欢以下的字符集
1) 最喜欢 ISO-8859-1
2) 然后是 utf-8
3) 最后是 * (所有字符串,不限制)
对应的response http header 字段是 Content-Type
如果浏览器请求的字符集是服务器无法响应的, 那么服务器应该返回406错误
请注意这个只是一个标识位,服务器还要在程序上保证声明的字符集类型 和HTTP 正文中所使用的字符集必须是一致的
例如在HTTP header中声明 Accept-Charset: utf-8
可是正文用的是GB2312编码.....浏览器就乱码了 - -#
3、"Accept-Encoding" 字段:
HTTP Header中Accept-Encoding 是浏览器发给服务器,声明浏览器支持的编码类型的,Python的HTTPConnection默认是identitiy类型.
常见的有
Accept-Encoding: compress, gzip //支持compress 和gzip类型
Accept-Encoding: //默认是identity
Accept-Encoding: * //支持所有类型
Accept-Encoding: compress;q=0.5, gzip;q=1.0 //按顺序支持 gzip , compress
Accept-Encoding: gzip;q=1.0, identity; q=0.5, *;q=0 // 按顺序支持 gzip , identity
服务器返回的对应的类型编码header是 content-encoding
服务器处理accept-encoding的规则如下所示
1. 如果服务器可以返回定义在Accept-Encoding 中的任何一种Encoding类型, 那么处理成功(除非q的值等于0, 等于0代表不可接受)
2. * 代表任意一种Encoding类型 (除了在Accept-Encoding中显示定义的类型)
3.如果有多个Encoding同时匹配, 按照q值顺序排列
4. identity总是可被接受的encoding类型(除非显示的标记这个类型q=0) , 如果Accept-Encoding的值是空 那么只有identity是会被接受的类型
如果Accept-Encoding中的所有类型服务器都没发返回, 那么应该返回406错误给客户端
如果request中没有Accept-Encoding 那么服务器会假设所有的Encoding都是可以被接受的,
如果Accept-Encoding中有identity 那么应该优先返回identity (除非有q值的定义,或者你认为另外一种类型是更有意义的)
注意:
如果服务器不支持identity 并且浏览器没有发送Accept-Encoding,那么服务器应该倾向于使用HTTP1.0中的 "gzip" and "compress" , 服务器可能按照客户端类型 发送更适合的encoding类型
大部分HTTP1.0的客户端无法处理q值.并且有的服务器无论是否传递了Accept-Encoding,都会返回压缩数据,所以还是要对response的Content-Encoding进行监测。
4、”Accept-Language“字段:
HTTP Header中的 Accept-Language 浏览器支持的语言和区域
同样的 他也支持多个选项,并且支持q值
例如 Accept-Language: en-US,en;q=0.8
首选en-US, 然后是en
注: en-US 是标准的美国英文表示方式, en代表语言是英文 US代表区域是美国
5、“Cache-control"字段
网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。其作用根据不同的重新浏览方式分为以下几种情况:
(1) 打开新窗口
如果指定cache-control的值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。而如果指定了max-age值,那么在此值内的时间里就不会重新访问服务器,例如:
Cache-control: max-age=5
表示当访问此网页后的5秒内再次访问不会去服务器
(2) 在地址栏回车
如果值为private或must-revalidate(和网上说的不一样),则只有第一次访问时会访问服务器,以后就不再访问。如果值为no-cache,那么每次都会访问。如果值为max-age,则在过期之前不会重复访问。
(3) 按后退按扭
如果值为private、must-revalidate、max-age,则不会重访问,而如果为no-cache,则每次都重复访问
(4) 按刷新按扭
无论为何值,都会重复访问
6、”Connection“字段
Connection: 表 示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点, Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然 后在正式写出内容之前计算它的大小。
标签:
原文地址:http://my.oschina.net/yang1992/blog/493126