Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么某些API允许跨站点API调用,而其他API不允许_Javascript_Api - Fatal编程技术网

Javascript 为什么某些API允许跨站点API调用,而其他API不允许

Javascript 为什么某些API允许跨站点API调用,而其他API不允许,javascript,api,Javascript,Api,我一直在用JavaScript构建一个天气小部件 我使用angularjs($http方法:get)进行api调用 我使用下面的API调用获取天气信息没有问题(我的API密钥已删除) 但是当我想切换到另一个API(下面的URL)时,我得到了一个错误 无法加载XMLHttpRequest。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“” 这是因为第二个API使用HTTPS吗?但这毫无意义。为什么允许使用第一个api 这是因为第二个API使用

我一直在用JavaScript构建一个天气小部件

我使用angularjs($http方法:get)进行api调用

我使用下面的API调用获取天气信息没有问题(我的API密钥已删除)

但是当我想切换到另一个API(下面的URL)时,我得到了一个错误

无法加载XMLHttpRequest。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“”

这是因为第二个API使用HTTPS吗?但这毫无意义。为什么允许使用第一个api

这是因为第二个API使用HTTPS吗

不,这是因为第一个API包含一个“Access Control Allow Origin”标题,用于授予您权限

为什么允许使用第一个api


因为第一个API的供应商明确地将其提供给托管在其他网站上的客户端JavaScript。

由于@Quentin提到了我在下面找到的Access Control Allow Origin头,这就是为什么一个API被阻止而另一个API被允许的原因

我的第一个(成功的)API发送了以下标题及其响应:

Access-Control-Allow-Origin:*
第二个(失败的)API没有发送这个头,这就是为什么浏览器拒绝在我的域上显示响应。

关于访问控制允许源标题

Web资源(如API)将此标头与其响应一起发送,以避免或限制其他域以跨站点方式使用其资源

e、 g。 如果域A.bc将下面的标题添加到其资源中

Access-Control-Allow-Origin: http://foo.example
那么只有foo.example才能以跨站点的方式访问资源

如果您想阅读更多内容,那么此标题将位于HTTP访问控制(CORS)
下,详细说明如下


这个SOF答案还有一个很好的解释:

那么这是API提供者端的设置吗?@Menol-Well。对明显地正如我所说的——第一个API包含了一个“访问控制允许源代码”标题——如果我说它来自其他任何地方,那么它几乎不可能来自其他任何地方。@Quentin easy language plz。很难得到评论。“是”不是很容易?你认为攻击者如何让服务器(他们不控制)告诉浏览器(他们不控制)攻击者的JavaScript读取网站提供给浏览器的数据是安全的?