在执行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规范读取?我如何&#34;强迫&#34; 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
答案 0 :(得分:1)
如果我们重定向到同一网址,似乎只会出现此问题。因此,如果POST /page
使用Location: /page
进行重定向(相同的网址,但是获取GET)lynx
决定不执行任何操作......
我通过使用:
解决了这个问题<form method='post' class="markdown" action="?s=t">
s
参数不执行任何操作,但现在我们执行POST /page?s=t
并重定向到Location: /page
,这已经足够了......
我不知道这是Lynx中的错误或功能......