HTTP超時時間設置

在進行超時時間設置之前我們需要了解一次http請求經歷的過程

  1. 瀏覽器進行DNS域名解析,得到對應的IP地址
  2. 根據這個IP,找到對應的服務器建立連接(三次握手)
  3. 建立TCP連接后發起HTTP請求(一個完整的http請求報文)
  4. 服務器響應HTTP請求,返回數據(服務器如何響應)
  5. 客戶端對頁面進行渲染呈現給用戶
  6. 服務器關閉TCP連接(四次揮手)

在客戶端和服務器之間通常有一層網關來負責路由和負載均衡:

DNS和TCP的超時時間通常由系統指定,DNS默認為5s,TCP建了超時默認為127s

所以下面從客戶端、網關、服務端三個方面來講解下HTTP請求的超時時間設置:

1、客戶端設置

以JS為例

(1)使用XMLHttpRequest

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/api', true);// 設置超時時間,單位是毫秒
xhr.timeout = 2000; // 2秒后超時// 定義超時處理邏輯
xhr.ontimeout = function () {console.error("The request for " + url + " timed out.");
};xhr.onload = function () {// 請求成功的處理邏輯if (xhr.status >= 200 && xhr.status < 300) {console.log('The request was successful!', xhr.responseText);} else {console.error('The request failed!', xhr.status);}
};xhr.onerror = function () {// 請求失敗的處理邏輯console.error('The request encountered an error.');
};xhr.send();

(2)使用fetch

const url = 'http://example.com/api';// 設置超時時間
const timeout = 2000; // 2秒后超時// 創建一個超時的Promise
const timeoutPromise = new Promise((resolve, reject) => {setTimeout(() => {reject(new Error('Request timed out'));}, timeout);
});// 發起fetch請求
const fetchPromise = fetch(url);// 使用Promise.race同時執行請求和超時Promise,哪個先完成就處理哪個
Promise.race([fetchPromise, timeoutPromise]).then(response => {// 檢查是否響應成功if (!response.ok) {throw new Error('Network response was not ok');}return response.text();}).then(data => {// 請求成功的處理邏輯console.log('The request was successful!', data);}).catch(error => {// 請求失敗或超時的處理邏輯console.error('Failed!', error);});

2、網關超時時間設置

以nginx為例:

在nginx.conf配置文件中可以指定超時時間

server {location / {proxy_pass http://backend_server;proxy_connect_timeout 5s;proxy_read_timeout 10s;proxy_send_timeout 5s;}
}

其中:

  1. 連接超時(Connection Timeout): 這是指客戶端嘗試與服務器建立連接時的最大等待時間。如果在這個時間內沒有建立連接(例如,服務器沒有響應或者網絡延遲很高),客戶端就會放棄嘗試并拋出一個超時異常。

  2. 讀超時(Read Timeout): 讀超時是指客戶端與服務器連接成功后,等待服務器發送數據的最大時間。如果在這個時間內客戶端沒有收到任何數據,就會認為讀取操作超時并拋出異常。這通常發生在服務器處理請求的時間過長,或者網絡傳輸延遲導致數據包遲遲未到達客戶端。

  3. 寫超時(Write Timeout): 寫超時是指在客戶端嘗試向服務器發送數據時的最大等待時間。如果客戶端在這段時間內未能完成數據的發送,就會認為寫操作超時。這可能是因為網絡速度慢或者服務器處理寫入請求的速度慢。

3、服務端超時時間設置

以Tomcat為例:

可以在server.xml 文件中指定服務器的超時時間,如下所示:

<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"readTimeout="15000"writeTimeout="15000" />

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10264.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10264.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10264.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[單機]完美國際_V155_GM工具_VM虛擬機

[端游] 完美國際單機版V155一鍵端PC電腦網絡游戲完美世界幻海凌云家園 本教程僅限學習使用&#xff0c;禁止商用&#xff0c;一切后果與本人無關&#xff0c;此聲明具有法律效應&#xff01;&#xff01;&#xff01;&#xff01; 教程是本人親自搭建成功的&#xff0c;絕對是…

出海企業哪種組網方案更省事?

對于出海企業而言&#xff0c;建立跨地區的數據傳輸和協同工作至關重要&#xff0c;以提升運營效率。因此&#xff0c;網絡構建變得迫在眉睫。通過構建企業組網&#xff0c;企業能夠加強與海外分支、客戶和合作伙伴之間的聯系&#xff0c;加速海外業務的發展。 然而&#xff0c…

Stable Diffusion教程|圖生圖原理和實戰

Stable Diffusion憑借其卓越的圖生圖功能&#xff0c;極大地提升了圖像生成的可控性與輸出品質&#xff0c;賦予用戶前所未有的個性化創作風格表達能力。這一革新特性使得Stable Diffusion不僅能精準地捕捉用戶的藝術愿景&#xff0c;更能以數字化手段孕育出新穎且極具創意的畫…

【Java 8】Lambda: mAA::get 返回函數式接口實例

正文 代碼介紹&#xff1a;分別有兩個函數式接口Lazy跟LazyDependencyCreator&#xff0c;一個HashMap存儲<Object, LazyDependencyCreator>鍵值對。重點在于mProviders.put(AA.class,mAA::get)&#xff0c;看了很久都沒看懂&#xff0c;mAA::get返回的不是mAA本身嗎&am…

部署私有YUM源

需將對應版本DVD下載至本機&#xff0c;并保證本機可訪問互聯網&#xff0c;下載需要的rpm包。 下載DVD并進行掛載 mkdir /data/iso -pmkdir /data/yum -pcd /datawget http://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1511.isomount -o loop -t…

知識付費app源碼快速發布app定制開發一站式定制開發平臺,開辦技術學校的風險有哪些?如何防范?

現在越來越多的人看好培訓行業&#xff0c;投資者們或選擇加盟&#xff0c;或選擇創業&#xff0c;不管哪一種都是投資&#xff0c;投資就會有風險&#xff0c;那么技術學校在辦學過程中&#xff0c;有哪些風險呢? 1、學生人身傷害事故的風險 技術學校的學生&#xff0c;不是同…

java接口介紹

在Java中,接口(interface)是一種特殊的引用類型,它是一種抽象的規范,用于定義一組方法的集合,但不提供方法的具體實現。接口定義了一種契約,規定了類應該具有的方法,但不規定方法的具體實現。一個類可以實現一個或多個接口,從而獲得接口中定義的所有方法。 接口在Jav…

npm i 與npm install的區別,接上回的npm ERR! code 128

在admin-element-ui拉取框架代碼后&#xff0c;需要先安裝依賴&#xff0c;但是會報128的錯誤&#xff0c;我這里總結一下&#xff0c;接上回一篇博客npm ERR! code 128-CSDN博客后續。 以前一直以為 npm i 與 npm install 是同一個東西&#xff0c;但是就在今天早上安裝依賴的…

在input光標處插入內容,并解決TS報錯

在input或者textarea的光標處插入內容&#xff0c;如果是鍵盤輸入倒是好說&#xff0c;直接把光標定位過去&#xff0c;鍵盤打字就可以了&#xff1b;如果在光標處插入內容呢&#xff0c;稍微費點事&#xff0c;倒是不是問題&#xff1b;但ts總是希望把一切弄得規范一些&#x…

Codeforces Round 134 (Div. 1) A. Ice Skating (并查集)

Ice Skating 題面翻譯 Description 給出n個點的橫縱坐標&#xff0c;兩個點互通當且僅當兩個點有相同的橫坐標或縱坐標&#xff0c;問最少需要加幾個點才能使得所有點都兩兩互通 Input 第一行一個整數n表示點數&#xff0c;之后n行每行兩個整數x[ i ]和y[ i ]表示第i個點的…

關于Windows驅動中DPC同步的一些見解說明

DPC會被分配到不停的CPU核心上,如果分配到同一個核心,那么DPC是串行的,如果分配到不同的CPU核心上,那么DPC是并行的,但如果設置WDF_OBJECT_ATTRIBUTES的SynchronizationScope屬性為WdfSynchronizationScopeDevice,那么即便CPU有多核,DPC也不會在不同的核心上并發,因為系…

零基礎HTML教程(32)--HTML5語義化標簽

文章目錄 1. div時代2. div的缺點3. 語義化標簽4. 語義化標簽有哪些5. 實戰演練6. 小結 1. div時代 我是2009年開始學習網頁開發的&#xff0c;那時候HTML里面到處是div。 這么說吧&#xff0c;那時候div就是網頁的骨架&#xff0c;支撐著網頁的主結構。 2. div的缺點 div作…

使用J-Link Commander / JFlash 燒寫固件程序(以STM32F103C8T6為例)

使用JFlash 燒寫流程 運行JFlash, 點擊Project Settings 配置Jlink為SWD方式,選擇連接設備為STM32F103C8T6, 點擊確定. 選擇要燒錄的Bin文件 設置bin文件燒錄地址, 點擊OK(地址要在0x08000000-0x0800FFFF范圍內) Note : STM32F103C8T6 Flash大小為 64KB&#xff0c; 地址范圍…

速盾可以防御的攻擊類型是否會隨著技術的發展而不斷變化?

隨著技術的發展&#xff0c;網絡攻擊的形式也在不斷演變。因此&#xff0c;速盾作為一種網絡安全防護技術&#xff0c;也需要不斷更新和改進&#xff0c;以應對新的攻擊類型。本文將從技術發展的角度探討速盾如何應對不斷變化的攻擊類型。 首先&#xff0c;隨著技術的進步&…

Vuex,在 Vue 組件中監聽 Vuex 狀態變化,使用watch監聽Vuex中的數據

簡介&#xff1a;在Vue應用程序中使用Vuex進行狀態管理時&#xff0c;經常需要在組件中響應狀態的變化。這里來記錄一下 一. 在使用 Vuex 進行狀態管理時&#xff0c;我們經常需要在組件中響應狀態的變化。Vue 提供了兩種方式來實現這一點&#xff1a;computed 屬性和 watch 選…

重生奇跡mu再生寶石怎么用有什么用

重生奇跡mu再生寶石有2個用處&#xff1a; 1、在瑪雅哥布林處給380裝備加PVP屬性4追4以上的380級裝備,守護寶石一顆,再生寶石一顆,成功得到PVP裝備,失敗寶石消失,裝備無變化&#xff1b; 2、給非套裝點強化屬性用法跟祝福,靈魂,生命一樣直接往裝備上敲,成功得到隨機強化屬性一…

八. Django項目之電商購物商城 -- 添加郵箱

Django項目之電商購物商城 – 添加郵箱 一. 用戶中心 添加郵箱功能在用戶中心中 , 先完善用戶中心功能 1. 視圖 # 用戶中心 class UserInfoCenterView(LoginRequiredMixin,View):def get(self , request):context {username : request.user.username,mobile : request.use…

隊列的實現以及隊列如何實現棧

一、隊列的定義 隊列&#xff1a;只允許在一端進行插入數據操作&#xff0c;在另一端進行刪除數據操作的特殊線性表&#xff0c;隊列具有先進先出 FIFO(First In First Out) 入隊列&#xff1a;進行插入操作的一端稱為 隊尾 出隊列&#xff1a;進行刪除操作的一端稱為 隊頭 …

20240507 ubuntu20.04+ros noetic 跑通lioslam

任務&#xff1a;跑通lioslam 主要參考博客 IMU激光雷達融合使用LIO-SAM建圖學習筆記——詳細、長文、多圖、全流程_ubuntu_AIDE回歸線-GitCode 開源社區 (csdn.net) 1.不要用這一句 wget -O ~/Downloads/gtsam.zip https://github.com/borglab/gtsam/archive/4.0.0-alpha2…

【Spring】初識 Spring AOP(面向切面編程)

目錄 1、介紹AOP 1.1、AOP的定義 1.2、AOP的作用 1.3、AOP的核心概念及術語 2、AOP實現示例 3、EnableAspectJAutoProxy注解 1、介紹AOP 1.1、AOP的定義 AOP&#xff08;Aspect Orient Programming&#xff09;&#xff0c;直譯過來就是面向切面編程&#xff0c;AOP 是一…