HTTP/TCP協議基礎


 HTTP協議

基本概念

  • HTTP協議(超文本傳輸協議 HyperText Transfer Protocol):是用於從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示等。
  • HTTP是一個應用層協議,由請求和響應構成,是一個標准的客戶端服務模型。HTTP是一個無狀態的協議,同一個客戶端的這次請求和上次請求是沒有對應關系的。
  • 默認HTTP的端口為80;HTTPS的端口號為443。
  • HTTP協議永遠是客戶端發起請求,服務器回送響應。
  • FTP:文本傳輸協議。

HTTP事務工作過程

  • 一個HTTP操作稱為一個事務,工作過程分為如下四步:
  1. 首先客戶端與服務器需要建立連接。只要單擊某個超級鏈接,HTTP的工作開始。
  2. 建立連接后,客戶端發送一個請求給服務器。請求方式的格式為:統一資源標識符(URI)、協議版本號、MIME信息(包括請求修飾符、客戶端信息和可能的內容)
  3. 服務器接到請求后,給予相應的響應信息。
  4. 客戶端接收到服務器所返回的信息,通過瀏覽器顯示在用戶的顯示屏上,然后客戶端與服務器斷開連接。

HTTP的優點

  • 簡單快捷。HTTP協議簡單、通信速度很快
  • 靈活。HTTP協議允許傳輸任意類型的數據
  • 短連接。HTTP協議限制每次連接只處理一個請求,服務器對客戶端的請求作出響應后,馬上斷開連接。這種傳輸方式可以節省傳輸時間。

TCP連接——三次握手

  • 建立一個TCP連接需要經過“三次握手”。TCP三次握手具體過程如下:
  1. 第一次握手:客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態。等待服務器確認。
  2. 第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態。
  3. 第三次握手:客戶端接收到服務器的SYN_ACK包,向服務器發送確認包ACK(ack=k+1),包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
  • **握手過程中,傳送的包里不包含數據,三次握手完畢后,客戶端與服務器正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連接之前,TCP連接都將被一直保持下去。斷開連接時服務器和客戶端均可以主動發起斷開TCP連接的請求,斷開過程需要經過“四次握手”。**
  • **SYN(synchronous)是TCP建立連接時使用的握手信號;ACK(acknowledge)即確認字符,在數據通信中,接收站發給發送站的一種傳輸類控制字符,表示發來的數據已確認接收無誤。**
  • 如果兩次握手會怎么樣呢?

理解題意:就是客戶端為什么還要發送一次確認呢?

答:為了防止已經失效的連接請求報文又突然傳送到了服務器,而產生錯誤。假設一種異常,客戶端發出的請求由於網絡阻塞沒有及時到達服務器,后又重傳請求,之后服務器相應了,切建立了連接,之后連接又釋放了。此時假設客戶端發出的第一個請求到達服務器,服務器誤以為是客戶端再次請求連接,服務器建立連接,如果采用兩次握手,此時連接建立,而客戶端又不發送數據,浪費了服務器的資源。

四次握手

  • 與建立連接的“三次握手”類似,斷開一個TCP連接則需要“四次握手”。
  1. 第一次握手:主動關閉方發送一個FIN,用來關閉主動方到被動關閉方的數據傳送,也就是主動關閉方告訴被動關閉方:我已經不會再給你發送數據了。
  2. 第二次握手:被動關閉方接收到FIN包后,發送一個ACK給對方,確認序號為收到序列+1。
  3. 第三次握手:被動關閉方發送一個FIN,用來關閉被動關閉方到主動關閉方的數據傳送,也就是告訴主動關閉方,我的數據也發送完了,不會再給你發數據了。
  4. 第四次握手:主動關閉方收到FIN后,發送一個ACK給被動關閉方,確認序列為收到序列號+1。至此,完成四次握手。

HTTP請求方式

  • 常用的請求方式:GET/POST
  1. GET方式:是以實體的方式得到由請求URI所指定資源的信息。
  2. POST方式:用來向目的服務器發出請求,要求它接受被附在請求后的實體。

cookie、session異同

  • 相同點:它們都是為了用來保存狀態信息,都是保存客戶端狀態的機制,都是為了解決HTTP無狀態的問題。
  • 不同點:
  1. cookie將狀態保存在客戶端;session將狀態保存在服務器;
  2. cookies是服務器在本地機器上存儲的小段文本,並隨每一個請求發送至同一個服務器。網絡服務器用HTTP頭向客戶端發送cookies,在客戶終端,瀏覽器解析這些cookies並將它們保存為一個本地文本,它會自動地將同一服務器的任何請求縛上這些cookies。session並沒有字HTTP的協議中定義;
  3. session是針對每一個用戶的,變量的值保存在服務器上,用一個sessionID里區分是哪個用戶session變量,這個值是通過用戶的瀏覽器在訪問的時候返回給服務器的。當用戶禁用cookie時,這個值也可以設置為由get來返回給服務器。
  4. 對於安全性。在服務的的session機制更安全些。因為它不會任意讀取客戶存儲的信息。

HTTPS

  • HTTPS:是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL。

TCP/IP、HTTP的區別

  1. TCP/IP協議(Transmission Control Protocol/Internet Protocol):是傳輸層協議。主要解決數據如何在網絡中傳輸。
  2. HTTP:是請求響應模式,是應用層協議。主要解決如何包裝數據。
  3. Web使用HTTP協議作為應用層協議,以封裝http文本信息,然后使用TCP/IP做傳輸層協議將它發送到網絡上。HTTP是利用TCP在兩台電腦(通常是web服務器和客戶端)之間傳輸信息的協議。
  4. HTTP協議是建立在TCP協議基礎之上的。當瀏覽器需要從服務器獲取網頁數據時,會發出一次HTTP請求。HTTP會通過TCP建立一個到服務器的連接通道,當本次請求需要的數據完畢后,HTTP會立即將TCP連接斷開。
  5. HTTP連接最顯著的特點是:客戶端發送的每次請求都需要服務器回送響應,在請求結束后,會主動釋放連接。從建立連接到關閉連接的過程為“一次連接”。
  6. TCP就是單純建立連接,不涉及任何我們需要請求的實際數據,是簡單的傳輸。HTTP是用來收發數據的。
  7. TCP/IP協議是一個協議集合。TCP/IP協議按照層次分為以下四層:應用層、傳輸層、網絡層、數據鏈路層。分層的目的是:一個層只負責一個層次的問題,只要維護好這個層次就可以了。

狀態碼

  • 1**類狀態碼:Information狀態碼,表示信息正在處理。
  • 2**類狀態碼:Success狀態碼,表示請求正常完成。
  • 3**類狀態碼:Redirection狀態碼,表示需要客戶端進行附加操作(如跳轉、重定向)。
  • 4**類狀態碼:Error狀態碼,通常是由於客戶端的錯誤導致的。
  • 5**類狀態碼:SeverError狀態碼,通常是服務端的錯誤導致的。

**狀態碼分為客戶端錯誤狀態碼、服務端錯誤狀態碼、成功狀態碼、重定向狀態碼等。**

 

本博客內容為原創,版權所有違者必究,轉載請注明來源 http://www.cnblogs.com/sunshine-blog/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM