2017-04-01 19 views
0

我正在编写一个React JS应用程序,从本地主机:8080运行,然后我自己的网站,使AJAX调用the API that openweathermap.org provides为什么向提供API的其他网站的AJAX调用不违反同源策略?

然后它让我想知道,对于localhost:8080和我的网站,都说www.mysite.com,AJAX调用从http://api.openweathermap.org/data/2.5/forecast获取数据违反了同源策略吗?

如果样品实际上是GitHub的页面上托管,那么AJAX调用实际上不能办理,因为GitHub的页面,现在使用https,而AJAX调用API使用http,不能https,也不会获取数据。

P.S.很确定AJAX不是通过JSONP完成的,因为我在控制台中看到请求已经发出,而响应只是纯JSON数据。 (所以没有使用脚本标记方法)。

回答

1

http://api.openweathermap.org/data/2.5/forecast发送Access-Control-Allow-*标题:

$ curl -I http://api.openweathermap.org/data/2.5/forecast 
HTTP/1.1 401 Unauthorized 
Server: openresty 
Date: Sat, 01 Apr 2017 02:11:30 GMT 
Content-Type: application/json; charset=utf-8 
Content-Length: 107 
Connection: keep-alive 
X-Cache-Key: /data/2.5/forecast? 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Credentials: true 
Access-Control-Allow-Methods: GET, POST 

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS解释这些响应头有什么样的影响的浏览器,但它的要点是,如果JavaScript的浏览器中运行代码,您的客户端发送一个跨域请求,并且返回的响应包括Access-Control-Allow-Origin响应标头,则浏览器会将该响应公开给您的代码。但是,如果响应中不包含Access-Control-Allow-Origin响应头,则浏览器将不允许您的代码访问响应。

+0

有趣......我想很多人都知道同源策略,但不是这个“Access-Control-Allow-Origin”响应标题......它是否有名字......它可能被称为 –

+0

“CORS”......维基百科说:“2009年3月草案更名为”跨源资源共享“,并于2014年1月被接受为W3C推荐标准。”我想知道它在哪一年广泛使用... –

+0

是的,“CORS”是所有这一切背后的协议的名称。就当它变得广泛使用时,自2009年以来基本CORS支持已经在大多数浏览器引擎中,但IE在2012年出货并支持基本CORS之前并不支持它。自2013年IE11首次发货以来,所有浏览器都支持全面的CORS支持。 http://caniuse.com/#search=cors – sideshowbarker

相关问题