【HTTP】一、HTTP協議簡介及其工作流程


  協議是指計算機通信網絡中兩台計算機之間進行通信所必須共同遵守的規定或規則,超文本傳輸協議(HTTP)是一種通信協議,它允許將超文本標記語言(HTML)文檔從Web服務器傳送到客戶端的瀏覽器。

(一)HTTP協議簡介

  HTTP(超文本傳輸協議)是一個應用層協議,它是互聯網的一個基礎協議,它規定了瀏覽器如何向萬維網服務器請求萬維網文檔、服務器如何把文檔傳給瀏覽器。HTTP是面向事務的應用層協議,它是萬維網可以進行可靠文件交換的重要基礎。對於技術崗位的程序員來說理解掌握HTTP協議是必須的。

1、萬維網概述

  萬維網實際上我們並不陌生,實際它並不是一個網絡,而是一個大規模的、聯機式的信息儲藏所,是一個分布式的超媒體系統。一個超文本由多個信息源鏈接而成。利用一個鏈接可使用戶找到另一個文檔。這些文檔可以位於世界上任何一個接在因特網上的超文本系統中。超文本是萬維網的基礎。

  萬維網以客戶-服務器方式工作。客戶程序就是用戶計算機上的各種瀏覽器,萬維網文檔所駐留的機器就成為服務器,客戶程序向服務器程序發出請求,服務器程序向客戶程序送回客戶所要的萬維網文檔。

  萬維網必須解決的幾個問題:

  • 為了標志分布在整個因特網上的萬維網文檔,使用了統一資源定位符URL。每一個文檔在整個因特網的范圍內具有唯一的標識符 URL。
  • 為了實現萬維網上各種超鏈之間的鏈接,使用了HTTP協議
  • 為了使各種萬維網文檔都能在因特網上的各種計算機上顯示出來,使用了瀏覽器和HTML語言

2、HTTP的版本演變

  HTTP規定了客戶端和服務器之間的通信格式,默認使用端口80,最早版本是1991年發布的0.9版。該版本極其簡單,只有一個命令get,只能傳輸HTML文本。

  1996年,發布了HTTP的1.0版本,這一版才加入了大量的內容,使得互聯網不僅可以傳輸文字,還能傳輸圖像、視頻、二進制文件等,報文格式也規定下來,引入了post和head等命令,是第一個比較成熟的版本。然而,1.0版本的主要缺點是每個HTTP連接只能發送一個請求(短連接),發送數據完畢,連接就關閉,如果還要請求其他資源,就必須再新建一個連接。這就會帶來很多不必要的開銷。

  1997年,發布了HTTP的1.1版本,這一版將HTTP更加完善,直到現在還是主要的使用版本。1.1 版的最大變化,就是引入了持久連接(長連接),在響應完第一個請求之后,TCP連接默認不關閉,可以被多個請求復用,這樣就客服了1.0版本的缺陷。除此之外,還引入了管道機制:一次可以發送多個請求,增加了put、delete等命令。

  2015年,HTTP/2 發布(不叫 HTTP/2.0,不再發布子版本,下一個是3),HTTP2的變化在於:(1)二進制協議,頭信息和數據體都是二進制,統稱為幀(頭信息幀和數據幀)。(2)多工,雙向實時通信,復用TCP連接,在一個連接里,客戶端和瀏覽器都可以同時發送多個請求或回應,而且不用按照順序一一對應,這樣就避免了"隊頭堵塞"。(3)數據流。據包是不按順序發送的,同一個連接里面連續的數據包,可能屬於不同的回應。因此,必須要對數據包做標記,指出它屬於哪個回應。(4)頭信息壓縮機制。(5)允許服務器推送。允許服務器未經請求,主動向客戶端發送資源,這叫做服務器推送。

  關於HTTP的版本演化,讀到了一篇比較詳細的博客,可以參考:HTTP 協議的歷史演變和設計思路.

3、HTTP協議的特點

  • 以客戶-服務器方式工作。客戶程序向服務器程序發出請求,服務器程序向客戶程序送回客戶所要的萬維網文檔。
  • 簡單快速。**當客戶端向服務器端發送請求時,只是簡單的填寫請求路徑和請求方法即可,然后就可以通過瀏覽器或其他方式將該請求發送就行了 。 **
  • 靈活。HTTP 協議允許客戶端和服務器端傳輸任意類型任意格式的數據對象 。
  • 無連接:HTTP雖然傳輸層使用了面向連接的TCP協議,但是HTTP本身是無連接的,無連接的含義是限制每次連接只處理一個請求(短連接)。服務器處理完客戶的請求,並收到客戶的應答后,即斷開連接,采用這種方式可以節省傳輸時間。(1.1版本引入持久連接,客服了這個缺陷)。
  • 無狀態。無狀態是指協議對於事務處理沒有記憶能力,服務器不知道客戶端是什么狀態,不會記錄客戶的信息。(使用Cookie和Session可以解決這個問題)。

(二)HTTP的操作過程

1、HTTP工作流程

  每個萬維網的網點都有一個服務器進程,它不斷的監聽TCP端口80,以便發現是否有瀏覽器向它發出連接請求,一旦堅挺到連接建立請求,就通過三次握手建立TCP連接,然后瀏覽器會向服務器發出瀏覽某個頁面的請求,服務器接着返回所請求的頁面作為響應,然后TCP連接就被釋放了。

  這些響應和請求報文都遵循一定的格式,這就是HTTP協議所規定的。

2、點擊一個URL會發生的一系列事件

  (1) 瀏覽器分析超鏈指向頁面的 URL。

  (2) 瀏覽器向 DNS 請求解析 www.tsinghua.edu.cn 的 IP 地址。

  (3) 域名系統 DNS 解析出清華大學服務器的 IP 地址。

  (4) 瀏覽器與服務器建立 TCP 連接

  (5) 瀏覽器發出取文件命令:如 GET /chn/yxsz/index.htm。

  (6) 服務器給出響應,把文件 index.htm 發給瀏覽器。

  (7) TCP 連接釋放。

  (8) 瀏覽器顯示“清華大學院系設置”文件 index.htm 中的所有文本。

3、代理服務器

  代理服務器(proxy server)又稱為萬維網高速緩存(Web cache),它代表瀏覽器發出HTTP請求。代理服務器把最近的一些請求和響應暫存在本地磁盤中。當與暫時存放的請求相同的新請求到達時,萬維網高速緩存就把暫存的響應發送出去,而不需要按URL的地址再去因特網訪問該資源。

  在不使用代理服務器時,所有的主機都需要與因特網上的服務器建立連接,會使得鏈路負載比較大;使用代理服務器可以降低鏈路的壓力。

  使用高速緩存的情況:

  (1)瀏覽器訪問因特網的服務器時,要先與校園網的高速緩存建立TCP連接,並向高速緩存發出HTTP請求報文

  (2)若高速緩存已經存放了所請求的對象,則將此對象放入HTTP響應報文中返回給瀏覽器。

  (3)否則,高速緩存就代表發出請求的用戶瀏覽器,與因特網上的源點服務器建立TCP連接,並發送HTTP請求報文。

  (4)源點服務器將所請求的對象放在HTTP響應報文中返回給校園網的高速緩存。

  (5)高速緩存收到此對象后,先復制在其本地存儲器中(為今后使用),然后再將該對象放在HTTP響應報文中,通過已建立的TCP連接,返回給請求該對象的瀏覽器。

  總結起來,代理服務器有時作為服務器接受來自瀏覽器的HTTP請求,有時又會作為客戶去向因特網上的原點服務器發送HTTP請求,具有雙重身份。同時,由於使用了高速緩存,相當大的一部分通信量都限制在了校園網的內部,減小了網絡鏈路的負載。


免責聲明!

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



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