什麼是http
http協議規定了瀏覽器怎樣向全球資訊網服務請求全球資訊網文件,以及伺服器怎樣把文件傳送給瀏覽器。在伺服器和瀏覽器之間的請求和響應的互動,必須按照規定的格式和遵循一定的規則。這些格式和規則就是超文字傳送協議http。
http規定在http客戶和http伺服器之間的每次互動,都由乙個ascii碼串構成的請求和乙個類似的通用網際網路郵件擴充,即「類mime(mime-like)」的響應組成。http報文通常都使用tcp連線傳送。
當在位址列輸入www.baidu.com的時候會發生是什麼
1、dns解析位址
2、找到相應的伺服器
3、tcp的三次握手建立tcp連線
4、找到入口檔案
5、解析入口檔案
6、tcp的四次揮手
7、返回資源頁面
http使用了面向連線的tcp作為運輸層協議,保證了資料的可靠傳輸。http不必考慮資料在傳輸過程中被丟棄後又怎樣被重傳。但是,http協議本身是無連線的。也就是說,http雖然使用了tcp連線,但通訊的雙方在交換http報文之前不需要先建立http連線。
http協議是無狀態的。也就是說,同乙個客戶第二次訪問同乙個伺服器上的頁面的時候,伺服器的響應與第一次被訪問的時候一樣,但是伺服器並不知道你曾經訪問過這個頁面,也不記得你曾經訪問過多少次。http的無狀態特性簡化了伺服器的設計,使伺服器更容易支援大量併發的http請求。
http報文結構
http有兩類報文:
請求報文——從客戶向伺服器傳送請求報文
響應報文——從伺服器到客戶的回答
由於http是面向文字的,因此在報文中的每乙個欄位都是一些ascii碼串,因而各個欄位的長度都是不確定的。
http請求報文和響應報文都是由三個部分組成。這兩種報文格式的區別就是開始行不同。
1、開始行,用於區分是請求報文還是響應報文。在請求報文中的開始行叫做請求行,在響應報文中的開始行叫做狀態行。
2、首部行,用來說明瀏覽器、伺服器或報文主體的一些資訊。
3、實體主體,在請求報文中一般都不用這個字段,而在響應報文中也可能沒有這個字段。
請求報文:
請求報文的第一行「請求行」只有三個內容:方法、請求資源的url、http的版本
請求報文的方法
響應報文:
響應報文的第一行就是狀態行,狀態行包括三項內容:http的版本、狀態碼、解釋狀態碼的簡單短語。
狀態碼都是三位數字,分為5大類共33種
1xx 表示通知資訊的,如果請求收到了或正在進行處理
2xx 表示成功,如接受或知道了
3xx 表示重定向,如要完成請求還必須採取進一步的行動
4xx 表示客戶的差錯,如請求中有錯誤的語法或不能完成
5xx 表示伺服器的差錯,如伺服器失效無法完成請求
tcp的主要特點
1、tcp是面向連線的傳輸層協議。也就是說應用程式在使用tcp協議之前,必須先建立tcp連線
2、每一條tcp連線只能有兩個端點,每一條tcp連線只能是點對點的(一對一)
3、tcp提供可靠交付的服務。通過tcp連線傳送的資料,無差錯、不丟失、不重複、並且按序到達
4、tcp提供全雙工通訊。tcp允許通訊雙方的應用程序在任何時候都能夠返送資料。tcp連線的兩端都設有傳送快取和接收快取,用來臨時存放雙向通訊的資料。
5、面向位元組流。tcp中的流指的是流入到程序或者從程序流出的位元組序列。
建立乙個tcp需要三步
1:客戶端向服務端發出了請求連線請求報文, 首部中的同部位syn=1,同時選擇乙個廚師序號seq = x。這時,客戶端進入syn-sent(同步已傳送)狀態
2:服務端收到請求報文後,如果同意建立連線,則向客戶端傳送確認。在確認報文中syn和ack都置1,確認號是 ack = x + 1,自己選擇乙個初始序號seq = y,伺服器進入syn-rcvd(同步收到)狀態
3:客戶端收到服務端確認後,還要想服務端給出確認。確認報文段的ack置1,確認號2 ack = y + 1,自己的序號 seq = x + 1。這是tcp的連線已建立,客戶端進入established(已建立連線)狀態。
當服務端收到客戶端的確認後,也進入established狀態
為什麼客戶端還要在傳送一次確認呢?
這是為了防止已失效的鏈結請求報文突然又傳到了服務端。因而產生錯誤
「已失效的連線請求報文」是這樣產生的:
客戶端發出了第乙個連線請求,由於網路等原因導致長時間滯留但是沒有丟失,以致延誤到連線釋放以後的某個時間才到達服務端。按理說這應該是乙個早就失效的報文段,但是服務端收到這個失效的報文段後,他不知道你是失效的報文噻,所以就會誤以為客戶端有發來了乙個請求,於是就向客戶端發出了確認報文同意連線。假設我們沒有第三次的握手,那豈不是又建立了乙個連線。
但是我客戶端並沒有發出建立連線的請求啊,所以我就不搭理伺服器,不給你傳送資料。但是伺服器以為新的連線已經建立好了,等著你客戶端發來資料他就一直等啊等啊等啊,確怎麼也等不到。這樣就會導致伺服器的許多資源就這麼浪費了。
參用了三次握手的辦法可以防止上述現象的發生,就如剛才的情況,伺服器收不到客戶端的確認就知道客戶端沒有要求建立連線。
tcp是傳輸層協議,定義資料傳輸和連線方式的規範。握手過程中傳送的包裡不包含資料,三次握手完畢後,客戶端與伺服器才正式開始傳送資料。
http 超文字傳送協議(hypertext transfer protocol )是應用層協議,定義的是傳輸資料的內容的規範。
http協議中的資料是利用tcp協議傳輸的,特點是客戶端傳送的每次請求都需要伺服器回送響應,它是tcp協議族中的一種,預設使用 tcp 80埠。
好比網路是路,tcp是跑在路上的車,http是車上的人。每個**內容不一樣,就像車上的每個人有不同的故事一樣。
Http協議和TCP協議詳解
tcp協議對應於傳輸層,而http協議對應於應用層,從本質上來說,二者沒有可比性。http協議是建立在tcp協議基礎之上的,當瀏覽器需要從伺服器獲取網頁資料的時候,會發出一次http請求。http會通過tcp建立起乙個到伺服器的連線通道,當本次請求需要的資料完畢後,http會立即將tcp連線斷開,這...
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同步...