Почему apache не передает заголовок Location из скрипта cgi обратно клиенту

У меня есть существующее веб-приложение cgi, которое раньше нормально работало, но чье поведение изменилось.

Одна из программ cgi (при определенных условиях) возвращает заголовок Location, чтобы вызвать перенаправление.

Заголовок Location никогда не достигает веб-браузера - вместо этого Apache, похоже, возвращает содержимое страницы, на которую перенаправляет заголовок Location.

К сожалению, эта страница содержит javascript, который использует строку запроса внутри заголовка Location, но с этим новым поведением строка запроса пуста, потому что браузер все еще думает, что местоположение - оригинальный скрипт cgi.

Почему изменилось их поведение и что я могу сделать, чтобы это не произошло?

1 ответ

Решение

Согласно этому ответу, CGI определяет два различных типа перенаправлений: внутренний и внешний.

Внутренние перенаправления (невидимые для браузера) используются, когда вы указываете URL без схемы и хоста (например, otherpage.html или же /index.html) в Location заголовок.

Внешние перенаправления (выполняемые браузером) используются только при указании абсолютного URL (т. Е. http://www.example.com/some/other/page). Абсолютные URL должны начинаться со схемы (т.е. http).

RFC 3875 содержит соответствующую документацию:

Поле заголовка Location используется для указания серверу, что скрипт возвращает ссылку на документ, а не на фактический документ (см. Разделы 6.2.3 и 6.2.4). Это либо абсолютный URI (необязательно с идентификатором фрагмента), указывающий, что клиент должен получить ссылочный документ, либо локальный путь URI (необязательно со строкой запроса), указывающий, что сервер должен извлечь ссылочный документ и вернуть это клиенту как ответ.

Другие вопросы по тегам