Какие заголовки http подавить «Этот документ больше не доступен».на кнопку браузера назад? - PullRequest
1 голос
/ 19 июня 2019

Perl-скрипт создает страницу загрузки с этим URL

http://server/cgi-bin/oursite/script.pl?action=checkme&username=myname

с заголовками, установленными:

my $q = new CGI;
...
print $q->header(-expires => '+0s');

с кучей ссылок на нем. Вот один из них:

http://server/cgi-bin/oursite/script.pl?username=myname&action=retrieve&rmime=text__plain&rfile=HM_vmK9Ah.status

(Это URL в конструкции filename .) Если пользователь нажимает на эту ссылку, целевой файл отправляется в браузер с заголовками:

  print "Content-type: $RMIME\n";
  print "Content-Disposition: inline\n\n";

Далее следует текст этого файла. Это отображается так, как должно. К сожалению, если пользователь затем пытается использовать стрелку назад браузера, это терпит неудачу. Firefox (например), говорит это:

Срок действия документа истек

This document is no longer available.

The requested document is not available in the browser’s cache.

    As a security precaution, the browser does not automatically re-request sensitive documents.
    Click Try Again to re-request the document from the website. 
    [Try Again]

Нажатие кнопки «перезагрузить» в браузере или «Повторить попытку» в сообщении, а затем «повторная отправка» возвращает на страницу загрузки.

Если вместо этого заголовки для страницы загрузки создаются:

print "Expires: +0s\n";
print "Content-type: text/html\n\n";

Тогда кнопка «назад» работает как положено.

Я не понимаю, почему поведение отличается в двух случаях, так как кроме отказа кнопки «назад» страницы отображаются одинаково (как text / html). Может кто-нибудь объяснить это?

Смежный вопрос - если браузеру предписано «показать источник страницы» на странице загрузки, созданной с помощью первого метода заголовка, который также вызывает сообщение «Документ истек», а «Повторить попытку» «повторно отправить» показывает URL-адрес верхней страницы, предоставленной сценарием. Однако «показать источник страницы» на верхней странице немедленно показывает его без сообщения «Срок действия документа истек». Если страница была создана с помощью второго метода заголовка, тогда «show source source» действительно показывает источник текущей страницы. Опять же, почему разница?

Спасибо.

1 Ответ

2 голосов
/ 19 июня 2019

print $ q-> header (-expires => '+ 0s');

Это переводится в Expires: .. current date and time .., что означает, что срок действия ответа истекает немедленно.Это означает, что результат не кэшируется и, следовательно, не может отображаться при возврате в браузере.

print "Expires: + 0s \ n";

Получаетсяне переведено, но отправлено как есть в браузер, то есть: Expires: +0s.Поскольку заголовок Expires ожидает фактические дату и время, которые вы не предоставили, этот неверный заголовок просто игнорируется, и вместо него применяется политика кэширования по умолчанию.Это означает, что страница кэшируется и может отображаться при возврате в браузере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...