鉴于编写跨域获取数据的服务器端代理的简单性,我不知道阻止客户端 AJAX 跨域进行调用的最初意图是什么。我不是在要求猜测,我是在寻找语言设计者(或与他们关系密切的人)的文档,以了解他们认为自己在做什么,而不是仅仅给开发人员带来轻微的不便。
TIA
鉴于编写跨域获取数据的服务器端代理的简单性,我不知道阻止客户端 AJAX 跨域进行调用的最初意图是什么。我不是在要求猜测,我是在寻找语言设计者(或与他们关系密切的人)的文档,以了解他们认为自己在做什么,而不是仅仅给开发人员带来轻微的不便。
TIA
这是为了防止浏览器充当反向代理。假设您正在办公室的 PC 上浏览http://www.evil.com,并假设在该办公室存在一个包含敏感信息的内部网http://intranet.company.com,只能从本地网络访问. 如果跨域策略不存在,www.evil.com 可以向http://intranet.company.com发出 ajax 请求,使用您的浏览器作为反向代理,并将该信息与另一个发送到 www.evil.com阿贾克斯请求。
我猜这是限制的原因之一。
此限制的最重要原因是安全问题:JSON 请求是否应该让浏览器服务并接受 cookie 或安全凭证以及对另一个域的请求?这与服务器端代理无关,因为它无法直接访问客户端环境。有一个关于安全净化 JSON 特定请求方法的提案,但它还没有在任何地方实现。
如果您是 myblog.com 的作者并且您对 facebook.com 进行了 XHR,那么该请求是否应该发送您的 facebook cookie 凭据?不,这意味着您可以从您的博客请求用户的私人 Facebook 信息。
如果您创建代理服务来执行此操作,则您的代理无法访问 facebook cookie。
您可能还会质疑为什么 JSONP 可以。原因是您正在加载一个不是您编写的脚本,因此除非 facebook 的脚本决定从他们的 JS 代码中向您发送信息,否则您将无法访问它
直接访问和代理之间的区别在于 cookie 和其他安全相关的识别/验证信息,它们绝对限于一个来源。
有了这些,您的浏览器可以访问敏感数据。您的代理不会,因为它不知道用户的登录数据。
因此,代理仅适用于公共数据;和CORS一样。
我知道您在寻求专家的答案,我只是一个新手,这就是我对为什么服务器端代理不是正确的最终解决方案的看法:
document.domain
并用附带问题修改他的页面。对我来说最重要的是:
但是,重新阅读您的问题后,我想我仍然没有回答,那么为什么要使用 AJAX 安全性?,我再次认为,答案是:
因为您不希望您访问的任何网页能够从您的桌面呼叫任何计算机或服务器到您办公室的 Intranet