HTTP協議(1)—HTTP的連接

一、TCP連接
過程:
a.瀏覽器解析出主機名
b.瀏覽器查詢出這個主機名的IP地址
c.瀏覽器獲得端口號
d.瀏覽器發起到ip:port的連接(TCP連接)
e.瀏覽器向服務器發送一條HTTP報文
f.瀏覽器從服務器讀取HTTP響應報文
g.瀏覽器關閉連接

1.TCP的可靠數據管道
從TCP連接一端填入的字節會從另一端以原有的順序、正確地傳送出來

2.TCP流是分段的,由IP分組傳送
HTTP會以流的形式將報文數據的內容通過一條打開的TCP連接按序傳輸,TCP收到數據流之后會把數據流砍成被稱作段的小數據塊,并將段分裝在IP分組中,通過因特網進行傳輸

3.保持TCP連接的正確運行
通過端口號來保持連接的正確運行
TCP連接的識別:
<源IP地址、源端口號、目標IP地址、目標端口號>

二、對TCP性能的考慮
1.HTTP事務的時延
主要原因:
a.DNS查詢
b.TCP連接請求
c.服務器處理http報文
d.服務器回送http響應

3.性能聚焦區域
a.TCP連接的握手延時
i.請求新的連接時,客戶端向服務器端發送一個TCP分組,設置SYN標記
ii.服務器接收連接,會對一些連接參數進行計算,并回送一個TCP分組,包含SYN+ACK標記
iii.最后客戶端向服務器端回送一條確認信息ACK,通知服務器連接已建立

b.延遲確認
TCP可以將確認信息和輸出的數據分組一起發送出去,TCP現將確認信息存放在緩沖區中,利用延遲算法等待輸出的數據分組

c.TCP慢啟動
起初會限制連接的最大速度,然后數據成功傳輸,隨著時間的推移會提高傳輸的速度

d.Nagle算法與TCP_NODELAY
.應用程序可以將任意大小的數據放入TCP棧中,但如果TCP將大量小數據放入TCP棧中會嚴重影響網絡性能
.Nagle算法試圖在發送數據之前將大量TCP數據綁定在一起
.只有其他分組都確認以后,Nagle算法才會發送非全尺寸的分組
.小的http報文無法填滿一個分組,Nagel算法會進行等待那些永遠不會到來的額外數據而產生延遲,影響性能
.Nagle算法會阻止數據的發送,直到有數據分組為止
.HTTP應用程序會設置TCP_NODELAY來禁用Nagle算法

e.TIME_WAIT累積與端口耗盡
.TCP會在內存中維護一個小的控制塊并且存儲最近所關閉的IP地址和端口號,這類信息會維持2秒鐘(2MSL),以處理連接關閉4步中的任一步
丟失的情況
.客戶端每次連接上服務器時都會獲得一個新的源端口,以實現連接的唯一性

三、HTTP連接的處理
1.常被誤解的Connection首部
a.Connection首部可以承載3種不同類型的標簽
.HTTP首部字段名,列出了只與此連接有關的首部
.任意標簽值,用于描述此連接的非標準選項
.值close,說明完成此操作之后需關閉這條持久連接

b.HTTP應用程序收到帶有Connection首部的請求時,接收端會解析發送的請求,在轉發給下一跳之前刪除Connection首部

2.串行事務處理延時
a.并行連接
通過多條TCP連接發起并發的HTTP請求

b.持久連接
重用TCP連接,以消除連接及關閉的延時

c.管道化連接
通過共享的TCP連接發起并發的HTTP請求

d.復用的連接
交替傳送請求和響應

四、并發連接
HTTP允許客戶端打開多條連接,并行的執行多個HTTP連接(可以在多臺服務器上進行連接)

1.并行連接可能會提高頁面的加載速度

2.并行連接不一定快
.客戶端網絡帶寬不足
.打開大量連接會消耗很多內存資源,從而引發自身的性能問題
.瀏覽器會將并發連接數限制為一個較小的值

五、持久連接
.應用程序發起同一臺服務器的多次連接
.HTTP11允許HTTP設備在事務處理結束之后仍然保持正在打開的狀態

1.持久以及并行連接
a.并行連接缺點
.每個事務都會打開/關閉一條新的連接,會耗費時間和帶寬
.由于TCP慢啟動的存在,每條新連接的性能都會降低
.可打開的并行連接數量實際上是有限的

b.持久連接的兩種類型
HTTP/1.0 + keep-Alive連接
HTTP/1.1 + persistent連接

2.?HTTP/1.0 + keep-Alive連接

3.Keep-Alive操作
客戶端包含Connection:Keep-Alive首部,如果服務器愿意為下一條連接請求保持打開狀態,就在響應中包含相同的首部,如果沒有,客戶端
會在發送響應報文后關閉連接

4.Keep-Alive選項
.timeout
服務器希望將連接保持在活躍狀態的時間
.max
服務器還希望為多少個事務保持此連接的活躍狀態

5.持久連接
HTTP1.1默認支持持久連接
要在事務完成后關閉連接可以在首部加入Connection-Close

6.持久連接的限制和規則
.發送了Connection-Close首部后,客戶端就無法在那條連接上發送更多請求了
.只有當實體部分的長度和相應的Content-Length一致,或者用分塊傳輸編碼連接才能保
持持久連接
.HTTP1.1的代理能夠分別管理與客戶端和服務器的持久連接,每個持久連接只適合于一
跳傳輸
.HTTP1.1設備可以在任意時刻關閉連接
.HTTP1.1應用程序必須能夠從異步關閉中恢復過來

六、管道化連接
將多條請求放入隊列,當第一條請求發送時,第二、三條請求跟著發送

七、關閉連接的奧秘
1.正常關閉連接
a.完全關閉與半關閉
完全關閉:關閉TCP連接的輸入輸出(close())
半關閉:關閉輸入或輸出的一邊(shutdown)

b.TCP關閉及重置錯誤
關閉連接的輸出信道總是安全的
關閉連接的輸入信道不安全,當另一端向其發送數據時,會產生TCP連接重置,并會清空操
作系統緩沖區

c.正常關閉

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

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

相關文章

Apache POI使用詳解

1.POI結構與常用類(1)POI介紹Apache POI是Apache軟件基金會的開源項目&#xff0c;POI提供API給Java程序對Microsoft Office格式檔案讀和寫的功能。 .NET的開發人員則可以利用NPOI (POI for .NET) 來存取 Microsoft Office文檔的功能。(2)POI結構說明包名稱 說明HSSF 提供讀寫M…

Http協議(3)—HTTP實體和編碼

HTTP實體實現目標.可以被正確識別(通過Content-Type和Content-Launage).可以被正確解包(通過Content-Lenght首部和Content-Encoding首部).是最新的(通過實體驗證碼和緩存過期控制).符合用戶需要(基于Accept系列的內容協商首部).在網絡上可以快速有效的傳輸(通過范圍請求、差異編…

架構之美—軟件架構6大步驟(開篇)

1> 需求分析2> 領域建模3> 確定關鍵需求4> 概念架構設計5> 細化架構設計6 架構驗證 轉載于:https://www.cnblogs.com/kool/p/6695766.html

Http協議(2)—客戶端的識別與cookie機制

一、Http用戶識別的機制1.承載用戶身份的http首部2.客戶端IP地址跟蹤,根據客戶端IP地址進行識別3.用戶登錄,用認證方式識別用戶4.胖URL&#xff0c;一種在URL中嵌入識別信息的技術5.cookie,一種持久身份識別技術二、HTTP首部1.From包含用戶的Email地址2.User_Agent將用戶所用瀏…

經典PCB軟件比較闡述—Cadence和Mentor(整理)

PCB(Printed Circuit Board&#xff09;設計軟件經過多年的發展、不斷地修改和完善&#xff0c;或優存劣汰、或收購兼并、或強強聯合&#xff0c;現在只剩下Cadence和Mentor兩家公司獨大。 Cadence公司的推出的SPB(Silicon Package Board)系列&#xff0c;原理圖工具采…

RHEL 集群(RHCS)配置小記 -- 文檔記錄

1、RHEL 6 集群配置官方管理手冊 https://access.redhat.com/site/documentation/zh-CN/Red_Hat_Enterprise_Linux/6/pdf/Cluster_Administration/Red_Hat_Enterprise_Linux-6-Cluster_Administration-zh-CN.pdf 2、官方講解Fencing設備原理 https://access.redhat.com/documen…

Http協議(5)—HTTP摘要認證

一、摘要認證的改進1.用摘要保護密碼客戶端不發送密碼,而是發送一個摘要&#xff0c;服務端只需驗證這個摘要是否和密碼相匹配2.單向摘要a.摘要是一種單向函數,將無限的輸入值轉化為有限的b.常見的摘要為MD5&#xff1a;將任意長度的字節序列轉換為一個128位的摘要;MD5的128位摘…

c#常用正則表達式

public class RegexUtil {private RegexUtil() { }private static RegexUtil instance null;/// <summary>/// 靜態實例化單體模式/// 保證應用程序操作某一全局對象&#xff0c;讓其保持一致而產生的對象/// </summary>/// <returns></returns>publi…

Http協議(4)—HTTP認證機制

一、認證1.HTTP質詢/響應認證框架服務器收到一條請求并沒有按照請求執行動作,而是以一個認證質詢執行響應,要求用戶提供一個保密信息說明他是誰,當用戶再次發送請求時要附上保密證書,如果證書匹配則執行請求,否則返回一條錯誤信息2.認證協議與首部官方的兩個認證協議:基本認證、…

C#加密解密DES字符串轉

using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptography; using System.IO;namespace Component {public class Security{public Security(){ }//默認密鑰向量private static byte[] Keys { 0x12, 0x34, 0x56, 0x78, 0x90, …

Http協議(6)—安全HTTP

一、保護HTTP的安全1.功能:.服務器認證:客戶端知道它是在與真正的服務器進行通信.客戶端認證:服務器知道它是在與真正的客戶端進行通信.完整性:服務器與客戶端的數據不會被修改.加密:客戶端與服務器的對話是私密的,不會被竊聽.效率:運行足夠快的算法.普適性:所有客戶端和服務器…

restful處理

重寫/覆蓋 HTTP 方法 一些HTTP客戶端僅能處理簡單的的GET和POST請求&#xff0c;為照顧這些功能有限的客戶端&#xff0c;API需要一種方式來重寫HTTP方法. 盡管沒有一些硬性標準來做這事&#xff0c;但流行的慣例是接受一種叫 X-HTTP的請求頭&#xff0c;重寫是用一個字符串值…

Http協議(7)—Http緩存

一、冗余的數據傳輸有些客戶端訪問服務器頁面時,服務器會多次響應同一個頁面的副本給客戶端&#xff0c;這會產生冗余數據&#xff0c;故使用緩存就可以保留第一條相應的副本&#xff0c;以后就響應緩存的數據二、帶寬瓶頸在需要下載大型文件時,如果在局域網中放入該文件的一個…

Apache JMeter--網站自動測試與性能測評

Apache JMeter--網站自動測試與性能測評2013-02-28 15:48:05標簽&#xff1a;JmeterFrom:http://bdql.iteye.com/blog/291987 出于學習熱情&#xff0c;翻譯總結Emily H. Halili的《Apache JMeter》一書的部分內容。 JMeter的簡介 可以肯定的是&#xff0c;JMeter至少符合以下幾…

Linux 重命名文件

inux下重命名文件或文件夾的命令mv既可以重命名&#xff0c;又可以移動文件或文件夾. 例子&#xff1a;將目錄A重命名為B mv A B 例子&#xff1a;將/a目錄移動到/b下&#xff0c;并重命名為c mv /a /b/c 其實在文本模式中要重命名文件或目錄的話也是很簡單的&#xff0c;我們只…

苦逼的.net程序員, 轉行高富帥iOS移動開發

先知先覺,后知后覺 **- 在做了兩三年.net開發后, 還是感覺.net不是那么牛逼, 許多給我一起搞.net的同學, 不是去做了android, 就是去做了iOS, 或者java; 這讓我對.net的前景有了一些動搖, 在三思考之后,還是決定放棄.net ,理由很簡單,就是工資有點低; 由于藍鷗iOS培訓機構,一…

C# DataTable的詳細使用方法

在項目中經經常使用到DataTable,假設DataTable使用得當&#xff0c;不僅能使程序簡潔有用&#xff0c;并且可以提高性能&#xff0c;達到事半功倍的效果&#xff0c;現對DataTable的使用技巧進行一下總結。 一、DataTable簡單介紹 (1)構造函數 DataTable() 不…

mysql設置環境變量

-- 設置或修改系統日志有效期SET GLOBAL expire_logs_days8;SHOW VARIABLES LIKE %expire_logs_days%;-- 設置或修改系統最大連接數SET GLOBAL max_connections 2648;SHOW VARIABLES LIKE %max_connections%;-- 修改MYSQL自動編號步長SHOW VARIABLES LIKE %auto_increment%;SE…

CentOS7 編譯安裝LVS 互為主備 (實測 筆記 Centos 7.0 + ipvsadm 1.27 + keepalived 1.2.15 )

環境&#xff1a; 系統硬件&#xff1a;vmware vsphere (CPU&#xff1a;2*4核&#xff0c;內存2G&#xff0c;雙網卡) LVS服務器&#xff08;兩臺&#xff09;&#xff1a; 系統&#xff1a;Centos7.0 64位&#xff08;LVSkeepalived&#xff09; LvsMaster:192.168.1.21 (主…

shell 執行mysql語句

<pre name"code" class"plain">#變量定義 sqlname"test.sql" dir"/sdb2/backup/mysql_db_backup/backup/databases" host"127.0.0.1" user"root" passwd"root" dbname"test" #導…