引子

近日,公司业务几个站点出现:页面请求非https域接口数据出现跨域问题,导致无法登陆乃至是无法使用的情况。
进过调查发现,前端进行跨域请求数据时,OPTIONS请求的Response头中有

  1. Non-Authoritative-Reason: HSTS

原因

查阅相关资料,当你访问过https的某个域名后,Chrome浏览器就会认为该域名一直支持https,会将将该域名加入本地的HSTS域名列表,在后续的请求中,将访问强制跳转去https。

解决办法

方案一:

浏览器地址栏输入:

  1. # 谷歌浏览器
  2. chrome://net-internals/#hsts
  3. # 微软Edge浏览器
  4. edge://net-internals/#hsts

回车访问,将制定的域名输入到 Delete domain security policies 栏目下的输入框,点击 Delete按 钮,删除该域名。使其不启用 HSTS。再访问即可。

方案二:

在NGINX上将配置:

  1. max-age=63072000; includeSubDomains

改为:

  1. max-age=1; includeSubDomains

再访问,待这个Header在浏览器中过期,就可以正常访问非https网站了。

附录

HSTS

HSTS指的是HTTP Strict Transport Security,可以理解为服务器告诉浏览器这个网站支持HTTPS,以后的访问都给我强制转到HTTPS上去,不准使用HTTP。