После выполнения POST для сохранения страницы я возвращаюсь с перенаправлением страницы GET (например, шаблона "Post/Redirect/Get").Использование шаблона «Post/Redirect/Get» в Lynx не работает, потому что Lynx не перенаправляет
Это прекрасно работает во всех «мейнстрим» (а некоторые не так мейнстрим) браузеры я протестировал, исключением для рыси & производных (ссылки, ELinks); они выполняют POST, я возвращаю 303, и браузер просто остается на другой странице (он не загружает URL в ответ GET).
Я попытался использовать 302 & 301 и установил заголовок Cache-Control
на no-cache
; что не имело никакого значения.
Пример ответа от моего сервера после выполнения POST /
:
HTTP/1.1 303 See Other
Server: nginx/1.6.2
Date: Sat, 10 Jan 2015 17:32:11 GMT
Content-Type: text/html;charset=utf-8
Content-Length: 0
Location: http://localhost/
Connection: keep-alive
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
я, случается, используя Синатра, так вот пример применения в Синатры, который демонстрирует проблему:
#!/usr/bin/env ruby
require 'bundler/setup'
require 'sinatra'
get '/' do
"<form method='post'>#{Time.now.to_s}<textarea name='test'></textarea><button>POST</button></form>"
end
post('/') { redirect '/' }
Каково это, дизайн? Или другое чтение спецификации HTTP, чем большинство других браузеров? Как я могу заставить «рыси» выполнить перенаправление и снова получить страницу?
Испытано в:
[~]% lynx --version
Lynx Version 2.8.8rel.1 (14 Feb 2014)
libwww-FM 2.14, SSL-MM 1.4.1, OpenSSL 1.0.1k, ncurses 5.9.20110404
[~]% links -version
Links 2.9
[~]% elinks -version
ELinks 0.13.GIT a3751107033599b835eaafa61177c8d4dda4b7ef-dirty
к сож y, у меня нет времени, чтобы перейти через источник lynx прямо сейчас, но это поведение может быть либо ошибкой, либо функцией. Источник [2.8.8rel.1] (http://lynx.isc.org/current/lynx2.8.8rel.1.tar.bz2), в WWW/Library/Implementation/HTTP.c, метод 'HTLoadHTTP', начиная с строки 1988 года, могут содержать некоторые ответы. – Andrew
@Andrew Спасибо ... Я сделал некоторые копания и 'printf'-отладки, но это не совсем очевидно для меня, почему мы получаем такое поведение. Это * только *, кажется, происходит, если URL-адрес тот же (чтобы я мог обойти его, увидеть мой «ответ») ... – Carpetsmoker