fetch http 请求被转成 https ?

问题

fetch 请求一个 http 协议的接口,实际请求出去的接口是 https 协议的?

解决

有两种思路:

  • fetch 请求有没有被重写;
  • 其他配置影响,让原生 api 出现异常;

经检查,fetch 请求没有被重写,所以就着重看下思路二。经过不断的查找, 发现一个meta 标签:

原来是因为这个才把 http 自动转化为 https。

内容安全策略 CSP

CSP 通过定义 Content-Security-Policy HTTP 标头,允许创建信任内容的来源白名单,并指示浏览器仅执行或渲染来自这些来源的资源,而不要盲目地信任服务器提供的所有内容。即使攻击者发现漏洞并能够注入脚本,由于此脚本不符合此白名单,也不会执行该脚本。

作用

可显著降低现代浏览器中 XSS 攻击的风险和影响的防护功能。

CSP指令

尽管脚本资源是最显而易见的安全风险,但 CSP 提供了一个丰富的策略指令集,让开发者可以对允许页面加载的资源进行相当精细的控制。其余指令有:

  • script-src

    用于控制脚本对于某个特定页面所享有的一组权限。

  • base-uri

    用于限制可在页面的 元素中显示的网址。

  • child-src

    用于列出适用于工作线程和嵌入的帧内容的网址。例如: child-src https://youtube.com 将启用来自 YouTube(而非其他来源)的嵌入视频。 使用此指令替代已弃用的 frame-src 指令。

  • connect-src

    用于限制可(通过 XHR、WebSockets 和 EventSource)连接的来源。

  • font-src

    用于指定可提供网页字体的来源。Google 的网页字体可通过 font-src https://themes.googleusercontent.com 启用。

  • form-action

    用于列出可从

    标记提交的有效端点。

  • frame-ancestors

    用于指定可嵌入当前页面的来源。此指令适用于