Как я могу * запретить * Apache2 устанавливать заголовок Content-Type?

У меня есть сценарий CGI, который выводит на стандартный вывод следующее:

print "Status: 302 Redirect\n";
print "Server: Apache-Coyote/1.1\n";
print "Location: $redirect\n";
print "Content-Length: 0\n";
print "Date: $date\n\n";

Где $ redirect и $ date - разумные значения. То, что на самом деле отправляет Apache2, также включает заголовок Content-Type: (текстовый / простой). Я закомментировал DefaultType в файле конфигурации сервера.

Я пытаюсь отладить последующую проблему, которая возникает, когда не отправляется заголовок Content-Type :. Итак, какое магическое заклинание мне нужно выполнить, чтобы предотвратить добавление Apache2 заголовка типа контента?


person Norm    schedule 11.03.2010    source источник


Ответы (6)


Согласно моему (правда, краткому) чтению server / protocol.c и server / core.c, вы не можете.

По умолчанию всегда используется DefaultType (текст / обычный по умолчанию), если этот заголовок отсутствует.

person ceri    schedule 19.03.2010
comment
Ах. Ворчать. Думаю, мне придется настроить какой-нибудь другой веб-сервер для отладки моего клиента. (Я пытаюсь исправить отчет об ошибке, в котором говорится, что мой код падает, если сервер вообще не отправляет Content-Type.) - person Norm; 19.03.2010
comment
Будет ли CGI работать из командной строки? Может быть, просто запустить приведенный выше скрипт из inetd? - person ceri; 19.03.2010
comment
Netcat - ваш друг. Попросите его прослушивать порт и возвращать контент, который вы хотите из файла. Нет необходимости запускать его в inetd. - person Jan Hertsens; 11.08.2015

Даже если мы удалим заголовок Content-Type из запроса с помощью директивы «Header unset Content-Type», apache регенерирует заголовок Content-Type из другого поля структуры запроса. Поэтому сначала мы устанавливаем зарезервированное значение для этого другого поля, чтобы предотвратить регенерацию заголовка, а затем удаляем Content-Type с помощью директивы «Header unset».

Для apache2.2:

Header set Content-Type none
Header unset Content-Type

Для apache2.4:

Header set Content-Type ""
Header unset Content-Type
person srn    schedule 21.05.2015

RemoveType прекратит отправку типа контента с ресурсом.

Дополнение

<Files defaulttypenone.txt>
DefaultType None 
</Files>
<Files removetype.txt>
RemoveType .txt
</Files>
<Files forcetype.txt>
ForceType None
</Files>

Протестировано на моем собственном сервере, эти три решения, и ни одно из них не сработало. Все они вернули text / plain.

person karlcow    schedule 19.03.2010
comment
‹Файлы defaulttypenone.txt› DefaultType Нет ‹/Files› ‹Файлы removetype.txt› RemoveType .txt ‹/Files› ‹Файлы forcetype.txt› ForceType None ‹/Files› Протестировано на моем собственном сервере, эти три решения, но ни одно не сработало. Все они вернули text / plain. - person karlcow; 20.03.2010

Если все, что вы пытаетесь сделать, это подготовить очень конкретный тестовый пример на стороне сервера, вы всегда можете «обмануть», предварительно запекая вывод в текстовом файле и заставив netcat прослушивать соединения на каком-либо порту.

Я использую этот трюк, когда хочу быть на 100% уверенным в каждом байте, отправляемом сервером.

person Jan Hertsens    schedule 31.08.2011

Вы можете попробовать с помощью директивы:

ResponseHeader unset Content-Type
person Maurice Perry    schedule 12.03.2010
comment
Нет, хотя я могу использовать header add для добавления нового заголовка (так что я знаю, что выполняется обработка заголовка), заголовок unset content-type не имеет никакого эффекта. - person Norm; 13.03.2010

Когда я читаю рассматриваемые документы Apache, то, что вы хотите, на самом деле может быть

Header unset Content-Type

Надеюсь, это сработает!

person D.Salo    schedule 19.03.2010
comment
Нет, не сработало. Я думаю, что ResponseHeader стал заголовком в Apache2. - person Norm; 19.03.2010