HTTP请求\响应标头语法

时间:2014-10-23 00:31:16

标签: http http-headers httprequest httpresponse

在HTTP请求或响应的标头中,标头密钥在服务器之间的大小写方面是不变的。

我问我在代码中可以期待:(使用伪函数名称)

安全精确的Python代码

for hdr in header.keys():
    if 'content-length' == hdr.lower():
        recv_more_data( header[hdr] )    # header[hdr] == Content-Length (5388) bytes
        break    # Exit for loop when if statement is met.

我想使用的代码

 recv_more_data (header['Content-Length'])    
 # I know to expect 'Content-Length' not 'content-Length' or some other variation

意思是服务器会返回带有这样的键的标题。

标准申请

GET / HTTP/1.1
Host: www.example-host.com
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0
Accept: */*
Accept-Language: en-US
Accept-Encoding: gzip
Connection: closed
Content-Length: 0

一个糟糕但可能的反应?

HTTP/1.1 200 OK
Server: nginx/1.0.15
date: Thu, 23 Oct 2014 00:25:37 GMT
content-Type: text/html; charset=iso-8859-1
transfer-encoding: chunked
Connection: close
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Encoding: gzip

澄清将有助于我的代码整洁。

3 个答案:

答案 0 :(得分:2)

根据HTTP规范,

HTTP标头名称不区分大小写

RFC 2616 - 超文本传输​​协议 - HTTP / 1.1
Section 4.2 - 邮件标题

  

HTTP标头字段,包括通用标头(第4.5节),      request-header(第5.3节),response-header(第6.2节)和      entity-header(第7.1节)字段,遵循相同的通用格式      RFC 822 [9]的3.1节中给出的。每个标题字段包含      名称后面跟冒号(":")和字段值。 字段名称      不区分大小写。字段值可以在任何金额之前      LWS,虽然单个SP是首选。标题字段可以是      通过在每个额外的行前面加上at来扩展多行      至少一个SP或HT。应用程序应该遵循"常见形式",其中      一个是已知的或指示的,当生成HTTP构造时,因为      可能存在一些无法接受任何内容的实现      超越常见形式。

RFC 7230 - 超文本传输​​协议(HTTP / 1.1):消息语法和路由
Section 3.2 - 标题字段:

  

每个标题字段都包含一个不区分大小写的字段名称      通过冒号(":"),可选的前导空格,字段值和      可选的尾随空格。

答案 1 :(得分:1)

请记住,即使大多数主要服务器都具有一致的大小写,但任何Joe PHP Developer都可以在其代码中手动设置响应标头 - 并且无法监控该人使用的大写标准。

答案 2 :(得分:1)

HTTP标题名称不区分大小写。

看起来你正在使用python。查看requests库。这将使您的生活更多更容易:http://docs.python-requests.org/en/latest/