当标题有“\ n”字符而不是“\ r”字符时,为什么我的服务器会阻塞?

时间:2012-11-14 20:11:13

标签: php http-headers

我刚刚完成调试项目的问题,每当Drupal尝试发送文件下载时,HTTP 500就会出现问题。原来,服务器认为Content-Disposition标头是坏的,因为文件名属性按RFC 2047指定的方式编码,但它只是没有\ n。所以我用r替换了n,现在服务器非常高兴。

所以我想知道这个服务器是否与\ r不同,以及我将来如何判断和/或为什么\ r \ n会工作而不会?

编辑:脚本发送的标头:

X-Powered-By: PHP/5.3.17
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified: Wed, 14 Nov 2012 20:43:20 +0000
ETag: "1352925800"
Content-Length: 1302854
Content-Disposition: attachment; filename="=?UTF-8?B?UHJvUXVhbGl0ZSBNYW51ZWwgZGVzIHByb2dyYW1tZXMgcHLDqWFsYWJsZXMgMjA=?=
 =?UTF-8?B?MTAgYXZlYyBhbm5leGVzXzBfMC5wZGY=?="
Cache-Control: private
Content-type: application/pdf

1 个答案:

答案 0 :(得分:1)

我在这里假设您正在讨论线路终端。

根据RFC2616 HTTP标头应以'\ r \ n'字符串(CRLF)结尾:

  

HTTP / 1.1将序列CR LF定义为所有的行尾标记   协议元素除了entity-body

...

generic-message = start-line
                  *(message-header CRLF)
                  CRLF
                  [ message-body ]
start-line      = Request-Line | Status-Line

这应该终止HTTP标题行。如果你不遵守规范,服务器可以阻塞或做其他感觉就像做的事情,所以你应该与服务器无关。