2013-11-04 25 views
2

我有一个由IE10发送的POST请求的wireshark捕获。由RFC 1867指定的POST请求发出,它包括一个boundaryIE10发送非法POST请求吗?

Content-Type: multipart/form-data; boundary=945637143527273; charset=UTF-8 

什么令我很奇怪的是令牌

boundary=945637143527273; 

当我看到后

charset=UTF-8 

部分在RFC的Examples部分,Content-Type标题始终由边界终止,并且没有trailin g数据,如charset

那么,有没有一些附加的规范允许这样的行为,应该忽略尾随数据还是我(作为符合规范的HTTP服务器)放弃请求并向客户端发送错误?


编辑:该主题进一步的调查使我这样一个问题:

What rules apply to MIME boundary?

接受的答案是指了其中边界被规定如下:

boundary := 0*69<bchars> bcharsnospace 

bchars := bcharsnospace/" " 

bcharsnospace := DIGIT/ALPHA/"'"/"("/")"/
        "+"/"_"/","/"-"/"."/
        "/"/":"/"="/"?" 

因此,由于bcharsnospace不包含;,charset=UTF-8部分显然不属于边界。在这种情况下,我应该忽略它吗?或者这对于Content-Type标题是无效值?

+0

SubValue *(parameters)* order无关紧要。你用';'打破并用'='分开来得到Header的SubValues。然后你只需参考“边界”值和“字符集”值......不管他们的顺序如何。 – CodeAngry

回答

1

我可以在你的问题特别是约IE10的行为不作评论,但我会在你左右,你应该做些什么的问题发表评论:

应尾随数据被忽略或应我(作为规范兼容的HTTP服务器)删除请求并向客户端发送错误?

如果IE10的行为与您描述的一样,并且您的服务器发送错误以回应该错误,那么这意味着您基本上会一直向IE10用户发送错误响应。

IE10用户将无法对错误进行任何操作,因此这意味着您将实际上完全锁定您的服务器提供的任何服务中的用户。

有时候这样,值得考虑Postel定律:Be conservative in what you send, be liberal in what you accept

所以,我会敦促你不是发送错误,即使行为不严格按照规范。如果你可以处理它没有错误,那么这是最好的选择。

+0

:-)我当然不想阻止所有的IE10用户。问题的核心是IE的行为是否可以(我会默默地接受请求)或不行(我会对IE做很多咆哮)。 – eckes

2

您需要根据媒体类型的语法解析整个标题字段; “字符集”就像“边界”一样。