Dai Chong's blog

一、什么是重定向、循环重定向

 (1)重定向是指浏览器先访问了服务器A,然后服务器A带着请求的参数(header、状态码3xx)返回到地址为B的服务器上。
 (2)循环重定向是指服务器A重定向到了服务器B,服务器B由于某种原因又重定向到了A,这样就构成了重定向循环。

二、3xx重定向状态码

 (1)301(Move Permanently):永久性重定向,请求的资源被分配了新的URI,以后都使用这个(get)。
 (2)302(Found):临时性重定向,请求的资源被分配了新的URI,本次使用这个(get,允许缓存)。
 (3)303(See Other):请求资源存在另一个URI,应使用get方法获取请求资源。
 (4)307(Temporary Redirect):类似于302,只是302的POST方法会变为GET,而307的不会。

三、怎么产生的?

1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 80;
server_name www.daichongweb.cn;

root /site/hexo/public;
index index.html;

# 这段是产生循环重定向的原因
# 当浏览器访问 www.daichongweb.cn 时发现不是https就会进行重定向,
# 但重定向到https之后又没有判断是否是https,也就是没有禁止跳转,最终造成了循环
return 301 https://$host$request_uri;
}

四、怎么解决?

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 80;
server_name www.daichongweb.cn;

root /site/hexo/public;
index index.html;

# 通过上面的解释逻辑就变得相对简单了,只需要增加一个判断就可以解决
if ($scheme = http) {
return 301 https://$host$request_uri;
}

}

四、总结

 在项目开发中经常会用到重定向,认识比较常见的状态码对网络请求的判断又很大帮助。


 评论