刚才在做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重定向相关推荐

  1. SAP gateway的307重定向

    gateway里的逻辑:根据进来的HTTP请求解析service name和resource path: 如果lv_resource_path为空,就进入140行IF之后的分支: 这里抛一个异常:/i ...

  2. 307跳转php,http 307重定向

    刚才在做hexo页面优化,发现了本地测试返回http 307.以前没见过这个响应码,于是做一下调研. 相关文章: http 307 在rfc规范中,http 307 Temporary Redirec ...

  3. 服务器响应307,ios - 调用307重定向服务器时的401响应 - 堆栈内存溢出

    我已经构建了一个iOS应用程序来调用服务器,该服务器仅接受来自列入白名单的IP的呼叫(客户端的安全要求). 他们现在设置了307个临时重定向. 我已经将原始的根URL更改为新的重定向地址,现在出现40 ...

  4. 重定向和转发的区别+使用情景

    重定向和转发的区别: // 重定向 response.sendRedirect("xxx.jsp或者servlet"); // 转发 request.getRequestDispa ...

  5. Javaweb 请求转发和请求重定向

    Javaweb 请求转发和请求重定向 1.请求转发和请求重定向区别 2.服务端内部转发案例 3.客户端重定向案例 1.请求转发和请求重定向区别 请求转发和请求重定向主要区别,包含以下 5 点: 定义不 ...

  6. http协议状态码3xx系列(301,302,303,304,305,306,307),小白易通

    3xx 重定向 3xx系列是http响应包中重要的状态标准,表示重定向意义的一类状态码,这些转状态码将指导客户端执行某些行为 都是属于重定向,但不同的值,差异却不小,具体差异如下 301 永久重定向 ...

  7. Fiddler基础教程 - 3. 抓包 | 设置断点 | 捕获设置 | 重定向AutoResponder | 过滤Filters

    本来想自己写的,结果翻到一系列的博客,发现有前辈总结的太好了,转载过来,当知识点查询一下.外加自己总结的一些经验,我总结的放在了最后面. 原地址:https://www.cnblogs.com/sjl ...

  8. Scrapy307重定向

    最近在用Scrapy写爬虫,但是爬取有的网站时会出现307重定向的错误,使得无法爬取到正确网站,这往往是因为原网站采用了反爬虫机制导致的. 在StackOverFlow上有人提出了这个问题:scrap ...

  9. Fiddler抓包工具总结(转)

    序章 Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,一些蛮实用隐藏的 ...

最新文章

  1. c语言定义字符类型变量的关键字,C语言数据类型
  2. CCIE PASSED
  3. SQL Server 执行计划
  4. element UI el-autocomplete 带输入建议的输入框
  5. HOG可视化 opencv
  6. 你真的了解JavaScript的比较运算符(==,!=,===,!===,=,=,,)吗?
  7. WebSocket客户端断开连接后,服务器端的处理机制
  8. AI云原生浅谈:好未来AI中台实践
  9. 比特币官方客户端钱包是用什么语言开发的_5种主流比特币客户端的开发选型...
  10. oracle如何快速查找,Oracle 如何快速查找和删除重复记录
  11. 数据库镜像怎么还原数据库_如何创建数据库镜像
  12. POJ1062 昂贵的聘礼(最短路径)
  13. 简单、易用的光盘封装工具-MKISO纪念版(V1.0.2.0)发布日志
  14. stc单片机c语言编程软件,stc isp官方下载-STC单片机ISP下载编程软件下载v6.85i 官方最新版-西西软件下载...
  15. CCS6.0新建DSP_2833x工程文件详解
  16. java if中的continue_java中break和continue源码解析
  17. 186、商城业务-检索服务-页面分页数据渲染
  18. 教你如何搭建自己的图床
  19. JVM进阶(八)——Stop The World(停顿类型STW)
  20. 如何打造一款工业级5G CPE+WiFi6路由器-5G工业网关解密

热门文章

  1. UDP通信,看我如何一步一步攻克面试官
  2. 基于百度AI实现的语音识别搜索文件
  3. 驱动精灵 v9.61 去广告最终版绿色清爽单文件
  4. linux下硬件检测工具,Linux硬件检测工具
  5. 解决jupyter中matplotlib中文乱码问题
  6. 怎么把做好的网页用deramweaver传上互联网 空间和域名怎么申请
  7. 项目规范,介绍,规划与搭建,模块化开发,网站favicon,网站TDK
  8. Windows安装VMware(Linux系统)
  9. Jenkins笔记02-Jenkins安装和持续集成环境配置
  10. 同时删除Excel表格中多行隔行空白行