gpt4 book ai didi

javascript - 使用 XMLHttpRequest 时未启用 COR?

转载 作者:行者123 更新时间:2023-11-29 19:29:27 25 4
gpt4 key购买 nike

我花了几个小时尝试访问来自不同域的资源。

http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/在其他 SO 帖子中引用的内容指出,只需在支持 CORS 的浏览器中使用 XMLHttpRequest,就应该启用 CORS 策略。但是我仍然得到跨源请求被阻止:同源策略不允许读取 https://www.nczonline.net/上的远程资源。这可以通过将资源移动到同一域或启用 CORS 来解决。

根据 http://caniuse.com/#feat=cors 在 Firefox 34 中使用它时应该足够了。

我正在尝试来自 http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/ 的一个简单示例

<script type="text/javascript">
function log(msg){
var output = $('#output');
output.text(output.text() + " | " + msg);
console.log(msg);
}

function createCORSRequest(method, url){
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr){
xhr.open(method, url, true);

log("'withCredentials' exist in xhr");
} else if (typeof XDomainRequest != "undefined"){
xhr = new XDomainRequest();
xhr.open(method, url);

log("XDomainRequest is being used");
} else {
xhr = null;

log("xhr is null");
}
return xhr;
}

function main(){
log("Attempting to make CORS request");

var request = createCORSRequest("get", "https://www.nczonline.net/");
if (request){
request.onload = function(){
log("LOADED!");
};

request.send();
}
}

$(window).load(function(){
main();
});
</script>

我得到以下输出:

正在尝试发出 CORS 请求
'withCredentials' 存在于 xhr 中
跨源请求被阻止:同源策略不允许在 https://www.nczonline.net/读取远程资源。这可以通过将资源移动到同一域或启用 CORS 来解决。

在 fiddle 上尝试 https://jsfiddle.net/zf8ydb9v/给出相同的结果。除了使用 XMLHttpRequest 之外,是否还有其他地方需要打开才能使用 CORS b?

最佳答案

same origin policy (防止发出 CORS 请求)是为了的安全,而不是服务器的安全:它防止恶意脚本使用您的 cookie 访问其他服务器上的数据。因此,如果您愿意,您仍然可以在您的浏览器上禁用它,风险自负。

在 Chrome/Chromium 中,如果你想禁用同源策略,你可以使用 --disable-web-security 选项启动它:

chromium-browser --disable-web-security

无论如何,如果您希望它为您的用户工作,如果他们没有在浏览器中禁用此安全检查(如果不是为了测试,不鼓励这样做),他们将无法发出 CORS 请求。

如其他答案中所述,如果某些服务器认为这对用户有用且无害,则某些服务器会故意允许此类请求,并且他们可以使用访问控制 header 来做到这一点。

此外,如果您仍想找到一种方法为用户提供此类功能,您可以制作一个 Chrome 扩展程序,which is not bound to the same origin policy .

一个常见的解决方案是在服务器端进行跨源请求,将结果返回给您的应用程序。你应该小心编码:将 url 传递给服务器很容易引起服务器端软件的安全问题。但是如果你每次都必须获取相同的 url,你可以在服务器端对其进行硬编码,在 PHP 中看起来像这样:

<?php
echo file_get_contents("http://your_cross_request/");
?>

然后向该页面(将来自同一来源)发出 ajax 请求将返回远程 url 的内容。

关于javascript - 使用 XMLHttpRequest 时未启用 COR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28868869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com