在HTTP请求或响应的标头中,标头密钥在服务器之间的大小写方面是不变的。
我问我在代码中可以期待:(使用伪函数名称)
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
澄清将有助于我的代码整洁。
答案 0 :(得分:2)
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/