http协议头详解,更新中

来源:互联网 发布:linux用户切换命令 编辑:程序博客网 时间:2024/06/06 05:08
最近测试浏览器,需要设计测试浏览器的http协议部分,因为之前对协议本身了解不够,设计测试用例还真无从下手,所以看了下rfc2068协议
下面都是http1.1标准协议,1.0可能部分不支持
着重看了下Header Field Definitions这章


注,多个值都是用逗号分开,每个数据里面用封号分开


参考:http://freesoft.org/CIE/RFC/2068/index.htm

Accept:
request-header
指定接收的类型,可以指定类型和权重,浏览器必须用到的
//应该需要测试

Accept-Charset:
request-header
指定接收的字符集,浏览器必须用到
字符集名称+权重UTF-8,*;q=0.5

Accept-Encoding
request-header
指定编码格式,比如:Accept-Encoding: compress, gzip
如果服务器不能发送客户端accept-encoding类型,then server SHOULD send an error response with the 406
//用例需要设计,返回406和其他格式的文本,比如采用des加密的内容




Accept-Language
request-header
指定接收的语言类型和权重,比如:Accept-Language:zh-CN,zh;q=0.8
所有大于权重大于0的语言都是被浏览器接受的
//需要测试服务端发送的lanuage不是zh的情况




Accept-Ranges
response-header
服务端申明支持的资源请求的访问,比如:Accept-Ranges: bytes
但是客户端可以忽略服务器的申明而请求其他的range,所以,从这点看,跟浏览器应该没有什么关系,至少目前我们浏览器没有这个功能


Age:
response-header
服务器通知客户端,再次刷新响应的大概时间值,秒
浏览器应该用不着,应该是应用可以做的


Allow:
entity-header
服务器通知客户端,支持的,请求方法,比如 Allow: GET, HEAD, PUT
服务器如果不止此hiallow外的方法,就返回405
但是客户端还是允许去请求不在allow里面的方法,所以对应用有用,对浏览器没什么用


Authorization:
客户端需要带上的
当服务器返回401的时候,客户端需要发送Authorization  = "Authorization" ":" credentials
//需要测试浏览器是否能够发送authorization,挺难测试的




Cache-Control://这里需要了解,那些时候,需要浏览器去cache文件,哪些时候去读cache同时发请求,哪些时候去读cache但不发请求
general-header,通用header,request和response都可以包含
cache的所有命令字都是单向的,不需要响应
1.0基本都不支持
所经过路由上的所有设备都可以遵守该cache命令,比如中间的代理服务器
请求格式:Cache-Control:+命令字
命令字:
请求命令字:
          cache-request-directive =
                            "no-cache" [ "=" <"> 1#field-name <"> ]
                          | "no-store"
                          | "max-age" "=" delta-seconds //浏览器有
                          | "max-stale" [ "=" delta-seconds ]
                          | "min-fresh" "=" delta-seconds
                          | "only-if-cached"
                          | cache-extension
响应命令字://都需要测
cache-response-directive =
                           "public"
                          | "private" [ "=" <"> 1#field-name <"> ]
                          | "no-cache" [ "=" <"> 1#field-name <"> ]
                          | "no-store"
                          | "no-transform"
                          | "must-revalidate"
                          | "proxy-revalidate"
                          | "max-age" "=" delta-seconds
                          | cache-extension
   cache-extension = token [ "=" ( token | quoted-string ) ]//响应的需要测
   
   //好复杂啊,就这里的用例就够累死人了
   
   
   
   
Connection:
general-header
specify options that are desired for that particular connection and MUST NOT be communicated by proxies over further connections.
为特定的连接指定选项,并不能通过proxy通讯
例子:
Connection: close 或则keep-alive
//目前还不知道浏览器怎么样才会发送这个connection,服务器可以设置



Content-Base:
entity-header
例子:"Content-Base" ":" absoluteURI
指定baseuri,为之后的相对url提供计算整个uri


Content-Encoding:
entity-header
例子:Content-Encoding: gzip
指定body的编码
//需要测试在返回equest里面指定的conent-encoding和没有指定的content-encoding

Content-Language:
entity-header
例子:Content-Language: mi, en
指定body的语言
//需要测试,同上

Content-Length:
entity-header
发送body的长度
//要不要测试正确的length和错误的length,包括发送的和接收的


Content-Location:
entity-header
重定向的地址,一般都是返回30几的时候,带上这个content-location
//需要测试的等级比较高,容易出问题

Content-MD5:
entity-header
传送body的md5值,格式:"Content-MD5" ":" md5-digest
只有服务器能生成,中间的代理服务器等都不许生成
//需要测试我们浏览器会对这个md5检查吗?比如发送的content-md5和文件内容md5不一致??


Content-Range:
entity-header
实体头.用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:
Content-Range: bytes (unitSPfirst byte pos) - [last byte pos]/[entity legth]
一般用于断点续传
例子:
008-02-21 05:49:47 GET /file.rar HTTP/1.1
2008-02-21 05:49:47 Connection: close
2008-02-21 05:49:47 Host: 116.1.219.219
2008-02-21 05:49:47 Range: bytes=100-300 //意思是下载file.rar的100到300这部分数据
//强烈需要测试,但是要看需求是否有

Content-Type:
entity-header
实体内容的类型
//浏览器什么规则发送

Date: 
entity-header
一般是服务器响应时可以带上,但是浏览器好像没什么用
Date: Tue, 15 Nov 1994 08:12:31 GMT
//需要测试通过js能否取到这个data,可能某些秒杀之类的网站需要通过服务器取时间,通过js来测试




ETag:
entity-header
"ETag" ":" entity-tag
服务器第一次将etag发送给客户端,再次请求时,浏览器需要将该etag带给服务器,如果相同,返回304,不同,则返回200和新内容
//需要测试


Expires:
entity-header
刷新时,定义页面过期时间,在该时间内,返回304,和etag类似
//需要测试


From:
request-header
需要发送放带上自己的email,这个email是控制这个request的添加的,比如浏览器,但是浏览器没有这个功能,所以不需要测试




Host:
request-header
指定host and port
//需要基本测试


If-Modified-Since:
request-header
当服务器先发送last-modified时间之后,再次请求,需要带上这个header,如果服务器判断相同,则返回304,不同则返回200
//需要测试




If-Match:
request-header
客户端通过If-Match来检查etag
//不知道浏览器怎么生成这个头


If-None-Match:
//同上,不知道怎么生成这个头




f-Unmodified-Since:
request-header
If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT
如果服务器的resource已经改变了,那么必须返回412
如果没有modified,就正常返回
//不知道怎么让浏览器发送这个头


Last-Modified:
entity-header
服务器发送过去的
//需要测试

Location:
response-header
如果返回20X并且带location,则不跳转,但是可以获取
如果返回30x并且带resource,则必须自动跳转
//必须测试




Max-Forwards:
request-header
必须在使用trace method的时候,带上,浏览器不用测试
限制代理数和网关数用




Pragma:
general-header
pragma的指令对所有协议请求链上都有效
比如pragma:nocache,则所有的路由上的设备都不能cache
浏览器不用测试

Proxy-Authenticate:
response-header
Proxy-Authenticate  = "Proxy-Authenticate" ":" challenge
服务器必须返回407
//需要测试,看浏览器怎么提示操作

Proxy-Authorization:
request-header
Proxy-Authorization     = "Proxy-Authorization" ":" credentials
向代理服务器认证用
//需要测试,但是不知道浏览器怎么用


Public:
response-header
向客户端指明服务器可用的方法集合,比如head,trace,get,put,post,delete
但是应该不用测试,应为客户端可以任然只用其他的method
//但是应该不用测试

Range:
request-header
客户端请求部分下载用的
//需要看浏览器支持断点续传没


Referer:
request-header
记录上一步的url
//需要测试


Retry-After:
response-header:
告诉客户端在多少时间之后retry,并同时返回503错误
//需要测试

Server:
response-header
返回服务器软件版本之类的
//好像对浏览器没什么影响

Transfer-Encoding:
general-header
指定传输的消息的编码
//应该要测???

Upgrade:
general-header
客户端发送upgrade,并指定其他的通讯协议,如果服务器支持,则必须返回101,并且Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
//浏览器不知道支不支持

User-Agent:
request-header
指明浏览器版本
//需要测试


Vary:
看不懂




Via:
general-header
代理服务器使用,指明中间协议,不知道干嘛的,浏览器应该不用使用
//需要测试吗?

Warning:
response-header
警告用,任何返回statsu都可以带上这个header
浏览器应该不处理这个警告

WWW-Authenticate:
response-header
返回401时,返回,需要验证
//需要测试