如果我通过浏览器的地址字段访问服务器,则服务器会成功响应。 但是,当我尝试从 send.js 脚本中访问它时:
var request = new XMLHttpRequest();
request.open( 'GET', "myserver.com", true );
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=UTF-8;");
request.onreadystatechange = function ()
{
document.write( "received response: " + request.response );
};
document.write( "sending request ..." );
request.send( 'login=billy&password=sunshines' );
通过浏览器在Mongoose本地网络服务器上通过 index.html 访问它:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Server send script TEST</title>
</head>
<body>
<script src="send.js"></script>
</body>
失败并显示错误:请求的资源上没有“Access-Control-Allow-Origin”标头。因此,不允许原点“http://192.168.0.101:8080”访问。
为什么当我通过浏览器的地址字段直接访问页面时,通过本地托管的脚本访问时,CORS策略有何不同?我是否遗漏了一些要求指定的字段?
答案 0 :(得分:2)
使用地址栏直接访问脚本时,不会发生跨源资源共享。您的浏览器导航到myserver.com
,因此对myserver.com
的任何请求都是同源的。
当您的浏览器位置为http://192.168.0.101:8080
时,对myserver.com
的请求为跨域,因为您的浏览器位置与您发出http请求的位置不同。
您必须在后端启用CORS或使用JSONP。