我在 Fiddler2 中提出这样的请求
User-Agent: Fiddler
Host: asdf.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
Key=asdf:qwer
Run Code Online (Sandbox Code Playgroud)
当我单击 时Execute,Fiddler 会将最后一行编辑为:
Key=asdf: qwer
Run Code Online (Sandbox Code Playgroud)
请注意额外的空间。
为什么会发生这种情况?它是否会导致我的请求出现问题?
每个标头字段由名称后跟冒号(“:”)和字段值组成。字段名称不区分大小写。字段值前面可以有任意数量的 LWS,但最好是单个 SP。
[...]
字段内容不包含任何前导或尾随 LWS:出现在字段值的第一个非空白字符之前或字段值的最后一个非空白字符之后的线性空白。可以删除此类前导或尾随 LWS,而不更改字段值的语义。在解释字段值或向下游转发消息之前,字段内容之间发生的任何 LWS 都可以用单个 SP 替换。
换句话说:字段值将忽略前导空格,甚至最好使用空格。当您确实想发送空格时,您必须引用字符串: Some-Header: " foo"。
因此,Fiddler 能够像这样显示(并且可能发送)它是很好的,尽管不希望有空格的自定义 HTTP 服务器出现故障并且应该修复。
至于您对服务器返回的“无效标头名称”错误的评论:HTTP 标头定义如下:
Run Code Online (Sandbox Code Playgroud)message-header = field-name ":" [ field-value ]
field-name = token
field-value = [...]
Run Code Online (Sandbox Code Playgroud)
如您所见,field-name只能存在于token,不包括=(因为那是 a separator)。
因此,您使用的标头名称Key=asdf无效,服务器会400 Bad Request因语法错误而抛出异常。您声称获得的越具体Invalid header name,听起来您是在 IIS 中运行您的网站。例如,将其更改=为,您会发现它可以工作。-
| 归档时间: |
|
| 查看次数: |
2771 次 |
| 最近记录: |