欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JS 跨域请求

程序员文章站 2022-06-07 08:57:33
...

 

JS 跨域请求

【什么是跨域】

当浏览器请求的目标地址(接口)与请求发出地的 ip 、端口、协议不同时,请求将会出错。

例如:“No 'Access-Control-Allow-Origin' header is present on the requested resource”;

如果只在前台做了跨域处理,那么浏览器可能提示 “Uncaught SyntaxError: Unexpected token :”错误。

 

【为什么有跨域限制】

为了防止CSRF攻击。【知乎解释

 

【常见的解决方法】

1. jsonp 方式

        前台:使用 jQuery 发送 Ajax 请求时加上 jsonp 字段,该字段对应的值为后台返回的回调函数的名称,这个名称需要前后台约定好,比如 jsonp:"callback"。

        后台:返回数据时,使用回调函数名称加括号包裹原来需要返回的数据。比如,返回的数据为 "success" 字符串,那么最终返回的结果为 “callback(success)"。

2. 服务器代理

        服务器后台请求不存在跨域问题,可以通过前台请求“同域”后台的接口,在接口中再调用需要请求的链接。

3. 跨域资源共享(Cross-origin resource sharing)

        前台:将 xhr (XMLHttpRequst) 属性withCredentials为true。

        后台:在 response headers 中设置 Access-Control-Allow-Origin,其值为允许跨域访问的 ip 和端口。比如:“http://127.0.0.1:80”; 同时设置 Access-Control-Allow-Credentials 为 true,这样允许把 cookie 携带至服务器。

4. 前台设置 domain.name 等等......解决方案还有很多

 

 

        此次遇到的跨域问题是通过服务器代理解决的。因为需要调用的接口是属于公司的公共服务接口,而多数跨域解决方法需要前后台同时修改。考虑到公共接口做特殊修改存在风险,因此这里通过开发后台接口,在接口中调用前台所需调用的地址,再将数据以 json 形式返回。