【问题标题】:HTTP Location: re-direction -- can browsers addr bar be made to follow the URL?HTTP Location: redirect -- 可以让浏览器的地址栏跟随 URL 吗?
【发布时间】:2015-03-30 15:13:53
【问题描述】:

我广泛使用脚本,并使用 Python 从执行的脚本跳回启动它的页面,有时甚至完全跳回其他页面。

假设我正在运行一个脚本,我们将其称为“thisplace.cgi”,它会做它的事情,不管是什么,然后执行以下内容:

sys.stdout.write('Location: otherplace.cgi\n\n')
raise SystemExit

它工作了——我到了那里,otherplace.cgi 生成的页面显示正常,从功能上讲,一切都很好。

但是。在浏览器的地址栏中,仍然显示“thisplace.cgi”。不是用户现在真正所在的“otherplace.cgi”。

我做了一些谷歌搜索,根据我收集到的信息(不多...似乎很神秘),我最终发送了这个...

sys.stdout.write('HTTP/1.1 300 Multiple Choices\n')
sys.stdout.write('Location: otherplace.cgi\n\n')
raise SystemExit

...但是浏览器只是将其视为无效并给我一个错误页面。 CGI 环境是 Intertubes 上的一些共享主机 Debian 机器。我在 OS X 下的 FireFox 中看到了这个问题。

我是否误解了 300 的用途、用途或用途?还是我完全感到困惑? :)

我只希望浏览器在 URL 栏中显示正确的内容。似乎要求的并不多。没有?

【问题讨论】:

    标签: python http redirect


    【解决方案1】:

    要将浏览器重定向到不同的 URL,您需要使用 301 Moved Permanently。这将导致浏览器获取第二个页面并显示新的 URL。

    例如

    sys.stdout.write('HTTP/1.1 301 Moved Permanently\n')
    sys.stdout.write('Location: otherplace.cgi\n\n')
    raise SystemExit
    

    【讨论】:

    • 对吗? 301 不会导致缓存错过中间页面吗?另外,我根本没有成功发送标题。一\n,二\n\n,不管怎样,浏览器都会弹出错误页面。唯一可行的是 Location: where\n\n -- 谢谢你的帖子。
    • 如果您希望中间页面在浏览器中显示某些内容,您可能需要使用客户端重定向(例如 JavaScript)。但是,如果您只是希望您的页面执行某些操作,然后将用户发送到另一个页面,只需确保重定向是最后执行的操作,并且它会正常工作。我不确定你为什么必须首先输入 \n 。你能解释一下为什么你认为它们是必要的吗?你用的是什么语言,python?然后你应该使用 urllib2.HTTPRedirectHandler.http_error_301
    • 我正在使用 Python。我不需要任何库 WRT 网页制作。通过 sys.stdout.write() 严格地由 STDOUT 驱动直接发射 当发送像 Location: 这样的标头时,HTTP 规范需要两个 C/R。为此,Linux 下的大多数服务器将 \n 转换为 \r。我不希望显示中间页面(好吧,我真的不在乎),但我希望显示最终页面,但事实并非如此——它停留在中间页面上。我不希望浏览器因为 301 通知而忽略中间值。另外,我无法发送第一个标头,这让我觉得很奇怪。
    • 那么 301 是正确的使用,这是相当标准的使用它。当浏览器收到 301 响应时,它已经请求了中间页面,否则您将不会发送响应,并且它会在服务器上进行处理。我将在您的问题中添加一个 Python 标签,然后有 Python 知识的人将能够提供帮助。
    • 这不是我担心的第一个过程。这是下一个,浏览器被告知页面被移动了——在那之后它还会去那里吗?感谢您添加Python标签,甚至没有想到它。德普。 :)
    猜你喜欢
    • 1970-01-01
    • 2015-02-09
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2017-05-31
    • 2014-12-16
    相关资源
    最近更新 更多