重定向Redirect 的知识
今天下班的时候看到了一些重定向的基础知识,也算开了眼界。以前也经常使用301和302,但从来没有使用过和了解过其他的3XX的状态码,发现原来里面涉及的知识和解决的问题的还不少。
重定向的流程
浏览器首先访问服务器A的URL,服务器A返回带着location为B的URL的 header 和3XX的状态码,浏览器读取响应的3XX状态码,获取到头部的 location,然后跳转到服务器B的URL。
需要知道的,跳转是浏览器发起的。如果服务器给一个非浏览器的终端返回了3XX的状态码,那有可能是无法完成重定向的。
某年,有个应该用已经运行很很长时间了,PHP写的API接口。一直使用的是HTTP,经常被劫持,然后领导想替换成加密的HTTPS,但是客户端不能发版。后来服务器端就考虑把全站的接口从HTTP 302到HTTPS,讨论这个方案的可行性。如果知道上面的流程和知识这个方案立马就PASS了。
永久重定向
表示资源永久性的跳转到新的URL。
一个比较常见的案例就是老站迁移到新站,老站直接关闭后,老站的页面已经被搜索引擎收录了,这个时候使用永久重定向方案。
永久重定向两个状态码
301,重定向请求通常会使用GET方法,不管原请求使用的是何种方法。
308,为了补充301.重定向必须使用原请求的方法和包体访问。
临时重定向
表示资源只是临时跳转到新的URL
临时重定向一共有五个状态码,常用也就相对应的两个302和307.
302,重定向请求通常会使用GET方法,不管原请求使用的是何种方法。
303,并不表示资源变更,只是表示用新的URL的响应代替原请求。不管原请求使用的是何种方法。基本跟302一致,所以市面很少用303,都是使用302.
307,为了补充302.重定向必须使用原请求的方法和包体访问。
百度就是使用的307跳转,浏览器输入http://www.baidu.com 会307 到https://www.baidu.com
300,该请求有多种可能的响应,浏览器可以选择它们其中的一个。服务器没有任何标准可以遵循去代替用户来进行选择。
304,告诉浏览器,所请求的内容距离上次访问并没有变化。 可以直接从浏览器缓存里获取该资源。
后面两种不常用。
使用比较多就是301 302 307 308
循环重定向的问题
ERR_TOO_MANY_REDIRECTS
这个报错挺常见的。如果访问A页面然后重定向访问B,然后B又让重定向访问A,这样就是循环重定向了。多次重定向也会报这个错。
生产环境遇到过一次,有一次日志上发现有ERR_TOO_MANY_REDIRECTS的报错,但是在Nginx的配置上没有找到 3XX的跳转代码啊,那怎么循环跳转的。后来看到了这段配置
location / {
try_files $uri $uri/ /index.html$is_args$args;
}
后来发现根目录下没有index.html,uri不存在,然后uri/目录也不存在,最后发起一个内部子请求到index.html.index.html不存在,又到location,反复重定向。最后报错 ERR_TOO_MANY_REDIRECTS。
重定向Redirect 的知识的更多相关文章
- .htaccess技巧: URL重写(Rewrite)与重定向(Redirect)
URL重定向是.htaccess的重头戏,它可以将长地址转为短地址.将动态地址转为静态地址.重定向丢失的页面.防止盗链.实现自动语言转换等.笔者觉得难点是在正则表达式的运用和理解上. 实现所有这些神奇 ...
- .htaccess技巧: URL重写(Rewrite)与重定向(Redirect) (转)
目录 Table of Contents 一.准备开始:mod_rewrite 二.利用.htaccess实现URL重写(rewrite)与URL重定向(redirect) 将.htm页面映射到.ph ...
- 重定向redirect与跳转forward区别
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DemoResponse.a ...
- thinkphp 重定向redirect
/** * URL重定向 * @param string $url 重定向的URL地址 * @param integer $time 重定向的等待时间(秒) * @param string $msg ...
- thinkphp51 重定向 redirect()
thinkphp51 重定向 跨域 redirect() 可以重新定义新的路由,是fetch() 无法做到的.
- Laravel5:重定向 redirect 函数的详细使用
Laravel5 中新增了一个函数 redirect() 来代替 Laravel4 中 Redirect::to() 来进行重定向操作.函数 redirect() 可以将用户重定向到不同的页面或动作, ...
- 请求转发(forward)和请求重定向(redirect)的区别(转)
作者:@haimishasha本文为作者原创,转载请注明出处:https://www.cnblogs.com/haimishasha/p/5952129.html 用户向服务器发送了一次HTTP请求, ...
- 转发(Forward)和重定向(Redirect)的区别
转发是服务器行为,重定向是客户端行为. 转发(Forword) :通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServle ...
- nodejs 重定向 (redirect + writeHead(Location))
参考: Node.js实现301.302重定向服务 Express URL跳转(重定向)的实现:res.location()与res.redirect() 一 方式1 index.js var htt ...
随机推荐
- Swift 分类 结构体
感谢原作者:http://www.cocoachina.com/newbie/basic/2014/0612/8780.html 类和结构体是人们构建代码所用的一种通用且灵活的构造体.为了在类和结构体 ...
- Android显示gif格式图片
大家知道,在Android中使用ImageView来显示gif格式的图片,我们无法得到gif格式图片该有的效果,它只会停在第一帧上,而不会继续.这时只能看到一张静态的图片,这里我们可以使用个简单的方法 ...
- 各种图示的介绍及绘制(boxplot、stem)
1. 箱线图(boxplot) 也叫作箱形图: 一种用作显示一组数据分散情况资料的统计图.因形状如箱子而得名.在各种领域也经常被使用,常见于品质管理. 主要包含六个数据节点,将一组数据从大到小排列,分 ...
- 【转】NIO与传统IO的区别
转自:http://blog.csdn.net/zhouhl_cn/article/details/6568119 传统的socket IO中,需要为每个连接创建一个线程,当并发的连接数量非常巨大时, ...
- 不能进入String.class调试
Window --> Preferences --> Java --> Compiler --> Classfile Generation: "add line nu ...
- Mac版Visual Studio预览版
来了,Mac版Visual Studio预览版开放下载 投递人 itwriter 发布于 2016-11-17 12:11 评论(7) 有1317人阅读 原文链接 [收藏] « » 微软前俩天宣布,推 ...
- WPF 3D模型的一个扩展方法
原文:WPF 3D模型的一个扩展方法 在WPF 3D中,我们常常需要改变一个ModelVisual3D对象的颜色. 先说说ModelVisual3D,本质上3D模型都是由一个个的三角形构成的,并且经过 ...
- 使用devcpp在windowXP上qt4.4.3安装与使用入门
1.安装前先安装devcpp,我下载的是devcpp-4.9.9.2_setup.exe2.安装qt4.4.3,下载的是qt-win-opensource-4.4.3-mingw.rar,解压后运行后 ...
- Android 5.0(L) ToolBar(替代ActionBar) 现实(四)
经过三天休息,我回来了,我们继续讨论Toolbar. 在此之前假设您正在步步紧跟下来的序列,然后,你应该注意到MainActivity据说他已被警告.因为他们,我们声明toolbar对象.但一直没有用 ...
- 基于Spring开发
1. XML Schema 1.1 最简单的标签 一个最简单的标签,形式如: <bf:head-routing key="1" value="1" to= ...