1

ページを保存するために POST を実行した後、GET ページにリダイレクトして戻ります (つまり、「Post/Redirect/Get」パターン)。

これは、lynx と派生物 (リンク、elinks)を除いて、私がテストしたすべての「メインストリーム」(および一部のそれほどメインストリームではない) ブラウザーで正常に動作します。彼らは POST を実行し、私は 303 を返し、ブラウザーは他のページにとどまります (GET 応答で URL をロードしません)。

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

私はたまたま Sinatra を使用しているので、問題を示す Sinatra のサンプル アプリケーションを次に示します。

#!/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 にリダイレクトを実行させ、ページを再度取得させるにはどうすればよいですか?

テスト済み:

[~]% 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
4

1 に答える 1

2

この問題は、同じ URL にリダイレクトしている場合にのみ発生するようです。したがって、(同じ URL であるが GET)をPOST /page使用したリダイレクトで、何もしないことにした場合...Location: /pagelynx

以下を使用してこれを回避しました。

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

このsパラメーターは何もしませんが、今ではPOST /page?s=tにリダイレクトしLocation: /pageます。これは十分に異なります...

これがLynxのバグなのか機能なのか、私にはわかりません...

于 2015-01-15T10:28:10.930 に答える