我打算为我们嵌入其他网站的Javascript代码添加安全性 - 例如:像分析代码一样。
用户复制4-5行代码并将其放在他的网站上。代码实际上下载了真实脚本作为下一步。
我建议使用CORS而不是当前的JSONP调用,因为我可以限制域名。
据我所知,只有在添加我的脚本的html页面需要添加访问域并且如果我为js文件添加访问域时,CORS才会起作用,它将不起作用。
最终js或html页面的CORS是否打算使用我的脚本?
编辑:
由于它让用户感到困惑,我让它变得更加简单。
域A中的HTML会添加来自域B的脚本,例如Google分析。我可以添加访问域:在渲染我的JS时,还是HTML应该在响应中添加访问域?
答案 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
。