从RFC2616 Sec4.2:
每个标头字段由一个名称后跟一个冒号(“:”)和字段值组成。
乍一看,这似乎会将指定空标头值的消息放入格式错误的不合规类别中。但是, RFC2616 Sec2.1中概述的增强 BNF 形式表明
"#element" 允许任何数字,包括零
由于这是用于指定 Accept 标头值的声明,因此空值似乎是有效的。
由于规范中的以下方向,解析空标题和只有空格的标题可能会出现问题:
字段内容不包括任何前导或尾随 LWS:在字段值的第一个非空白字符之前或字段值的最后一个非空白字符之后出现的线性空白。可以在不更改字段值语义的情况下删除此类前导或尾随 LWS。在解释字段值或向下游转发消息之前,在字段内容之间发生的任何 LWS 都可以用单个 SP 替换。
恕我直言,发送一个空头是完全没有意义的。不应该这样做,并且解析器可能无法正确解析这些标头。传统上,在处理不合规组件时想要规避此类限制的人会指定“伪空”值,如下所示:
X-MyCustomHeader: ""
如果您只是想验证标头字段是否作为某种形式的布尔开关发送,请考虑发送像上面这样的占位符值而不是空值。
更新
我想我在直接回答这个问题时不是很清楚:在空的 Accept 标头的情况下,您确实有两个选择:
- 发送
406 Not Acceptable
响应以通知客户端您不为空的 Accept 值提供任何内容类型 (duh)。
这是合理的,但RFC2616 Sec14.1 不需要:
如果存在 Accept 头字段,并且如果服务器无法发送根据组合 Accept 字段值可接受的响应,则服务器应该发送 406(不可接受)响应。
- 或者,因为这不是必需的,并且用户不太可能不接受任何内容类型(否则,他们为什么还要费心发送请求?)......我建议处理一个空
Accept:
值(如果消息拒绝不是' t 选项)与 相同Accept: */*
。