Я только что установил новый веб-сервер (Debian Buster, Apache, Dovecot, ISPConfig), чтобы заменить старый веб-сервер. На одном из моих веб-сайтов используются настраиваемые заголовки запросов (через 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 включен.
Чтобы ответить на мой собственный вопрос:
Официально подчеркивания - недопустимые символы для использования в заголовках 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'};
дает значения, которые я после ...