【问题标题】:Why do browsers restrict cross domain AJAX requests but not cross-domain embedded files/ scripts?为什么浏览器限制跨域 AJAX 请求而不限制跨域嵌入文件/脚本?
【发布时间】:2014-10-19 09:10:28
【问题描述】:

为什么浏览器不允许跨域 AJAX 请求,而 JavaScript/CSS 文件却可以从其他域中毫无问题地检索?

我知道有办法解决这个问题,但我想知道是什么因素导致浏览器阻止了跨域 AJAX 调用。

如果可以通过<script><link> 标签访问任何JavaScript 或CSS 文件,为什么不能通过AJAX 调用访问相同的内容?为什么允许跨域链接/脚本标签而不是 AJAX?

【问题讨论】:

    标签: javascript ajax cross-domain-policy


    【解决方案1】:

    这是为了用户安全:

    假设您已登录 Facebook 并在另一个浏览器选项卡中访问恶意网站。如果没有同源策略,该网站上的 JavaScript 可以对您的 Facebook 帐户执行您被允许执行的任何操作。例如阅读私人消息、发布状态更新、在提交表单之前输入密码后分析 HTML DOM 树。

    来自here

    更新:

    1- 当您使用 scriptlinkimg 标签定位文件时,您正在从其服务器下载文件,然后其操作仅限于您的 域上下文(访问您的 DOM,操作您的 DOM ...)。

    2- 但是当您想对另一个网站进行 ajax 调用时,您可能有能力对该网站进行更改。因此,为避免这种风险,浏览器会检查您与网站的请求并获得其响应。如果是no,则浏览器拒绝您的请求,如果是yes,则它是passes您对服务器的请求。另一方面,它是允许或拒绝跨域请求的目标网站.

    3- 不仅仅是Ajax,还有webSocket 甚至Flash

    【讨论】:

    • " 例如阅读私人信息,发布状态更新," - 这是 Facebook 身份验证应注意的部分。来自 facebook 域的任何 ajax 调用也需要身份验证。我的问题是是否可以通过脚本或链接 html 标记访问的任何 javascript 文件或 css 为什么无法通过 ajax 调用访问?为什么允许跨域链接/脚本标签而不是ajax?
    猜你喜欢
    • 2011-09-07
    • 1970-01-01
    • 2011-01-02
    • 2013-12-29
    • 2012-10-18
    • 2013-05-03
    • 2012-08-27
    • 1970-01-01
    • 2013-05-14
    相关资源
    最近更新 更多