一 多种重定向跳转方式的差异
① 重定向应用场景
重定向是HTTP请求一个'重要'的'组成'部分
说明: 自己重点关注'nginx实现'外部重定向的'实现方式'和'实验现象'
讲解'HTTP'的重定向 --> '外部'重定向
说明: 以下'需求场景'都可以'通过重定向'来解决
补充场景: 域名'到期'不想续费,想'换个'域名
对于 SEO,当'搜索引擎'看到 '301 重定向'时,它们会将'旧页面'的排名传递给'新页面'
② 重定向的流程
细节点: '浏览器'会自动进行'重定向',但是'curl'需要通过'-L'进行重定向
相对路径: '客户端或者浏览器'自行拼接'完整'的路径 --> 基于'scheme host 端口'等
Locatio '相对'是基于'源始'请求的
常见形式:
1) '/a/b.html' --> 基于当前'scheme、host、port'
2) './a/b.html' --> 基于当前'url' --> "不推荐"
2) 'https://www.wzj.com:8080/a/b.html?name=wzj#hello' --> '跨域名和端口'
④ 重定向响应返回码
1) 重定向'返回码'是'有差别'的,为了讲解它们之间的'差别',先来讲解'两个概念'
不同的'重定向响应码'意味者什么,主要是从'两个维度'来划分的
[1]、可不可以'缓存' --> '永久'重定向'可以缓存'响应,'临时'重定向'不能'缓存
备注:这个只是'HTTP规范'要求,某些'代理缓存服务器'可能'不遵循'
[2]、重定向请求'要不要使用原请求'的两个'组成'部分 --> '方法'和'包体'
++++++++ "讲解permanent永久重定向" ++++++++
永久重定向的'2种'状态码: 301、308
共同: 都可以'缓存响应'
差异: 301是'HTTP1.0'引入会改变'method';308是'HTTP1.1'引入的保留原请求'method、body'
引申: 注意nginx以 'if ($method)' 判断逻辑的'合理性'进行重定向判断
SEO: 搜索引擎在'抓取新内容的同时'也将旧的网址交换为'重定向之后'的网址
++++++++ "讲解temporary临时重定向" ++++++++
共性: 因为是临时重定向,所以浏览器'不能缓存'临时重定向的响应
SEO: 搜索引擎会'抓取新的内容'而'保存旧'的网址
临时重定向的'3种'状态码: 302、303、307
早期: 百度'http-->https'跳转是'307',现在是'302'
++++++++ "讲解特殊special重定向" ++++++++
⑤ 重定向循环次数
nginx '死循环'报错: rewrite or internal redirection cycle while processing
⑥ Location和Referer的区别
++++++++ "REferer响应头" ++++++++
告知服务器请求的'原始资源的URI',其用于所有类型的请求,并且包括'协议、域名、路径和查询参数'
在以下几种情况Referer'不会'被发送:
1)来源页面采用的协议为表示本地文件的 "file" 或者 "data" URI;
2)当前请求页面采用的是'非安全协议',而来源页面采用的是安全协议(HTTPS);
3)直接输入'网址或通过浏览器书签'访问;
4)使用 JavaScript 的 'Location.href' 或者是 'Location.replace()';
5)使用'html5'中noreferrer;
6)使用iframe的hack写法去除referer
请求头中referer与origin功能相似,但有如下'几点不同':
1、而referer不论何种情况下,只要浏览器能获取到请求源都会携带
2、浏览器如果'不能'获取请求源,那么请求头中'不会携带'referer
3、rerferer不但包括协议、域名、端口,'还包括'路径和参数
⑦ 遗留
1) nginx location 使用 '正则',然后'使用alias'
2) nginx相关'重定向'的行为
[1]、 301、302 、returm 302 、rewrite permanent
[2]、 自定义重定向返回的'组成(scheme、host、port、uri)'部分