在Lynx中使用“Post / Redirect / Get”模式不起作用,因为Lynx没有重定向

时间:2015-01-10 17:34:12

标签: http redirect post-redirect-get lynx

在执行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

1 个答案:

答案 0 :(得分:1)

如果我们重定向到同一网址,似乎只会出现此问题。因此,如果POST /page使用Location: /page进行重定向(相同的网址,但是获取GET)lynx决定不执行任何操作......

我通过使用:

解决了这个问题
<form method='post' class="markdown" action="?s=t">

s参数不执行任何操作,但现在我们执行POST /page?s=t并重定向到Location: /page,这已经足够了......

我不知道这是Lynx中的错误或功能......