引文:昨天知识点
1.Django重定向实例来介绍它的含义2.为什么要进行重定向python Web开发:Django重定向总结part1,为什么要重定向?
今天我们将一起看一下HTTP重定向的工作原理
现在您知道了为什么重定向有意义,但是它们如何工作?让我们快速回顾一下在Web浏览器的地址栏中输入URL时发生的情况。
HTTP快速入门
假设您已经创建了带有处理路径的“ Hello World”视图的Django应用程序/hello/。您正在使用Django开发服务器运行应用程序,因此完整的URL为http://127.0.0.1:8000/hello/。
在浏览器中输入该URL时,该URL将8000使用IP地址连接到服务器上的端口,127.0.0.1并发送HTTP GET请求路径/hello/。服务器使用HTTP响应进行回复。
HTTP是基于文本的,因此查看客户端和服务器之间的来回相对容易。您可以使用
curl带有选项的命令行工具--include查看完整的HTTP响应,包括标头,如下所示:
查看完整的HTTP响应
如您所见,HTTP响应以包含状态码和状态消息的状态行开始。状态行后跟任意数量的HTTP标头。空行指示标头的末尾和响应正文的开始,其中包含服务器要发送的实际数据。
HTTP重定向状态代码
重定向响应是什么样的?假设该路径/redirect/是由redirect_view()所示的。如果您访问http://127.0.0.1:8000/redirect/使用curl,您的控制台看起来是这样的:
redirect_view()
这两个响应可能看起来相似,但是存在一些关键区别。重定向:
返回不同的状态码(302与200)包含Location带有相对URL 的标头以空行结尾,因为重定向响应的主体为空主要区别在于状态码。HTTP标准的规范说明如下:
302(已找到)状态代码指示目标资源临时位于其他URI下。由于重定向有时可能会更改,因此客户端应继续将有效请求URI用于将来的请求。服务器应该在响应中生成一个Location头域,其中包含针对不同URI的URI引用。用户代理可以使用位置字段值进行自动重定向。
换句话说,每当服务器发送状态代码为时302,它对客户端说:“嘿,此刻,您正在寻找的东西可以在另一个位置找到。”
规范中的一个关键短语是“请使用位置字段值进行自动重定向”。这意味着您不能强制客户端加载另一个URL。客户端可以选择等待用户确认,也可以决定完全不加载URL。
现在,您知道重定向只是带有3xx状态码和Location标头的HTTP响应。这里的关键要点是HTTP重定向就像任何旧的HTTP响应一样,但是具有空的正文,3xx状态代码和Location标头。
就是这样。我们暂时将其与Django联系起来,但首先让我们看一下3xx状态码范围内的两种重定向类型,并了解在Web开发中它们为何如此重要。
临时重定向与永久重定向
HTTP标准定义了几个重定向状态代码,它们都在该3xx范围内。两种最常见的状态代码是301 Permanent Redirect和302 Found。
状态代码302 Found指示临时重定向。临时重定向说:“目前,您要查找的内容可以在其他地址找到。” 可以将其想象为一个商店标语,上面写着:“我们的商店目前已关闭以进行装修。请到我们附近的其他商店。” 由于这只是暂时的,因此下次购物时会检查原始地址。
顾名思义,永久重定向应该是永久的。永久重定向告诉浏览器:“您要找的东西不再位于此地址。现在是在这个新地址,再也不会在旧地址了。”
永久重定向就像一个商店标语,上面写着:“我们搬了。我们的新店就在附近。” 此更改是永久性的,因此下次您要去商店时,您将直接转到新地址。
注意:永久重定向可能会带来意想不到的后果。在使用永久重定向之前,请先完成本指南,或直接跳至“永久重定向是永久的”部分。
浏览器在处理重定向时的行为类似:URL返回永久重定向响应时,将缓存此响应。下次浏览器遇到旧URL时,它将记住重定向并直接请求新地址。
缓存重定向可节省不必要的请求,并提供更好,更快的用户体验。
此外,临时重定向和永久重定向之间的区别与搜索引擎优化有关。
下篇文章我们将具体学习
在python Web项目中,怎样在Django框架使用重定向