嵌入式JavaScript中的CORS

时间:2014-06-27 06:43:59

标签: javascript cors

我打算为我们嵌入其他网站的Javascript代码添加安全性 - 例如:像分析代码一样。

用户复制4-5行代码并将其放在他的网站上。代码实际上下载了真实脚本作为下一步。

我建议使用CORS而不是当前的JSONP调用,因为我可以限制域名。

据我所知,只有在添加我的脚本的html页面需要添加访问域并且如果我为js文件添加访问域时,CORS才会起作用,它将不起作用。

最终js或html页面的CORS是否打算使用我的脚本?

编辑:

由于它让用户感到困惑,我让它变得更加简单。

域A中的HTML会添加来自域B的脚本,例如Google分析。我可以添加访问域:在渲染我的JS时,还是HTML应该在响应中添加访问域?

2 个答案:

答案 0 :(得分:0)

CORS的工作原理是让您的服务器输出包含允许域的Access-Control-Allow-Origin标头。向您的服务器发出ajax请求的站点不需要做任何特殊的事情来启用CORS,不需要配置。这些网站只是简单地发出正常的XHR请求,浏览器将在内部处理CORS。

您可以从服务器上的标头控制CORS访问。在CORS中,您还可以控制允许的HTTP谓词,例如POST或GET(Access-Control-Allow-Methods)或允许的请求标题(Access-Control-Allow-Headers)。

请注意,IE8不支持CORS XHR,Microsoft决定使用XDomainRequest创建自己的CORS实现。因此,如果调用您服务器的任何站点想要支持IE8,则需要使用XDomainRequest而不是XMLHttpRequest。在IE7或eariler中不支持CORS - 甚至不支持XDomainRequest。

答案 1 :(得分:0)

wiki对此问题有一个很好的解释:

CORS可用作JSONP模式的现代替代品。虽然JSONP仅支持GET请求方法,但CORS也支持其他类型的HTTP请求。使用CORS可让网络程序员使用常规XMLHttpRequest,这比JSONP支持更好的错误处理。另一方面,JSONP适用于早于CORS支持的旧浏览器。大多数现代Web浏览器都支持CORS。此外,虽然JSONP可能导致跨站点脚本(XSS)问题,但外部站点遭到入侵,CORS允许网站手动解析响应以确保安全。

  

据我所知,只有在添加我的脚本的html页面需要添加访问域时,CORS才会起作用

您可以通过以下方式访问所有域名:

Access-Control-Allow-Origin: *

现在CORS还有good support

P.S。 IE8-9有自己的XDomainRequest