2015-01-10 1 views
1

После выполнения 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 
+0

к сож 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

+0

@Andrew Спасибо ... Я сделал некоторые копания и 'printf'-отладки, но это не совсем очевидно для меня, почему мы получаем такое поведение. Это * только *, кажется, происходит, если URL-адрес тот же (чтобы я мог обойти его, увидеть мой «ответ») ... – Carpetsmoker

ответ

1

Эта проблема только кажется, произойдет, если мы перенаправлять на тот же URL. Так что если POST /page делает редирект с Location: /page (тот же URL, а GET) lynx решает просто ничего не делать ...

Я работал вокруг этого с помощью:

<form method='post' class="markdown" action="?s=t"> 

Параметр s не делает ничего, но теперь мы делаем POST /page?s=t и перенаправлять Location: /page, который отличается достаточно ...

Я понятия не имею, если это ошибка или особенность в Lynx ...