当前位置: 首页 > 面试题库 >

指定标头时,jQuery AJAX无法工作(发出了OPTIONS飞行前请求)

农雅畅
2023-03-14
问题内容

AJAX请求工作正常,但是当我通过beforeSend或标头添加标头时,会发出OPTIONS预检请求,而GET请求将中止。

  Code: $.ajax({
        type: "GET",
        crossDomain: true,
         beforeSend: function (xhr)
         {
         xhr.setRequestHeader("session", $auth);
         },
        url: $url,
        success: function (data) {
            $('#something').html(data);
        },
        error: function (request, error) {
            $('#something').html("<p>Error getting values</p>");
        }
    });

指定了类似的没有 头的AJAX请求(在我添加/修改头的那一刻,进行了OPTIONS调用)

Request GET /api/something?filter=1 HTTP/1.1
Referer http://app.xyz.dj/dashboard
Accept  application/json, text/javascript, */*; q=0.01
Accept-Language en-US
Origin  http://app.xyz.dj
Accept-Encoding gzip, deflate
User-Agent  Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MASMJS; rv:11.0) like Gecko
Host    162.243.13.172:8080
DNT 1
Connection  Keep-Alive
Cache-Control   no-cache

相似的服务器响应头(用于GET请求)

Response    HTTP/1.1 200 OK
Server  Apache-Coyote/1.1
Access-Control-Allow-Origin *
Access-Control-Allow-Methods    GET, POST, DELETE, PUT, OPTIONS, HEAD
Access-Control-Allow-Headers    Content-Type, Accept, X-Requested-With
Access-Control-Allow-Credentials    true
Content-Type    application/json
Transfer-Encoding   chunked
Date    Thu, 09 Jan 2014 14:43:07 GMT

我做错了什么?


问题答案:

解决了。感谢@JasonP的指针。改变服务器 响应头

访问控制允许标题:*

到特定的

访问控制允许标题:内容类型,接受,X请求使用,会话

现在就可以了!



 类似资料:
  • 我不清楚CORS头(Access-Control-Allow-Origin等)是否应该只出现在飞行前请求(OPTIONS方法)中,还是也出现在资源的头中(我试图使用XHR发布)

  • 问题内容: 我开发了一个PhoneGap应用程序,现在将其转换为移动网站。除了一处小故障,一切都可以顺利进行。我通过POST请求使用了某个第三方API,该API在该应用中可以正常运行,但在移动网站版本中却无法运行。 仔细查看后,似乎AngularJS(我想实际上是浏览器)正在首先发送OPTIONS请求。今天,我对CORS有了很多了解,但似乎无法弄清楚如何完全禁用它。我没有访问该API的权限(因此无

  • 我让这个项目在Angular 8中运行,并使用飞行前和实际的api调用api。而且我们在它的网络安全上有一个问题,因为飞行前的选项没有标题严格的传输安全性:max age=31536000;includeSubDomains,而实际的GET api有一个。 您是否知道如何以及在哪里添加严格运输安全:max-age=31536000;包括预飞行和实际请求下的子域,以便两个请求将具有相同的标头?

  • 在调试我遇到的CORS问题时,我发现了以下行为。Chrome发出以下选项预检请求(由Chrome本身在CURL中重写): 以下情况下服务器对此请求的响应: 是响应“无效CORS请求”的主体。如果我重复该请求,删除标头“Access Control request Method”(仅该标头),则OPTIONS请求将成功,并得到以下响应: 然而,有问题的头是CORS规范标准头,所以它不应该阻止请求成功

  • 我正试图通过构建一个简单的spotify应用程序来学习angular 2。 但不知何故,我被困在身份验证过程中。 我的问题是,当我尝试发送标题设置为https://accounts.spotify.com/api/token的超文本传输协议帖子时 我在飞行前收到“对飞行前请求的响应未通过访问控制检查:没有‘访问控制允许来源’……” 但当我从返回中删除标题时 飞行前检查似乎已被绕过,但我得到一个媒体

  • 我可以通过在API类中添加方法(在相同的)来解决这一问题,但我希望不必对所有方法都这样做。 在处理一个选项请求时,如何找出实际的(Get/Post)资源方法?