首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >浏览器安全策略如何与XMLHttpRequest一起工作?

浏览器安全策略如何与XMLHttpRequest一起工作?
EN

Stack Overflow用户
提问于 2015-11-19 23:01:35
回答 1查看 50关注 0票数 1

我读到,浏览器安全策略背后的主要思想是,您不能从与页面本身所服务的域不同的域检索数据。但我不明白为什么我能这么做?

代码语言:javascript
复制
<!doctype html>
<html>
    <head>
        <title>Template</title>
        <meta charset="utf-8">
        <link rel="stylesheet" href="style.css">
        <script src="jscript.js"></script>
    </head>
    <body>
    </body>
</html>

window.onload = function() {
    var request = new XMLHttpRequest();
    var url = "http://mbigras.github.io/geolocation/data.json";
    request.open("GET", url);

    request.onload = function() {
        if (request.status == 200) {
            var object2 = JSON.parse(request.responseText);
            alert(object2.name + ", age " + object2.age);
        }
    }
    request.send(null);
};

因为当我使用index.html请求来自github的json数据时,这个页面不是从我家里的计算机(本地机器上的XMLHttpRequest )提供的吗?还是我误会了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-19 23:05:40

这就是所谓的跨来源政策。内容的主机(在本例中是github)可以将HTTP头发送回您的脚本,上面写着“嘿,允许您向我做跨源请求!”然后,您的web浏览器(符合相同的来源策略)将允许请求发生。

实际上,最终丢弃跨源请求的是您的浏览器(而不是github服务器)。即使在向不允许跨源请求的位置发出AJAX请求时,浏览器仍在执行请求(称为飞行前请求)。

在实际请求发出之前,浏览器会对远程服务器执行预运行请求,以检查是否允许执行跨源请求。你的浏览器对远程服务器说:“嘿,如果你在另一个域上,我可以向你提出请求吗?”如果运行在另一端的web服务器不使用跨源标头进行答复,则答案是“否”。

在使用您引用的github url的情况下,github的web服务器正在用跨源标题进行回复,因此您的浏览器会说:“太好了,谢谢!”并按照您的预期执行GET或POST请求。

服务器可能发送给客户端的跨源标头示例可以是:

代码语言:javascript
复制
Access-Control-Allow-Origin: http://bob.com
Access-Control-Allow-Methods: GET, POST, PUT
Content-Type: text/html; charset=utf-8

在本例中,服务器告诉客户机“允许来自bob.com的请求,只要它们是GET、POST或PUT请求”

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33815980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档