chrome发起跨域ajax请求遇到 Origin null is not allowed by Access-Control-Allow-Origin 一解

在Chrome浏览器中,如果想通过AJAX请求不同域中的资源,很可能就会遇到 “Origin null is not allowed by Access-Control-Allow-Origin” 的错误。

这是因为在新版本浏览器中安全策略引起。简单的说,如果XMLHttpRequest 请求的URL和当前页面不同一个域中时,浏览器会检测响应http header中有没有 Access-Control-Allow-Origin项,如果此项值为空或者与当前页面的域不匹配时,就会报此错误。

1.解法

W3C标准中有个叫Cross Origin Resource Sharing (CORS)的东东用来解决此问题。

简单的说在目标资源返回的http头中需要包含有“Access-Control-Allow-Origin”项,并且其值格需要能匹配请求源页面域。

如在 http://a.com/default.html 页面中通过 ajax 获取 http://b.com/demo.aspx 页面的内容,那么响应http header中Access-Control-Allow-Origin就必须能匹配  http://a.com,否则就会出现以上错误。

添加此 http header的方法有几种:

1.1 通过网站程序设置

如在asp.net中

    protected void Page_Load(object sender, EventArgs e)
    {
        this.Response.Headers.Add("Access-Control-Allow-Origin", "http://a.com");
    }

1.2 在 http server 中设置

如在IIS6,7中,右击网站属性,选择“Http头”--“自定义Http头”--添加--

Http头名: Access-Control-Allow-Origin 

Http头值:*

1.3 反向代理服务器中设置

如果目标网站使用有nginx之类的反向代理,可以使用 set-header指令设置:

add_header Access-Control-Allow-Origin http://a.com;

这三种方法都可以让a.com网站的页面能通过ajax获取 b.com网站上的内容。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值