跨域

不同源的情况:

  • 不同的协议(http/https)

  • 不同的 host(不同的域名)

  • 不同的端口(:80/:8080)

前端跨域解决方案

  • nginx 反向代理

将客户端的请求转发到代理所对应的端口,让客户端以为这个请求是同源的。

Nginx

  • jsonp

核心思想是利用<script>标签的特性,即允许跨域请求JavaScript资源。

使用:https://example.com/data?callback=myCallback

在引入 script 脚本时加入指定的回调函数名称(myCallback),服务器响应时,将数据包裹在执行 myCallback 的语句中传回给客户端,当客户端执行这段代码时,就会调用客户端定义的回调函数,并将服务器端的数据作为参数传递给这个函数。

缺点:使用JSONP有安全风险,因为它从外部服务器加载和执行代码,可能会导致跨站脚本(XSS)攻击。因此,只应该从信任的源请求数据。

  • cdn-cors

通过配置跨域资源共享,可以在CDN服务器端设置相关的响应头,如果访问CDN资源时的请求携带了满足允许规则内的请求头,即可实现跨域资源的加载和访问。

其中 * 表示允许来自任何源的请求访问CDN上的资源。这在公共CDN提供的公开资源(如开源库、公共API等)中较为常见。

origin 请求标头 Origin 表示了请求的来源(协议、主机、端口)。例如,如果一个用户代理需要请求一个页面中包含的资源,或者执行脚本中的 HTTP 请求(fetch),那么该页面的来源(origin)就可能被包含在这次请求中。

从广义上讲,用户代理会在以下情况中添加 Origin 请求标头:

Last updated