【问题标题】:CORS ajax request clarificationCORS ajax 请求说明
【发布时间】:2015-05-06 08:03:51
【问题描述】:

所以我在云服务上部署了一个 API。出于测试目的,我使用各种 HTTP 客户端(如 PostmanPawRestClient)向我的 API 发送请求,它们都可以正常工作。但是,当我使用 jQueryreqwset 或任何其他方式从浏览器发送 AJAX 请求时,我收到以下错误:

XMLHttpRequest 无法加载 {https://url/to/my/api/on/google-app-engine}。不 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:8000” 访问

那么为什么 HTTP 客户端可以工作,但浏览器会抛出错误?如果我在服务器上启用 CORS,会有任何风险吗?

【问题讨论】:

    标签: javascript jquery ajax cors


    【解决方案1】:

    这是因为网络浏览器的“同源”政策。这可以防止一个网站上的脚本代表您在另一个网站上发出请求。

    只要您信任允许的客户端,启用 CORS 是安全的,如果客户端位于本地主机上,情况可能并非如此(因为您通常无法控制本地主机)。

    特殊情况:如果客户端无法对服务器的域执行更改,那么通常启用 CORS 是安全的。

    【讨论】:

    • 那么当我通过 Postman 发送请求时,我是从同源发送的吗?不,它在我的本地计算机上。除非我不知道浏览器和非浏览器客户端之间存在差异。
    • 我不熟悉 Postman,但大多数客户不会自动代表您发送识别 cookie;网络浏览器可以。因此,“哑”客户端没有风险,但 Web 浏览器存在重大安全风险,因此它们的同源策略。
    • 感谢更新,但 AFAIK,必须在服务器上启用 CORS。如果我错了,请纠正我。
    • 是的,完全正确。但它必须指定允许哪些来源,即允许从哪里发出请求。如果服务器不是只读的,那么您只允许您信任的来源至关重要。如果服务器是只读的并且没有任何类型的凭据,那么就没有特别的安全问题。
    猜你喜欢
    • 2015-12-15
    • 2013-12-24
    • 2019-04-14
    • 2015-03-01
    • 2016-04-29
    • 2013-12-06
    • 2012-04-20
    • 2013-10-16
    • 2017-05-05
    相关资源
    最近更新 更多