Почему 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 (необязательно со строкой запроса), указывающий, что сервер должен извлечь ссылочный документ и вернуть это клиенту как ответ.