Ajax 設置請求頭詳解

一、Ajax 設置請求頭解決跨域

在跨域請求時,請求頭設置是一個必要的步驟。一般情況下,Ajax 請求不帶請求頭信息。如果我們需要傳遞一些頭信息,就需要設置請求頭。Ajax 設置請求頭一般用於解決跨域請求。

跨域請求通常經過兩次請求,第一次發送一個 Option 請求,獲取服務端允許的請求方法和頭信息等,之後再發送真正的請求。為了解決跨域請求,服務器需要允許請求頭信息。

代碼示例:


const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    console.log(xhr.responseText);
  }
}
xhr.open("GET", "http://example.com/getData", true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("Authorization", "Bearer xxxxxxx");
xhr.send();

二、Ajax 設置請求頭會被轉義不

當我們設置請求頭信息時,瀏覽器通常會自動進行編碼,跟數據傳輸時一樣。因此,即使我們設置了一些特殊字符,請求頭也不會被轉義。

代碼示例:


const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    console.log(xhr.responseText);
  }
}
xhr.open("GET", "http://example.com/getData", true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("Custom-Header", "Special & \"Quotes\"");
xhr.send();

三、Ajax 設置請求頭編碼

請求頭設置時,需要注意編碼問題。默認情況下,瀏覽器會對請求頭進行URL編碼。我們可以使用encodeURIComponent()方法對請求頭進行編碼,以避免瀏覽器編碼的影響。

代碼示例:


const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    console.log(xhr.responseText);
  }
}
xhr.open("GET", "http://example.com/getData", true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("Custom-Header", encodeURIComponent("Special & \"Quotes\""));
xhr.send();

四、Ajax 設置頭信息

在請求頭中,我們可以設置很多信息,如User-Agent頭、Host頭、Referer頭等。這些頭信息可以方便地幫助服務器了解請求者的客戶端情況,或者進行一些安全檢驗。

代碼示例:


const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    console.log(xhr.responseText);
  }
}
xhr.open("GET", "http://example.com/getData", true);
xhr.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0");
xhr.setRequestHeader("Referer", "http://example.com");
xhr.send();

五、Ajax 添加請求頭參數

在發送請求時,我們有時需要添加一些額外的參數,以獲取更多的信息。請求頭中的參數通常以key-value的形式出現。

代碼示例:


const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    console.log(xhr.responseText);
  }
}
xhr.open("GET", "http://example.com/getData", true);
xhr.setRequestHeader("Content-Type", "application/json");
const params = {
  key1: "value1",
  key2: "value2",
}
xhr.setRequestHeader("Params", JSON.stringify(params));
xhr.send();

六、Ajax 加請求頭

當我們發送多次Ajax請求時,可以使用封裝函數的方式來複用代碼。這樣可以避免重複編寫請求頭信息。我們可以使用對象的方式來封裝請求頭信息,並將其作為參數傳遞給Ajax請求函數。

代碼示例:


function ajax(options) {
  const xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {
      console.log(xhr.responseText);
    }
  }
  xhr.open(options.method, options.url, true);
  if (options.headers) {
    for (let key in options.headers) {
      xhr.setRequestHeader(key, options.headers[key]);
    }
  }
  xhr.send(options.data);
}

const options = {
  method: "GET",
  url: "http://example.com/getData",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "Bearer xxxxxxxx"
  }
}

ajax(options);

七、Ajax get 請求頭

Ajax 可以通過get方式獲取服務器數據,請求頭中不加請求體參數信息;如果需要添加一些特殊的信息,同樣可以通過設置請求頭信息來實現。

代碼示例:


const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    console.log(xhr.responseText);
  }
}
const params = {
  key1: "value1"
}
xhr.open("GET", http://example.com/getData?key1=value1, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("Authorization", "Bearer xxxxxxxx")
xhr.send();

八、Ajax 的請求裏面的頭信息

在Ajax 請求中,我們可以獲取請求時攜帶的頭信息。我們可以使用getAllResponseHeaders()方法來獲取所有頭信息,或者使用getResponseHeader()方法獲取指定的頭信息。

代碼示例:


const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    const headers = xhr.getAllResponseHeaders();
    const contentType = xhr.getResponseHeader("Content-Type");
    console.log(headers);
    console.log(contentType);
  }
}
const params = {
  key1: "value1"
}
xhr.open("GET", http://example.com/getData?key1=value1, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("Authorization", "Bearer xxxxxxxx")
xhr.send();

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/259426.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 16:29
下一篇 2024-12-15 16:29

相關推薦

  • 解決js ajax post 419問題

    對於使用ajax post請求時出現的419問題,我們需要進行以下幾個方面的闡述,包括返回碼的含義、可能出現的情況、解決方案等內容。 一、解析419返回碼 419返回碼錶示用戶超時…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性傳感器,能夠同時測量加速度和角速度。它由三個傳感器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變量讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分佈式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25

發表回復

登錄後才能評論