首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向ajax请求添加标头失败

向ajax请求添加标头失败
EN

Stack Overflow用户
提问于 2022-03-24 21:30:37
回答 1查看 246关注 0票数 0

这似乎非常简单,但我无法将额外的HTTP头添加到我试图发出的请求中。我通过浏览器开发工具以及BurpSuite观看过。我使用的是JSONP,因为这是一个跨站点调用,但这不重要。我不知所措,想找人指点。

我需要在我从第三方Rest发出的请求的标题中添加一个令牌/值来进行身份验证。为了调试目的,我已经将代码剥离到一个示例页面中。下面是我使用的示例:

代码语言:javascript
运行
复制
<!DOCTYPE html>
<html>
  <head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
  <script>
    function getData() {
      $.ajax({
        type: "GET",
        url: "https://<somesite>.com/<path>",
        accept: "application/json",
        dataType: "jsonp",
        crossDomain: true,
        beforeSend: function (xhr) { 
          xhr.setRequestHeader("Accept", "application/json");
          xhr.setRequestHeader("x-token","<token value>"); 
        }, 
        data: {
          select: "timeZoneId"
        },
        success: function (data, status) {
          debugger;
          alert("Sucess");
        },
        error: function (xhr, status, error) {
          debugger;
          alert("Error! :" + xhr.status);
        }
      });
    }
  </script>
  </head>
  <body>
    <button type="button" onclick="getData()">Submit</button>
  </body>
</html> 

我经历了各种各样的扭曲,将x令牌作为头添加,但它从未被添加到请求中,这一点我可以看到。请求的结果总是一个401未经授权的错误,如果传递无效/丢失的x令牌,这就是预期的错误。正如我所提到的,对头的检查不会显示x令牌。

我看到的标题是:

代码语言:javascript
运行
复制
GET /redzone/public/bi/v_completeddataitem?callback=jQuery36009809687059838048_1648150351509&select=timeZoneId&_=1648150351510 HTTP/2
Host: <somesite>.com
Cookie: AWSALBCORS=f+1AWICQyRddSBjj6CNFH6f6XAnVjPOqAMq1JcPj9CCN1x1Izv1cFFXFKo7IKop53Lw4Y95mWWRjzHRAtOwTGccbwbvS8DBCDxJZY8WA9dEwu2Z/XKPeiSV+rAsb
Sec-Ch-Ua: "(Not(A:Brand";v="8", "Chromium";v="99"
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36
Sec-Ch-Ua-Platform: "Windows"
Accept: */*
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: no-cors
Sec-Fetch-Dest: script
Referer: http://localhost/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9

谢谢您的建议。

EN

回答 1

Stack Overflow用户

发布于 2022-03-24 23:15:43

JSONP通过注入带有<script>属性的src元素来工作。

无法在<script>元素上设置请求头。

这是JSONP的许多限制之一。

使用XMLHttpRequest或fetch使用CORS请求JSON。

您设置的头部之一是Accept: application/json,这是没有意义的,因为您可以使用JSONP解析的数据格式是JSONP (它是text/javascript的子集)。

我有一种预感,问题是第三方不支持跨源请求,而您正试图通过使用JSONP攻击它。这是行不通的,因为JSONP要求他们明确支持JSONP (就像现代的跨源请求要求明确支持CORS一样)。

如果第三方不支持跨源请求,那么您需要从不是浏览器的地方发出请求。通过您自己的服务器代理它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71609670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档