http 307重定向
刚才在做hexo页面优化,发现了本地测试返回http 307。以前没见过这个响应码,于是做一下调研。
相关文章:
- hexo页面优化
http 307
在rfc规范中,http 307 Temporary Redirect 是临时重定向。
平时常见的重定向是:
- 301:Permanently Moved,永久重定向
- 302:Temporarily Moved,临时重定向
http 307和302的区别在于:307要求客户端不改变原先的请求方法,对在Location头部中规定的URI进行访问。对于302,很多客户端的实现是,直接使用GET方式访问重定向地址。
例子
客户端请求
12 |
POST /index.php HTTP/1.1Host: www.example.org |
服务器端响应
12 |
HTTP/1.1 307 Temporary RedirectLocation: https://www.example.org/ |
那么客户端必须以POST方式重定向访问https://www.example.org/
。
本地测试产生http 307
next的_config.yml
配置
123456789 |
# Internal version: 2.1.5 & 3.5.7# See: https://fancyapps.com/fancybox# Example:# fancybox: //cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.js# fancybox: //cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.6/jquery.fancybox.min.js# fancybox_css: //cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.css# fancybox_css: //cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.6/jquery.fancybox.min.cssfancybox: //cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.6/jquery.fancybox.min.jsfancybox_css: //cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.6/jquery.fancybox.min.css |
平时写url地址,一般是http或者https,但是next里面的例子都是//
。
//
的意义是,沿用当前页面的协议。如果当前页面是http协议,那么发出去的请求就是http;如果是当前页面是https,那么发出去走https。
//
写法的好处是,不需要关注协议,只需要关注URI路径。如果哪一天发生协议变更,比如http升级为全站https,那么代码完全都不用修改。
但是这没有解释为什么返回了http 307。
仔细看看response header,除了Location
指示重定向地址外,还有
1 |
Non-Authoritative-Reason: HSTS |
HSTS是HTTP严格传输安全(英语:HTTP Strict Transport Security),之前的文章提到过:
- nginx配置hsts
因为本地测试,使用http://localhost:4000
访问,所以//
的页面协议是http。但是cloudflare.com开启了HSTS,所有请求都必须是https协议。对cloudflare.com原来的http请求必须升级为https。
事实上,这个307响应不是cloudflare.com产生的,是chrome浏览器干的好事。
The way Chrome shows this in the network tab is by creating a dummy 307 response with a redirect to the https version of the address. But that’s a fake response and is not generated by the server - the reality is Chrome did that internally before the request even went to the server.
注意到,rfc定义http 307是Temporary Redirect,而截图显示的是Internal Redirect。 回想到HSTS只在第1次http访问之后才会生效。如果chrome不做这个返回,会是怎样的流程呢:
- 本地客户端http方式访问cloudflare.com
- 服务器表示要以https方式访问资源
- 于是本地客户端以https方式再次访问cloudflare的资源
中途多了一次网络请求。
因为chrome维护了一份HSTS站点列表,知道cloudflare必须要https方式请求。于是截获http请求后,直接以https方式访问,同时做出dummy 307响应。
小实验
把next的_config.yml
从//
修改为https://
,再测试
直接就是http 200了。
小结
//
比写死具体http、https更加灵活,推荐使用- http 307 Temporary Redirect,临时重定向,客户不能改变请求方式
- chrome知道HSTS站点,会自动把这些站点的http请求改写为https,同时在response header增加
Non-Authoritative-Reason: HSTS
,并且把307响应码解析为Internal redirect
本文作者ycwu314,备份地址 https://ycwu314.github.io/p/http-307/
转载于:https://www.cnblogs.com/ycwu314/p/11318735.html
http 307重定向相关推荐
- SAP gateway的307重定向
gateway里的逻辑:根据进来的HTTP请求解析service name和resource path: 如果lv_resource_path为空,就进入140行IF之后的分支: 这里抛一个异常:/i ...
- 307跳转php,http 307重定向
刚才在做hexo页面优化,发现了本地测试返回http 307.以前没见过这个响应码,于是做一下调研. 相关文章: http 307 在rfc规范中,http 307 Temporary Redirec ...
- 服务器响应307,ios - 调用307重定向服务器时的401响应 - 堆栈内存溢出
我已经构建了一个iOS应用程序来调用服务器,该服务器仅接受来自列入白名单的IP的呼叫(客户端的安全要求). 他们现在设置了307个临时重定向. 我已经将原始的根URL更改为新的重定向地址,现在出现40 ...
- 重定向和转发的区别+使用情景
重定向和转发的区别: // 重定向 response.sendRedirect("xxx.jsp或者servlet"); // 转发 request.getRequestDispa ...
- Javaweb 请求转发和请求重定向
Javaweb 请求转发和请求重定向 1.请求转发和请求重定向区别 2.服务端内部转发案例 3.客户端重定向案例 1.请求转发和请求重定向区别 请求转发和请求重定向主要区别,包含以下 5 点: 定义不 ...
- http协议状态码3xx系列(301,302,303,304,305,306,307),小白易通
3xx 重定向 3xx系列是http响应包中重要的状态标准,表示重定向意义的一类状态码,这些转状态码将指导客户端执行某些行为 都是属于重定向,但不同的值,差异却不小,具体差异如下 301 永久重定向 ...
- Fiddler基础教程 - 3. 抓包 | 设置断点 | 捕获设置 | 重定向AutoResponder | 过滤Filters
本来想自己写的,结果翻到一系列的博客,发现有前辈总结的太好了,转载过来,当知识点查询一下.外加自己总结的一些经验,我总结的放在了最后面. 原地址:https://www.cnblogs.com/sjl ...
- Scrapy307重定向
最近在用Scrapy写爬虫,但是爬取有的网站时会出现307重定向的错误,使得无法爬取到正确网站,这往往是因为原网站采用了反爬虫机制导致的. 在StackOverFlow上有人提出了这个问题:scrap ...
- Fiddler抓包工具总结(转)
序章 Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,一些蛮实用隐藏的 ...
最新文章
- c语言定义字符类型变量的关键字,C语言数据类型
- CCIE PASSED
- SQL Server 执行计划
- element UI el-autocomplete 带输入建议的输入框
- HOG可视化 opencv
- 你真的了解JavaScript的比较运算符(==,!=,===,!===,=,=,,)吗?
- WebSocket客户端断开连接后,服务器端的处理机制
- AI云原生浅谈:好未来AI中台实践
- 比特币官方客户端钱包是用什么语言开发的_5种主流比特币客户端的开发选型...
- oracle如何快速查找,Oracle 如何快速查找和删除重复记录
- 数据库镜像怎么还原数据库_如何创建数据库镜像
- POJ1062 昂贵的聘礼(最短路径)
- 简单、易用的光盘封装工具-MKISO纪念版(V1.0.2.0)发布日志
- stc单片机c语言编程软件,stc isp官方下载-STC单片机ISP下载编程软件下载v6.85i 官方最新版-西西软件下载...
- CCS6.0新建DSP_2833x工程文件详解
- java if中的continue_java中break和continue源码解析
- 186、商城业务-检索服务-页面分页数据渲染
- 教你如何搭建自己的图床
- JVM进阶(八)——Stop The World(停顿类型STW)
- 如何打造一款工业级5G CPE+WiFi6路由器-5G工业网关解密