跨域的解决方法
后台解决方法:
header(‘Access-Control-Allow-Origin:*‘); // header可以允许特定的域名访问请求
jsonp也支持跨域,如何获取返回的数据:
web页面调用js文件则不受跨域的影响
凡是拥有“src”这个属性的标签都拥有跨域的能力,比如script、img、iframe
框架中的解决方法:
vue-cli中axios有跨域代理设置(即使服务器没有设置header,也可以跨域)
devServer: {
//proxy: ‘http://localhost:80‘
proxy: ‘http://www.wenxuesucai.com:80‘
},
反向代理:
例如,在Nginx中设置反向代理来解决跨域问题。通过配置Nginx,可以将对某个域名的请求转发到实际的服务器地址,从而实现跨域访问34。
代理:
在服务端设置代理,让客户端请求代理服务器,再由代理服务器向目标服务器发送请求,最后将结果返回给客户端。这种方式可以有效地绕过浏览器的同源策略限制2。
网关中解决:
在网关层(如Spring Cloud Gateway)中解决跨域问题。通过配置网关的跨域策略,可以统一处理跨域请求,而无需在每个服务中单独设置
postMessage:
在浏览器中,通过window.postMessage()方法,可以在不同的窗口之间传递数据,从而实现跨域通信2。
客户端电脑的解决方法(适用于调试):
直接配置本地电脑的hosts文件就可以,将数据接口的域名和本地配置的域名保持一致
C:WindowsSystem32driversetchosts
hosts:
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a ‘#‘ symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
#
127.0.0.1 localhost
#
::1 localhost
127.0.0.1 a.com
127.0.0.1 b.com
127.0.0.1 c.com
127.0.0.1 test.payfu.store
浏览器自带的方法:
谷歌的不安全模式页支持跨域
给谷歌浏览器添加跨域插件,cors
更多工具 -> 扩展程序 -> 打开开发者模式 -> 点击“扩展程序”的图标,打开chrome网上应用店
同源政策:导致了跨域的产生
同源策略是一个重要的安全策略,它用于限制一个origin的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介。
同源:协议、域名、接口同时相同
js跨域是指通过js在不同的域之间进行数据传输或通信。只要协议、域名、端口有任何一个不同,都被当作是不同的域
跨域是因为后台接口文件和web前端文件不在同一个域名下,浏览器拦截了后台发送的数据
跨域的案例:
基于同一父域的子域之间,如:a.c.com和b.c.com
基于不同的父域之间,如:www.a.com和www.b.com
端口的不同,如:www.a.com:8080和www.a.com:8088
协议不同,如:http://www.a.com和https://www.a.com