CORS:如果从浏览器或脚本中访问URL,则策略不同

时间:2016-09-21 17:05:04

标签: javascript http get cors

如果我通过浏览器的地址字段访问服务器,则服务器会成功响应。 但是,当我尝试从 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策略有何不同?我是否遗漏了一些要求指定的字段?

1 个答案:

答案 0 :(得分:2)

使用地址栏直接访问脚本时,不会发生跨源资源共享。您的浏览器导航到myserver.com,因此对myserver.com的任何请求都是同源的。

当您的浏览器位置为http://192.168.0.101:8080时,对myserver.com的请求为跨域,因为您的浏览器位置与您发出http请求的位置不同。

您必须在后端启用CORS或使用JSONP。