跨域
不同源的情况:
不同的协议(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