Http協議和TCP協議詳解

2021-09-06 21:36:39 字數 3312 閱讀 4878

tcp協議對應於傳輸層,而http協議對應於應用層,從本質上來說,二者沒有可比性。http協議是建立在tcp協議基礎之上的,當瀏覽器需要從伺服器獲取網頁資料的時候,會發出一次http請求。http會通過tcp建立起乙個到伺服器的連線通道,當本次請求需要的資料完畢後,http會立即將tcp連線斷開,這個過程是很短的。所以http連線是一種短連線,是一種無狀態的連線。所謂的無狀態,是指瀏覽器每次向伺服器發起請求的時候,不是通過乙個連線,而是每次都建立乙個新的連線。如果是乙個連線的話,伺服器程序中就能保持住這個連線並且在記憶體中記住一些資訊狀態。而每次請求結束後,連線就關閉,相關的內容就釋放了,所以記不住任何狀態,成為無狀態連線。

隨著時間的推移,html頁面變得複雜了,裡面可能嵌入了很多,這時候每次訪問都需要建立一次tcp連線就顯得低效了。因此keep-alive被提出用來解決效率低的問題。從http/1.1起,預設都開啟了keep-alive,保持連線特性,簡單地說,當乙個網頁開啟完成後,客戶端和伺服器之間用於傳輸http資料的tcp連線不會關閉,如果客戶端再次訪問這個伺服器上的網頁,會繼續使用這一條已經建立的連線keep-alive不會永久保持連線,它有乙個保持時間,可以在不同的伺服器軟體(如apache)中設定這個時間。雖然這裡使用tcp連線保持了一段時間,但是這個時間是有限範圍的,到了時間點依然是會關閉的,所以我們還把其看做是每次連線完成後就會關閉。後來,通過session, cookie等相關技術,也能保持一些使用者的狀態。但是還是每次都使用乙個連線,依然是無狀態連線。

以前有個概念很容忍搞不清楚。就是為什麼http是無狀態的短連線,而tcp是有狀態的長連線?http不是建立在tcp的基礎上嗎,為什麼還能是短連線?現在明白了,http就是在每次請求完成後就把tcp連線關了,所以是短連線。而我們直接通過socket程式設計使用tcp協議的時候,因為我們自己可以通過**區控制什麼時候開啟連線什麼時候關閉連線,只要我們不通過**把連線關閉,這個連線就會在客戶端和服務端的程序中一直存在,相關狀態資料會一直儲存著,所以tcp是長連線。

在c#中會有socket,實際上socket是對tcp/ip協議的封裝,socket本身並不是協議,而是乙個呼叫介面(api)。socket的出現只是使得程式設計師更方便地使用tcp/ip協議棧而已,是對tcp/ip協議的抽象,從而形成了我們知道的一些最基本的函式介面,比如create、listen、connect、accept、send、read和write等等。

http/1.0和http/1.1都把tcp作為底層的傳輸協議。http客戶首先發起建立與伺服器tcp連線。一旦建立連線,瀏覽器程序和伺服器程序就可以通過各自的套接字來訪問tcp。如前所述,客戶端套接字是客戶程序和tcp連線之間的「門」,伺服器端套接字是伺服器程序和同一tcp連線之間的「門」。客戶往自己的套接字傳送http請求訊息,也從自己的套接字接收http響應訊息。類似地,伺服器從自己的套接字接收http請求訊息,也往自己的套接字傳送http響應訊息。客戶或伺服器一旦把某個訊息送入各自的套接字,這個訊息就完全落入tcp的控制之中。tcp給http提供乙個可靠的資料傳輸服務;這意味著由客戶發出的每個http請求訊息最終將無損地到達伺服器,由伺服器發出的每個http響應訊息最終也將無損地到達客戶。

http協議一定通過指定的埠,80,所以一般計算機上不會限制這個埠,所以http協議能夠順利通過所有機器上的防火牆。而使用socket程式設計的話,就需要自己指定特定的埠,那麼很可能這個埠是在某個環境中禁用的,那麼就無法穿透防火牆。iis使用的是80埠,也就是這個程式一直在監聽著這個埠。一旦發現有人要建立到這個埠的連線,他就會響應,然後建立連線。這裡說的連線都是短連線。所以你對伺服器上的**的請求,都是通過80埠送到**程式的。然後通過這個埠傳送的客戶端瀏覽器。

1.http協議簡介2.http協議詳解之url篇

http(超文字傳輸協議)是乙個基於請求與響應模式的、無狀態的、應用層的協議,常基於tcp的連線方式,http1.1版本中給出一種持續連線的機制,絕大多數的web開發,都是構建在http協議之上的web應用。

http url (url是一種特殊型別的uri,包含了用於查詢某個資源的足夠的資訊)的格式如下:

http://host[":"port][abs_path]
http表示要通過http協議來定位網路資源;host表示合法的internet主機網域名稱或者ip位址;port指定乙個埠號,為空則使用預設埠80;abs_path指定請求資源的uri;如果url中沒有給出abs_path,那麼當它作為請求uri時,必須以「/」的形式給出,通常這個工作瀏覽器自動幫我們完成。

eg:1、輸入:www.guet.edu.cn

瀏覽器自動轉換成:

四、https與http的一些區別

https協議需要到ca申請證書,一般免費證書很少,需要交費。

http協議執行在tcp之上,所有傳輸的內容都是明文,https執行在ssl/tls之上,ssl/tls執行在tcp之上,所有傳輸的內容都經過加密的。

http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。

https可以有效的防止運營商劫持,解決了防劫持的乙個大問題。

五、http2.0和http1.x相比的新特性

新的二進位制格式(binary format),http1.x的解析是基於文字。基於文字協議的格式解析存在天然缺陷,文字的表現形式有多樣性,要做到健壯性考慮的場景必然很多,二進位制則不同,只認0和1的組合。基於這種考慮http2.0的協議解析決定採用二進位制格式,實現方便且健壯。

多路復用(multiplexing),即連線共享,即每乙個request都是是用作連線共享機制的。乙個request對應乙個id,這樣乙個連線上可以有多個request,每個連線的request可以隨機的混雜在一起,接收方可以根據request的 id將request再歸屬到各自不同的服務端請求裡面。

header壓縮,如上文中所言,對前面提到過http1.x的header帶有大量資訊,而且每次都要重**送,http2.0使用encoder來減少需要傳輸的header大小,通訊雙方各自cache乙份header fields表,既避免了重複header的傳輸,又減小了需要傳輸的大小。

4.服務端推送(server push),同spdy一樣,http2.0也具有server push功能。

HTTP協議和TCP協議

什麼是http http協議規定了瀏覽器怎樣向全球資訊網服務請求全球資訊網文件,以及伺服器怎樣把文件傳送給瀏覽器。在伺服器和瀏覽器之間的請求和響應的互動,必須按照規定的格式和遵循一定的規則。這些格式和規則就是超文字傳送協議http。http規定在http客戶和http伺服器之間的每次互動,都由乙個a...

TCP協議和UDP協議

前面我們學習了網路的7層模型,其中談到傳輸層的相關協議有tcp transmission control protocol 傳輸控制協議 和udp user datagram protocol 使用者資料報協議 一 tcp協議 tcp transmission control protocol 是一...

TCP協議和UDP協議

tcp transfer control protocol 是面向連線的,所謂面向連線,就是當計算機雙方通訊時必需經過先建立連線,然後傳送資料,最後拆除連線三個過程。tcp在建立連線時又分三步走 第一步,是請求端 客戶端 傳送乙個包含syn即同步 synchronize 標誌的tcp報文,syn同步...