【问题标题】:Request is working with Postman but generated snippet does not请求正在使用 Postman,但生成的代码段没有
【发布时间】:2018-05-25 16:03:45
【问题描述】:

所以我试图通过 AJAX 在我的 JavaScript 中发送一个 GET 请求。问题是我可以在 Postman 中发送请求并且它工作正常。当我使用该功能生成 AJAX 代码并将其插入本地 index.html 时,请求似乎被阻止了。

var settings = {
    "async": true,
    "crossDomain": true,
    "url": "http://www.bibsonomy.org/api/posts?resourcetype=bookmark&group=ukp&format=json",
    "method": "GET",
    "headers": {
        "Authorization": "Basic key",
        "Cache-Control": "no-cache"
    }
}

$.ajax(settings).done(function (response) {
    console.log(response);
});

控制台输出:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource
 at https://www.bibsonomy.org/api/posts?resourcetype=bookmark&group=ukp&format=json. 
(Reason: CORS header ‘Access-Control-Allow-Origin’ missing).

我不知道为什么它不工作以及为什么 Postman 没有收到此错误。

【问题讨论】:

    标签: javascript ajax postman


    【解决方案1】:

    请在请求头中添加Access-Control-Allow-Origin: *

    【讨论】:

    • 我已经加了"Access-Control-Allow-Origin": "*"运气不好
    【解决方案2】:

    您应该尝试将其添加到您的设置中

    xhrFields: {
       withCredentials: true
    },
    crossDomain: true
    

    【讨论】:

      【解决方案3】:

      这必须从服务器端处理。仅当服务器添加一个允许来自localhost:port 的请求的标头时(如果您正在开发中), 或者你可以添加

      设置Access-Control-Allow-Origin: "*" 接受来自所有客户端的请求, 浏览器将能够成功完成请求。

      跨域验证是一种针对跨域攻击提供安全性的浏览器。浏览器向服务器发送一个预检(OPTIONS)请求以确保该请求是有效的,并且在成功返回时只会发送一个有效的请求。 因此,解决此问题的可靠方法是在 api 提供程序(服务器)中进行修复,以接受来自您的域/本地主机的请求。

      但是您可以仅针对您的浏览器进行解决,您可以查看此answer 以了解此类方法。

      【讨论】:

      • 谢谢,但很遗憾我无法影响提供者/服务器。
      猜你喜欢
      • 2021-06-20
      • 2020-08-02
      • 2017-03-22
      • 2020-04-25
      • 2019-11-04
      • 1970-01-01
      • 2019-11-11
      • 2019-11-25
      • 2023-03-21
      相关资源
      最近更新 更多