HTTP第16讲——HTTP的重定向和跳转

这篇具有很好参考价值的文章主要介绍了HTTP第16讲——HTTP的重定向和跳转。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

“超文本”里含有“超链接”,可以从一个“超文本”跳跃到另一个“超文本”,对线性结构的传统文档是一个根本性的变革。
能够使用“超链接”在网络上任意地跳转也是万维网的一个关键特性。它把分散在世界各地的文档连接在一起,形成了复杂的网状结构,用户可以在查看时随意点击链接、转换页面。再加上浏览器又提供了“前进”“后退”“书签”等辅助功能,让用户在文档间跳转时更加方便,有了更多的主动性和交互性。

跳转动作是由浏览器的使用者主动发起的,可以称为“主动跳转”,但还有一类跳转是由服务器来发起的,浏览器使用者无法控制,相对地就可以称为“被动跳转”,这在 HTTP 协议里有个专门的名词,叫做“重定向”(Redirection)。

重定向的过程

用 Chrome 访问 URI “http://www.chrono.com/18-1”,它会使用 302 立即跳转到“/index.html”。
http重定向怎么打开,HTTP,http,网络,网络协议
从这个实验可以看到,这一次“重定向”实际上发送了两次 HTTP 请求,第一个请求返回了302,然后第二个请求就被重定向到了“/index.html”。但如果不用开发者工具的话,你是完全看不到这个跳转过程的,也就是说,重定向是“用户无感知”的。
第一个请求返回的响应报文:这里出现了一个新的头字段“Location: /index.html”,它就是 301/302 重定向跳转的秘密所在。
“Location”字段属于响应字段,必须出现在响应报文里。但只有配合 301/302 状态码才有意义,它标记了服务器要求重定向的 URI,这里就是要求浏览器跳转到“index.html”。
浏览器收到 301/302 报文,会检查响应头里有没有“Location”。如果有,就从字段值里提取出 URI,发出新的 HTTP 请求,相当于自动替我们点击了这个链接。
在“Location”里的 URI 既可以使用绝对 URI,也可以使用相对 URI。所谓“绝对 URI”,就是完整形式的 URI,包括 scheme、host:port、path 等。所谓“相对 URI”,就是省略了scheme 和 host:port,只有 path 和 query 部分,是不完整的,但可以从请求上下文里计算得到。

在重定向时如果只是在站内跳转,你可以放心地使用相对 URI。但如果要跳转到站外,
就必须用绝对 URI。
如果想跳转到 Nginx 官网,就必须在“nginx.org”前把“http://”都写出来,否则浏览器会按照相对 URI 去理解,得到的就会是一个不存在的URI

重定向状态码

最常见的重定向状态码就是 301 和 302,另外还有几个不太常见的,例如 303、307、308等。它们最终的效果都差不多,让浏览器跳转到新的 URI,但语义上有一些细微的差别,使用的时候要特别注意。
301 俗称“永久重定向”(Moved Permanently),意思是原 URI 已经“永久”性地不存在
了,今后的所有请求都必须改用新的 URI。
浏览器看到 301,就知道原来的 URI“过时”了,就会做适当的优化。比如历史记录、更新书签,下次可能就会直接用新的 URI 访问,省去了再次跳转的成本。搜索引擎的爬虫看到301,也会更新索引库,不再使用老的 URI。
302 俗称“临时重定向”(“Moved Temporarily”),意思是原 URI 处于“临时维护”状
态,新的 URI 是起“顶包”作用的“临时工”。
浏览器或者爬虫看到 302,会认为原来的 URI 仍然有效,但暂时不可用,所以只会执行简单的跳转页面,不记录新的 URI,也不会有其他的多余动作,下次访问还是用原 URI。
301/302 是最常用的重定向状态码,在 3××里剩下的几个还有:
303 See Other:类似 302,但要求重定向后的请求改为 GET 方法,访问一个结果页面,避免 POST/PUT 重复操作;
307 Temporary Redirect:类似 302,但重定向后请求里的方法和实体不允许变动,含义比 302 更明确;
308 Permanent Redirect:类似 307,不允许重定向后的请求变动,但它是 301“永久重
定向”的含义。
不过这三个状态码的接受程度较低,有的浏览器和服务器可能不支持,开发时应当慎重,测试确认浏览器的实际效果后才能使用。

重定向的应用场景

先来看什么时候需要重定向。
一个最常见的原因就是“资源不可用”,需要用另一个新的 URI 来代替。
至于不可用的原因那就很多了。例如域名变更、服务器变更、网站改版、系统维护,这些都会导致原 URI 指向的资源无法访问,为了避免出现 404,就需要用重定向跳转到新的 URI,继续为网民提供服务。
另一个原因就是“避免重复”,让多个网址都跳转到一个 URI,增加访问入口的同时还不会增加额外的工作量。
例如,有的网站都会申请多个名称类似的域名,然后把它们再重定向到主站上。
决定要实行重定向后接下来要考虑的就是“永久”和“临时”的问题了,也就是选择 301 还
是 302。
301 的含义是“永久”的。
如果域名、服务器、网站架构发生了大幅度的改变,比如启用了新域名、服务器切换到了新机房、网站目录层次重构,这些都算是“永久性”的改变。原来的 URI 已经不能用了,必须用301“永久重定向”,通知浏览器和搜索引擎更新到新地址,这也是搜索引擎优化(SEO)要考虑的因素之一。
302 的含义是“临时”的。
原来的 URI 在将来的某个时间点还会恢复正常,常见的应用场景就是系统维护,把网站重定向到一个通知页面,告诉用户过一会儿再来访问。另一种用法就是“服务降级”,比如在双十一促销的时候,把订单查询、领积分等不重要的功能入口暂时关闭,保证核心服务能够正常运行。

重定向的相关问题

重定向的用途很多,掌握了重定向,就能够在架设网站时获得更多的灵活性,不过在使用时还需要注意两个问题。
第一个问题是“性能损耗”。很明显,重定向的机制决定了一个跳转会有两次请求 - 应答,比正常的访问多了一次。
虽然 301/302 报文很小,但大量的跳转对服务器的影响也是不可忽视的。站内重定向还好说,可以长连接复用,站外重定向就要开两个连接,如果网络连接质量差,那成本可就高多了,会严重影响用户的体验。
所以重定向应当适度使用,决不能滥用。
第二个问题是“循环跳转”。如果重定向的策略设置欠考虑,可能会出现“A=>B=>C=>A”的无限循环,不停地在这个链路里转圈圈,后果可想而知。
所以 HTTP 协议特别规定,浏览器必须具有检测“循环跳转”的能力,在发现这种情况时应当停止发送请求并给出错误提示。
实验环境的 URI“/18-2”就模拟了这样的一个“循环跳转”,它跳转到“/18-1”,并用参
数“dst=/18-2”再跳回自己,实现了两个 URI 的无限循环。
使用 Chrome 访问这个地址,会得到“该网页无法正常运作”的结果:
http重定向怎么打开,HTTP,http,网络,网络协议

小结

1.重定向是服务器发起的跳转,要求客户端改用新的 URI 重新发送请求,通常会自动进行,用户是无感知的;
2.301/302 是最常用的重定向状态码,分别是“永久重定向”和“临时重定向”;
3. 响应头字段 Location 指示了要跳转的 URI,可以用绝对或相对的形式;
4. 重定向可以把一个 URI 指向另一个 URI,也可以把多个 URI 指向同一个 URI,用途很多;
5. 使用重定向时需要当心性能损耗,还要避免出现循环跳转。文章来源地址https://www.toymoban.com/news/detail-669931.html

PS:本文是观看极客之后的笔记。

到了这里,关于HTTP第16讲——HTTP的重定向和跳转的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于http状态码302 请求重定向 前后端数据交互http302

    项目中前端都会统一处理后端返回的状态码给出提示需要在全配置axios拦截器 但是像302这种问题我们是捕捉不到的因为当状态是302时浏览器会根据redirectUrlt进行跳转 这就很难受 302表示临时性重定向 访问一个URL时被重定向到另一个url上 一般页面跳转时候会遇到 他与301的区别

    2024年02月16日
    浏览(32)
  • 在Go中处理HTTP重定向

    在Go语言中处理HTTP重定向是一个常见的任务,特别是在开发Web应用程序或与Web服务进行交互时。HTTP重定向是一种服务器端的行为,它告诉客户端请求的资源已移动到新的位置,并提供了新的位置信息。 Go语言的 net/http 包提供了处理HTTP请求和响应的工具,包括重定向的处理。

    2024年01月24日
    浏览(35)
  • Nginx将http重定向到https,一直提示重定向次数过多(已解决)

    先贴一下nginx的配置 return和rewrite都已经试过了,都是多次重定向导致无法进入页面 后续在https区域中将连接后端地址的api区域复制过来后,再加上下方代码完美解决 #将所有HTTP请求通过rewrite指令重定向到HTTPS。 rewrite ^(.*)$ https://$host$1;

    2024年02月19日
    浏览(50)
  • nginx之location的优先级和nginx的重定向

    nginx的正则表达式 符号 含义 ^ 字符串的起始位置(以什么开头) $ 字符串的结束位置(以什么结尾) * 匹配所有 + 匹配前面的字符最少1次 ? 匹配前面的字符0次或者1次 . 任意单个字符 {n} 连续重复出现n次 {n,m} 连续重复n-m次 [c] 匹配单个字符c () 分组 | 或 1、精确匹配:完整路

    2024年02月03日
    浏览(38)
  • 使用 Nginx 将 HTTP 重定向到 HTTPS

    HTTP 流量在 80 号端口被监听。这里我们将全部 HTTP 的流量都永久重定向到 HTTPS(301)。重定向时,保留原有的主机(host)和请求 URI。 注意,这里的服务器名字(server name)是个通配符_:也就是无论 URL 中包含什么域名,当请求到达 Nginx 服务器以后,都会被重定向到 HTTPS。比

    2024年02月22日
    浏览(43)
  • 解决重定向页面时,https变成http问题

    问题场景:请求某个接口后,处理完相关逻辑后需要重定向到另一个页面,请求的地址是https开头,但经过重定向后,地址变成了http,导致后续请求接口不通,全部报404 解决方法: 启动类中添加如下代码

    2024年02月11日
    浏览(62)
  • IIS配置URL重写,http重定向https

    作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/131004077 IIS配置URL重写,http重定向https ,http怎么重定向到https最全解决方案,安装iis插件,URL重写,配置重定向。URL重写是指服务器程序对接收的URL请求重新写成网站可以处理的另一个URL的过程。URL重写技术是实

    2024年02月09日
    浏览(37)
  • HTTPS被重定向到HTTP的解决方案

    项目使用的Spring框架,在Nginx中已配置HTTPS,通过HTTPS地址成功登录后,重定向到了HTTP地址。 ① Nginx配置中加入X-Forwarded-Proto; ② Tomcat配置中加入protocolHeader。 参考来自:

    2024年02月08日
    浏览(39)
  • Chrome/Safari 浏览器怎么查看网络请求的 http 协议版本

    通过 Chrome 或者 Safari 浏览器的开发者工具查看网络请求后,发现只能看到 scheme 是 https,但是看不到 http 协议是 1.1 还是 2,亦或者是 http3 查看 http 请求 http 协议版本的方法是:鼠标右键表头中的任何一项,随后勾选上「Protocol」 随后可以看到新增了一列 Protocol,显示了 htt

    2024年02月15日
    浏览(53)
  • 301 Moved Permanently:了解HTTP永久重定向错误码

    HTTP错误码的作用和分类 HTTP错误码是指在进行HTTP通信时,服务器返回给客户端的状态码。它们用于表示请求的处理结果,以便客户端能够根据不同的状态码做出相应的处理。HTTP错误码分为5类,分别以不同的数字开头,如1xx表示信息响应,2xx表示成功响应,3xx表示重定向,

    2024年02月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包