1. 程式人生 > >優化TCP,提高HTTP效率

優化TCP,提高HTTP效率

1.一次網路訪問的流程

http://www.taobao.com:80/market/66/meizhuang.php?spm=1.7274553.1997517397.2.WtZPYg&acm=20140506001.1003.2.72323&uuid=1LmYAFs6&scm=1003.2.20140506001.OTHER_1400654077067_72323&pos=0

第一、瀏覽器解析主機名;http://www.taobao.com

第二、根據主機名獲得IP地址,方法:先本地快取在再DNS,  http://www.taobao.com-》202.12.23.3

第三、瀏覽器獲得埠號,如80,或者是預設埠號

第四、瀏覽器發起到IP地址為:202.12.23.3,埠號為80的TCP連線

第五、瀏覽器傳送http://www.taobao.com:80/market/66/meizhuang.php?spm=1.7274553.1997517397.2.WtZPYg&acm=20140506001.1003.2.72323&uuid=1LmYAFs6&scm=1003.2.20140506001.OTHER_1400654077067_72323&pos=0 HTTP請求

第六、瀏覽器獲得響應

第七、瀏覽器關閉TCP連線

2、綜述

HTTP要傳送報文時,會以流的形式將報文資料內容通過一條開啟的TCP連結按序傳輸,TCP收到資料流之後,會將資料流砍成段的小資料塊,並將段封裝在IP資料包裡傳輸

IP分組的組成部分:

一個IP分組首部(通常為20位元組)

一個TCP段首部(通常為20位元組)

一個TCP資料塊(0個或多個位元組)

TCP連線是通過4個值來識別的

<源IP地址,源埠號,目的IP地址,目的埠號>

socket程式設計中,socketAPI允許使用者建立TCP的端點資料結構,將這些端點與遠端伺服器的TCP端點連線,並對資料流進行讀寫,TCP API隱藏了所有底層網路協議的握手細節,以及TCP資料流和IP分組之間的分段和重灌細節

3.影響http時延的主要原因

第一:確定IP地址和埠號,如果最近訪問,就會有網路cache快取,否則DNS解析時間較長

第二:TCP建立的時延

HTTP是在TCP協議的上層,HTTP效能很大程度上取決於TCP通道的效能

第三:TCP連線建立好後,傳送HTTP請求或從TCP連線讀取報文

第四:回送HTTP響應

4. 優化TCP相關時延,提高HTTP效率

第一:並行連線

HTTP 允許客戶端開啟多條連線,並行地執行多個HTTP事務。

存在的隱患:

開啟連線會消耗更多的記憶體資源,從而引發自身的效能問題,為此瀏覽器對併發數做了限制,一半最多為4個

第二:持久連線

通常一些圖片資源來自於同一個web站點,TCP連線在事務處理結束後仍然處於開啟狀態,這樣就可以避免緩慢的連線階段和慢啟動的擁塞適應階段,以便快速地進行資料的傳輸。

潛在的問題:

持久連線的管理,如果太多的持久連線會造成很多空閒,這樣耗費本地和伺服器的資源,解決方法:持久連線和並行連線相結合

(i)HTTP 1.0 keep-alive連線

客戶端:connection:keep-alive,伺服器響應:connection:keep-alive,這樣客戶端就知道伺服器支援持久連線,連線不關閉

客戶端發出keep-alive後,伺服器並不一定會同意進行keep-alive,他們可以在任意時刻關閉或者限制HTTP連線的數量

connection:keep-alive

keep-alive: max=5,timeout=120

表示最多有5個http請求保持此tcp連線處於開啟狀態,開啟狀態保持到連線空閒2分鐘之後

(ii)啞代理

connection首部可以承載3中不同型別的標籤:

  • HTTP首部欄位名
  • 任意標籤值
  • close:說明操作完成後必須關閉此連線

如果connnection包含的是HTTP首部欄位,那麼這個首部欄位就包含了與連線有關的資訊,在轉發時,就應該先刪除connecton首部欄位

如果不刪除,就會發生啞代理,導致客戶端和伺服器端都會保持連線,但是在傳輸資料時,代理並不認為同一條TCP連線會有其他請求,於是瀏覽器處於掛起狀態。

(iii)HTTP 1.1持久連線

http1.1預設持久連線是啟用的,要結束持久連線必須傳送connection:close

第三:管道化連線

HTTP 1.1允許在持久連線上可選地使用請求管道,就是有個佇列,將HTTP事務請求放到佇列中,一條一條傳送,而無需等待前面的響應結果。

限制:

  • 如果無法確認連線是持久的,就不應該使用管道
  • HTTP客戶端必須做好連線會在任意時刻關閉的準備,並且準備好重發所有未完成的管道化請求

5.關閉連線

 所有的客戶端、伺服器和代理可以在任意時刻關閉TCP連線,通常會在一條報文傳輸結束後關閉連線,

相關推薦

優化TCP提高HTTP效率

1.一次網路訪問的流程 http://www.taobao.com:80/market/66/meizhuang.php?spm=1.7274553.1997517397.2.WtZPYg&acm=20140506001.1003.2.72323&uuid=

利用索引優化查詢提高效率

1、索引使用原則 1、在經常進行連線,但是沒有指定為外來鍵的列上建立索引,而不經常連線的欄位則由優化器自動生成索引。 2、在頻繁進行排序或分組(即進行group by或order by操作)的列上建立索引。 3、在條件表示式中經常用到的不同值較多的列上建立

優化Tomcat(執行模式、JVM、執行緒數)提高執行效率

一、說明目錄:1、修改Tomcat的Connector執行模式2、配置JVM虛擬記憶體3、禁止DNS查詢4、調整執行緒數二、實現1、修改Tomcat模式Tomcat之bio、nio、apr模式簡述及配置

減少與數據庫的連接提高請求效率

數據庫連接工時系統代碼優化記錄:在查看工時詳情的時候,我們需要將個人的工時分項目,每月進行一個展示。一年有12個月,一個人有多個項目。初始代碼只是為了實現功能,所以在代碼中進行的循環操作,即每個項目每月到數據庫中獲取該用用戶的工時統計。這樣就造成了多次請求數據庫,強求效率很低。差不多查詢一次要2500ms的時

常用SQL優化(一)提升運算效率

大數據 必須 -name 過大 一半 一次 存儲過程 是否 ins 網上關於SQL優化的教程很多,但是比較雜亂。近日有空整理了一下,寫出來跟大家分享一下,其中有錯誤和不足的地方,還請大家糾正補充。1.對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 orde

給谷歌輸入法增添自定義詞組提高輸入效率

夠快 拼音 讓我 根據 微信公眾 技術分享 定義 nsh 我們 我在寫微信公眾號文章時,經常需要重復輸入一些名詞,比如CRM,C4C,S/4HANA等等。為了減少輸入,我在查找一款輸入法,能夠讓我通過少量的輸入,就能夠快速打出這些冗長詞匯的完整內容。 經過試驗,發現Goog

給谷歌輸入法增添自定義片語提高輸入效率

我在寫微信公眾號文章時,經常需要重複輸入一些名詞,比如CRM,C4C,S/4HANA等等。為了減少輸入,我在查詢一款輸入法,能夠讓我通過少量的輸入,就能夠快速打出這些冗長詞彙的完整內容。 經過試驗,發現Google拼音輸入法能夠滿足我的要求。下面是詳細使用步驟。 安裝Google輸入法之後,開啟控制面板,

迅捷CAD編輯器中我們怎麼快速選擇工具提高繪圖效率

眾所周知,我們繪製好的DWG格式的圖紙檔案由於檔案的格式的特殊性,所以CAD檔案是需要藉助CAD繪圖軟體才能夠開啟的,如今網上已經有非常多的CAD編輯器,但是我們繪圖設計的話,當然是有選擇一款實用還操作簡單的CAD輔助軟體啦,那迅捷CAD編輯器是一款可以滿足使用者各種各樣的編輯需求的CAD繪

理解CPU分支預測提高程式碼效率

摘要: 技術傳播的價值,不僅僅體現在通過商業化產品和開源專案來縮短我們構建應用的路徑,加速業務的上線速率,也會體現在優秀程式設計師在工作效率提升、產品效能優化和使用者體驗改善等小技巧方面的分享,以提高我們的工作能力。 技術傳播的價值,不僅僅體現在通過商業化產品和開源專案來縮短我們構建應用的路徑,加速業務

增強 Vim 編輯器提高編輯效率

Vim 作為一款功能強大、選項豐富的編輯器,為許多使用者所熱愛。本文介紹了一些在 Vim 中預設未啟用但實際非常有用的選項。雖然可以在每個 Vim 會話中單獨啟用,但為了建立一個開箱即用的高效編輯環境,還是建議在 Vim 的配置檔案中配置這些命令。 開始前的準備

IDEA優化配置提高啟動和執行速度

IDEA預設啟動配置主要考慮低配置使用者,引數不高,導致 啟動慢,然後執行也不流暢,這裡我們需要優化下啟動和執行配置; 找到idea安裝的bin目錄; E:\develop\IntelliJ IDEA 2018.2.2\bin 開啟idea.exe.vmoption

優化Apache提高併發

模擬併發訪問 ab -n 100000 -c 1000 -k http://weibo.cnsuning.com/index.php 檢測 HTTPD 連線數: watch -n 1 -d “pgrep httpd|wc -l” 確定工作模式 prefork / wo

封裝Service層公用CRUD操作提高開發效率

專案架構: 專案採取前後分離開發模式,前端:antd pro 2.0,後端:spring cloud + spring boot + JPA。資料交換:json 最近在專案組開發中使用到JPA,初次使用JPA感覺很強大,解放了repository層的實現,提高了開發效率。

WebStorm 建立程式碼live template程式碼片段提高開發效率

webstrom 使用itar + tab 按鍵 可以方便的生成foreach 的程式碼片段 經常寫function 第一行經常是var that =this; 重複敲很麻煩, 可以新增一個程式碼片段 方法如下: alt+ctrl+s 調出setting,搜尋live te

拯救你的專注力提高生產效率的終極方法沒有之一!!!

小夥伴們,你們是不是跟我一樣每天把大量時間花在刷微信微博看短視訊上無法專注?是不是跟我一樣在數字化生存的年代發現時間都被碎片化了?如果與我一樣的症狀,請做三個深呼吸睜大眼睛往下讀!!!對於拯救專注力提高生產效率,最行之有效的方法(沒有之一),就是番茄工作法。關於這個方法的介紹

Python運維常用的指令碼提高工作效率就靠它了

前言 用Python做運維的小夥伴肯定會進行重複的工作,這個時候指令碼的重要性就體現出來了 一個好的指令碼工具可以幫你省去很多重複的工作,創造更大的價值 下面小編就帶你們看看Python運維最常用的指令碼吧 清除指定redis快取 #!/usr/bin/env

Eclipse、Myeclipse快捷鍵提高開發效率

Ctrl+D: 刪除當前行 Ctrl+Alt+↓ 複製當前行到下一行(複製增加)Ctrl+Alt+↑ 複製當前行到上一行(複製增加)Alt+↓ 當前行和下面一行互動位置(特別實用,可以省去先剪下,再貼上了)Alt+↑ 當前行和上面一行互動位置(同上)Alt+← 前一個編輯的頁面Alt+→ 下一個編輯的頁面(當

Spring整合Redis快取提高查詢效率

整合redis快取後可以將資料庫的查詢介面,序列化到redis中,key就是註解中的引數,例如@Cacheable(“findUsers”): 存在redis中的key就是findUsers。快取了這個結果之後再次請求這個方法就不會去資料庫中查,而是從redis快取中讀取資料,這樣就減少

介紹下emacs+gdb除錯環境可以實時跟蹤程式碼執行位置提高工作效率

準備工作: 1.      安裝 emacs  解壓後configure --prefix=xxx; make; make install就行了 gdb除錯: 1.      寫一個gdbfile,就是把hcc xxx.c –v中包含cc1的那一行拷出來,放到檔案裡,

如何高效地利用時間提高工作效率

有朋友說忙忙碌碌一整天任務沒有完成,效率極低,不知怎麼提升工作效率。 今天將無數的時間管理技巧,總結成了這套「12345法則」,分享給你。 這套法則,大多數都是非常經典的技巧。但是,它們既容易上手,又切實有效。任何一個人,經過一段時間的練習,都可以掌握,並應用到自己的生活和工作中。 一、