跨域是指在浏览器的同源策略下导致前端和接口部署在不同域下导致无法直接访问的问题。
针对跨域有多种解决方案常见的有:
JSNOP:
可参考Jquery实现,缺点是需要后端支持;
Access-Control-Allow-Domain:
不需要前端处理,后端通过配置响应头信息即可实现;
<system.webServer> <httpProtocol> <!--跨域处理头部信息--> <customHeaders> <remove name="X-Powered-By" /> <add name="Access-Control-Allow-Headers" value="X-XSRF-TOKEN,Authorization" /> <add name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS" /> <add name="Access-Control-Allow-Domain" value="*" /> </customHeaders> </httpProtocol> </system.webServer>
如果是经典模式,<system.webServer>改为system.web即可
Access-Control-Allow-Headers:允许请求携带的自定义头
Access-Control-Allow-Methods:允许请求的方法
Access-Control-Allow-Domain:允许访问域名,其中*代表所有,部分会不支持*号,建议返回指定站点的域名。
通过配置的方式容易暴漏自己的所有对接域,不方便,每次配置后都需要重启站点。.NET中我们可以通过实现IHttpModul(https://www.cnblogs.com/wlhai/articles/10917191.html),注册应用请求结束是事件,实现自定义响应允许域信息。
前端是请求接口时,如果是不同域的会先发送一个OPTIONS请求检查应用是否允许本域访问,允许后才会继续发送一个正式的请求。