使用CORS(跨站资源共享Cross-Origin Resource Sharing) 来实现跨域访问

同源策略

如果两个页面拥有相同的协议(protocol),端口(如果指定),和主机,那么这两个页面就属于同一个源(origin)
下表给出了相对http://store.company.com/dir/page.html同源检测的示例:

URL	    结果	     原因
http://store.company.com/dir2/other.html	成功	 
http://store.company.com/dir/inner/another.html	成功	 
https://store.company.com/secure.html	失败	     协议不同
http://store.company.com:81/dir/etc.html	失败	     端口不同
http://news.company.com/dir/other.html	失败	    主机名不同

跨域问题

出于安全考虑,浏览器会限制脚本中发起的跨站请求。比如,使用 XMLHttpRequest 对象发起 HTTP 请求就必须遵守同源策略。
跨域并非浏览器限制了发起跨站请求,而是跨站请求可以正常发起,但是返回结果被浏览器拦截了。最好的例子是CSRF跨站攻击原理,请求是发送到了后端服务器无论是否跨域!
注意:有些浏览器不允许从HTTPS的域跨域访问HTTP,比如Chrome和Firefox,这些浏览器在请求还未发出的时候就会拦截请求,这是一个特例。

服务器端的配置

增加几个header就行,参见MDN:HTTP访问控制(CORS)

location ~ \.php(\/.*)*$
{
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Headers' 'X-Requested-With';
    略......
}

Access-Control-Allow-Origin
指定一个允许向该服务器提交请求的URI.对于一个不带有credentials的请求,可以指定为'*',表示允许来自所有域的请求.
举个栗子,允许来自 http://mozilla.com 的请求,你可以这样指定:

Access-Control-Allow-Origin: http://mozilla.com
posted @ 2016-10-03 18:27  jcuan  阅读(491)  评论(0编辑  收藏  举报