django:临时重定向和永久重定向有啥区别?

Posted

技术标签:

【中文标题】django:临时重定向和永久重定向有啥区别?【英文标题】:django: what's the difference between a temporary redirect and a permanent redirect?django:临时重定向和永久重定向有什么区别? 【发布时间】:2013-10-05 02:01:48 【问题描述】:

好的,如果你去这里的文档: https://docs.djangoproject.com/en/dev/topics/http/shortcuts/

并向下滚动以查看它说的最后一个 redirect() 示例 "默认情况下,redirect() 返回一个临时重定向。以上所有形式都接受一个永久参数;如果设置为 True,将返回一个永久重定向:"

现在,临时重定向和永久重定向有什么区别?我正在使用它,以便当用户登录并通过身份验证时,将他重定向到登录页面。我应该改用 HttpResponseRedirect() 吗?使用 redirect() 而不是 HttpResponseRedirect() 有什么好处吗?

【问题讨论】:

它不是 django,而是标准的 HTTP 术语:webdesign.about.com/od/http/qt/tip301v302redir.htm 哦,完美,谢谢.. 但是,嗯,HttpResponseRedirect 是永久重定向还是临时重定向? 临时,不带参数permanent = True 嗯,哦,好吧,在您看来,如果我想在用户通过身份验证后重定向到登录页面,我应该使用临时还是永久? 使用 django 提供的redirect()。这只是表示其他 URL 上的资源可用的一种安全方式。 【参考方案1】:

有两种方法可以返回 301 永久重定向:

from django.shortcuts import redirect

def my_view(request):
    # some code here
    return redirect('/some/url/', permanent=True)

https://docs.djangoproject.com/en/1.5/topics/http/shortcuts/#redirect

或:

from django.http import HttpResponsePermanentRedirect

    def my_view(request):
        # some code here
        return HttpResponsePermanentRedirect('/some/url')

https://docs.djangoproject.com/en/1.5/ref/request-response/#django.http.HttpResponsePermanentRedirect

【讨论】:

好的,那么在您看来,如果我想在用户通过身份验证后重定向到登录页面,我应该使用临时还是永久? 我会使用临时重定向。永久重定向适用于资源 URL 更改时。见:en.wikipedia.org/wiki/HTTP_301【参考方案2】:

只需在 Brandon 的帖子中添加一条关于您的问题的注释,两者之间有什么区别。临时重定向和永久重定向之间的主要区别在于第三方如何看待它。 如果 Google 看到永久重定向,它可能会认为旧站点已消失,并会更新所有点击以直接访问新 URL。有人说 Google 支持永久重定向,因为垃圾邮件发送者经常使用临时重定向。

临时重定向的情况是,例如在您自己的站点上对链接到下载镜像/静态文件服务器的 URL 进行内部重写。在这种情况下,重定向站点可能会保持不变,而其他服务器地址可能会改变(例如,在最便宜的地方托管静态内容)。使用永久重定向可能会带来问题(想想您手机上的播客播放器会记住此类重定向并且在您移动静态文件服务器时无法识别它)。

【讨论】:

以上是关于django:临时重定向和永久重定向有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Django 重定向和 HttpResponseRedirect 有啥区别?

302 和 307 重定向有啥区别?

如何从 302 临时重定向代码更改为 301 永久重定向代码?

基于Python+Django重定向的例子

301重定向与302跳转有什么区别?

http状态码301302