Apache:环境变量中没有自定义标头

Apache:环境变量中没有自定义标头

我刚刚安装了一个新的 Web 服务器 (Debian Buster、Apache、Dovecot、ISPConfig) 来替换旧的 Web 服务器。我的一个网站使用自定义请求标头 (通过 Javascript) 将信息传递给服务器上的 perl 脚本:

XMLHttp.open("POST", "http://myserver.com/bin/FileUpload.cgi", true);          
XMLHttp.setRequestHeader("Content-type", fileToUpload.type);
XMLHttp.setRequestHeader("X_UPLOAD_FILETYPE", fileToUpload.type);
XMLHttp.setRequestHeader("X_UPLOAD_FILENAME", fileToUpload.name);
XMLHttp.setRequestHeader("X_UPLOAD_USER", currentUser);
XMLHttp.send(fileToUpload);

在旧服务器上,我能够从 perl 读取这些额外的自定义标头,如下所示:

$ft = $ENV{'HTTP_X_UPLOAD_FILETYPE'};
$fn = $ENV{'HTTP_X_UPLOAD_FILENAME'};
$uu = $ENV{'HTTP_X_UPLOAD_USER'};

在新服务器上,此操作失败。检查环境变量显示自定义标头不存在。我猜这是 apache2 设置?mod_headers 已启用。

答案1

回答我自己的问题:

正式来说,下划线在 HTTP 请求标头中是无效字符。Apache 会忽略包含无效字符的标头。因此,

XMLHttp.setRequestHeader("X_UPLOAD_FILETYPE", fileToUpload.type);
XMLHttp.setRequestHeader("X_UPLOAD_FILENAME", fileToUpload.name);
XMLHttp.setRequestHeader("X_UPLOAD_USER", currentUser);

我应该发送这个:

XMLHttp.setRequestHeader("X-UPLOAD-FILETYPE", fileToUpload.type);
XMLHttp.setRequestHeader("X-UPLOAD-FILENAME", fileToUpload.name);
XMLHttp.setRequestHeader("X-UPLOAD-USER", currentUser);

奇怪的是,服务器端的破折号被转换为下划线。我不知道为什么。因此读取这些环境变量:

$ft = $ENV{'HTTP-X-UPLOAD-FILETYPE'};
$fn = $ENV{'HTTP-X-UPLOAD-FILENAME'};
$uu = $ENV{'HTTP-X-UPLOAD-USER'};

产生空字符串,而这些环境变量:

$ft = $ENV{'HTTP_X_UPLOAD_FILETYPE'};
$fn = $ENV{'HTTP_X_UPLOAD_FILENAME'};
$uu = $ENV{'HTTP_X_UPLOAD_USER'};

给出我想要的价值观......

相关内容