我在Fiddler2中提出了这样的请求
User-Agent: Fiddler
Host: asdf.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
Key=asdf:qwer
当我点击执行时,Fiddler编辑最后一行阅读:
Key=asdf: qwer
请注意额外的空间。
为什么会发生这种情况,是否会导致我的请求出现问题?
答案 0 :(得分:3)
RFC 2616, 4.2 Message Headers:
每个标题字段包含 名称后跟冒号(“:”)和字段值。字段名称 不区分大小写。 字段值可以在任何金额之前 LWS,但首选单个SP 。
[...]
字段内容不包括任何前导或尾随LWS: 在第一个非空格之前出现的线性空白区域 字段值的字符或在最后一个非空格之后 字段值的字符。这样的领先或尾随LWS可能是 删除而不更改字段值的语义。任何LWS 在字段内容之间发生的可以用单个SP替换 在解释字段值或转发消息之前 下游。
换句话说:对于字段值,将忽略前导空格,甚至优选空格。当做想要发送空格时,您必须quote the string:Some-Header: " foo"
。
所以Fiddler很好地显示(并且可能发送)它,尽管一个自定义的HTTP服务器不会期望有空间存在故障并应该修复。
关于服务器返回的关于“无效标题名称”错误的评论:HTTP标头定义如下:
message-header = field-name ":" [ field-value ] field-name = token field-value = [...]
如您所见,field-name
只能存在token
,其中不包含=
(因为它是separator
)。
因此,您使用的标头名Key=asdf
无效,并且由于语法格式错误,服务器会抛出400 Bad Request
。您声称获得的更具体Invalid header name
,听起来就像是在IIS中运行您的网站。例如,将=
更改为-
,您就会发现它会正常工作。