首页 » 资源分享 » PHP » 正文

如何解决跨域资源访问



有时候我们为了便于做静态资源分布式部署或其他考虑,会使用独立的域名做资源的访问地址或接口的域名地址(如res.caizhichao.cn、api.caizhichao.cn),但当访问这些不同域名的资源或请求这些不同域名的接口时,也许会遇见这样的报错:

已阻止跨源请求:同源策略禁止读取位于 http://xxxxx 的远程资源。(原因:CORS 头缺少 ‘Access-Control-Allow-Origin’)。
已阻止跨源请求:同源策略禁止读取位于 http://xxxxx 的远程资源。(原因:CORS 请求失败)。

这就是我们常说的跨域。

怎么解决呢,有两种方法。

第一种,配置服务器

1、Apache服务器跨域设置:
例如www.aaa.com里面的页面需要跨域请求 res.aaa.com 里面的资源;
那么需要设置res.aaa.com返回的HTML请求里面配置Access-Control-Allow-Origin Header。不要搞混了去配置www.aaa.com的域名。

可以配置具体请求的Header,或者在apache配置文件里面进行统一配置(所以使用set 而不是 add);即在节点或者节点下添加如下代码:
Header set Access-Control-Allow-Origin "http://www.aaa.com" //仅允许该域名请求
或者
Header set Access-Control-Allow-Origin "*" //允许任何域名请求

2、nginx跨域设置:
后续补充….

第二种,修改代码
以php为例,也可以直接在php的方法里直接写入代码:
header("Access-Control-Allow-Origin: *"); // 允许任意域名发起的跨域请求
详见《php后端代码设置Header头支持跨域