我有一个由IE10发送的POST请求的wireshark捕获。 POST请求按照RFC 1867的指定发出,并包含boundary
:
Content-Type: multipart/form-data; boundary=945637143527273; charset=UTF-8
令我感到奇怪的是
charset=UTF-8
在令牌
之后的部分boundary=945637143527273;
当我查看RFC中的Examples
部分时,Content-Type
标题始终由边界终止,并且没有诸如charset
之类的尾随数据。
那么,是否有一些规范的插件允许这样的行为,应该忽略尾随数据还是我(作为符合规范的HTTP服务器)丢弃请求并向客户端发送错误?
编辑:对该主题的进一步调查引导我提出这个问题:
What rules apply to MIME boundary?
接受的答案是RFC 2046,其中边界的指定如下:
boundary := 0*69<bchars> bcharsnospace bchars := bcharsnospace / " " bcharsnospace := DIGIT / ALPHA / "'" / "(" / ")" / "+" / "_" / "," / "-" / "." / "/" / ":" / "=" / "?"
因此,由于bcharsnospace
不包含;
,charset=UTF-8
部分显然不属于边界。在这种情况下我应该忽略它,或者这是Content-Type
标题的无效值吗?
答案 0 :(得分:2)
您需要根据媒体类型的语法解析整个标头字段; “charset”就像“边界”一样。
答案 1 :(得分:1)
我无法对您的问题发表评论,特别是关于IE10的行为,但我会就您应该采取的措施发表评论:
应该忽略尾随数据还是我(作为符合规范的HTTP服务器)丢弃请求并向客户端发送错误?
如果IE10按照您的描述行事,并且您的服务器发送错误以响应,那么这意味着您基本上会一直向IE10用户发送错误响应。
IE10用户将无法对错误采取任何措施,因此这反过来意味着您实际上会将这些用户从服务器提供的任何服务中完全锁定。
在这种情况下,值得考虑Postel定律:Be conservative in what you send, be liberal in what you accept。
所以我会敦促你不发送错误,即使行为严格不符合规范。如果你可以没有错误地处理它,那么这是最好的选择。