簡體   English   中英

向 ajax 請求添加標頭失敗

[英]Adding headers to ajax request fails

這似乎非常簡單,但我無法將額外的 HTTP 標頭添加到我嘗試發出的請求中。 我通過瀏覽器開發人員工具以及 BurpSuite 觀看過。 我正在使用 JSONP,因為這是一個跨站點調用,但這無關緊要。 我很難過,正在尋找一些指導。

我需要在我從第三方 Rest API 發出的請求的 header 中添加一個令牌/值以進行身份驗證。 為了調試目的,我已將代碼剝離到示例頁面中。 這是我正在使用的示例:

<!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-token 添加為 header,但它從未被添加到請求中,我可以看到。 請求的結果始終是 401 未授權錯誤,如果傳遞了無效/缺失的 x-token,這是預期的錯誤。 正如我所提到的,對標頭的檢查不會顯示 x-token。

我看到的標題是:

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

在此先感謝您的任何建議。

JSONP 通過注入一個帶有src屬性的<script>元素來工作。

無法在<script>元素上設置請求標頭。

這是 JSONP 的眾多限制之一。

使用 XMLHttpRequest 或 fetch 來請求 JSON 和 CORS。


您設置的標頭之一是Accept: application/json這沒有意義,因為您可以使用 JSONP 解析的唯一數據格式是 JSONP(它是text/javascript的子集)。

我有一種預感,問題是第三方不支持跨源請求,而您正試圖通過使用 JSONP 來破解它。 這是行不通的,因為 JSONP 要求它們明確支持 JSONP(就像現代跨源請求要求它們明確支持 CORS 一樣)。

如果第三方不支持跨源請求,那么你需要從瀏覽器以外的地方發出請求。 例如通過您自己的服務器代理它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM