linux進階-http服務—你真的瞭解嗎?

http服務-理論知識

Socket套接字

在建立通信連接的每一端,進程間的傳輸要有兩個標誌

  • IP地址和端口號,合成爲套接字地址(socket address)
  • 客戶機套接字地址定義了一個唯一的客戶進程
  • 服務器套接字地址定義了一個唯一的服務器進程

Socket:套接字,進程間通信(IPC)的一種實現,允許位於不同主機(或同一主機)上不同進程之間進行通信和數據交換

  • Socket API:封裝了內核中所提供的socket通信相關的系統調用
  • Socket Domain:根據其所使用的地址
    • AF_INET:Address Family,IPv4
    • AF_INET6:IPv6
    • AF_UNIX:同一主機上不同進程之間通信時使用
  • Socket Type:根據使用的傳輸層協議
    • SOCK_STREAM:流,TCP套接字,可靠地傳遞、面向連接
    • SOCK_DGRAM:數據報,UDP套接字,不可靠地傳遞、無連接
    • SOCK_RAW:裸套接字,無須TCP或UDP,應用直接通過IP包通信
    • Socket位於傳輸層與應用層之間,連接了應用層細節與通信細節,負責用戶進程與系統內核的交互

http超文本傳輸協議

瀏覽器訪問網站流程圖

在這裏插入圖片描述

http協議通信過程

  • http(HyperText Transfer Protocol,超文本傳輸協議) 是一種用於分佈式、協作式和超媒體信息系統的應用層協議
  • http是萬維網的數據通信的技術設計http最初的目的是爲了提供一種遠距離共享知識的方式,藉助多文檔進行關聯實現超文本,連成相互參閱的WWW(world wide web,萬維網)

在這裏插入圖片描述

http協議分層

在這裏插入圖片描述

http相關術語

  • http:超文本傳輸協議,TCP連接端口80
  • html:超文本標記語言,一種描述網頁結構的編程語言
    • http和html的關係:http協議傳輸的文本文件一句使用的是貶稱語言,可分爲html、css、javescript文件等
  • MIME:多用途互聯網郵件拓展,支持在互聯網上傳輸各種格式的文件
    • 在文件/etc/mime.types中詳細列舉了支持的文件類型
    • 格式:major/minor,一級類型/二級類型,如:
      test/html,image/jpeg,video/MP4

http協議發展版本差異

  • http/0.9:1992年發佈,只有GET命令GET/index.html,服務器只能迴應html格式字符串,不能迴應別的格式。
  • http/1.0:1996年發佈,增加了POST,HEAD命令
    • 支持cache,MIME,method
    • 每個TCP連接只能發送一個請求
    • 頭部信息是ASCLL碼,後面數據可爲任何格式
    • Content-Tyoe字段說明數據格式,包含在MIME中
  • http/1.1(目前最普遍) 1997年1月發佈,新增PUT,PATCH,OPTIONS,DELETE
    • 持久連接(persistent connection):TCP連接默認不關閉,可被多個請求複用
    • 管道機制(pipelining):同一個TCP連接裏可以同時發送多個請求
    • 隊頭堵塞(Head-of-line blocking):服務器順序處理親貴,前方請求迴應慢,造成很多請求排隊
    • http協議不帶狀態,連接斷開後服務器將失去客戶端信息,每次請求需發送相同信息,浪費帶寬

http1.0和http1.1的區別

在這裏插入圖片描述

http1.0和http1.1的問題

  • HTTP1.x在傳輸數據時,每次都需要重新建立連接,無疑增加了大量的延遲時間,特別是在移動端更爲突出
  • HTTP1.x在傳輸數據時,所有傳輸的內容都是明文,客戶端和服務器端都無法驗證對方的身份,無法保證數據的安全性
  • HTTP1.x在使用時,header裏攜帶的內容過大,增加了傳輸的成本,並且每次請求header基本不怎麼變化,尤其在移動端增加用戶流量
  • 雖然HTTP1.x支持了keep-alive,來彌補多次創建連接產生的延遲,但是keep-alive使用多了同樣會給服務端帶來大量的性能壓力,並且對於單個文件被不斷請求的服務(例如圖片存放網站),

http2.0協議2015年,http2.0是谷歌SPDY的升級版

  • 頭信息和數據體都是二進制,稱爲頭信息幀和數據幀
  • 複用TCP連接,在一個連接裏,客戶端和瀏覽器都可以同時發送多個請求或迴應,且不用按順序一一對應,避免了“隊頭堵塞“,此雙向的實時通信稱爲多工(Multiplexing)
  • 引入頭信息壓縮機制(header compression),頭信息使用gzip或compress壓縮後再發送;客戶端和服務器同時維護一張頭信息表,所有字段都會存入這個表,生成一個索引號,不發送同樣字段,只發送索引號,提高速度
  • HTTP/2 允許服務器未經請求,主動向客戶端發送資源,即服務器推送(server push)

http工作機制

  • 事務:包含http請求和http響應
  • web資源:多個資源組成一個網頁
    • 靜態文件:無需服務端做出額外處理
    • 文件後綴:.jpg .html .txt .js .css .mp3 .avi
    • 動態文件:服務端執行程序,返回執行的結果
    • 文件後綴:.asp .php .jsp
  • 提高http連接性能的方法
    • 並行連接:通過多條TCP連接發起併發的http請求
    • 持久連接:重用TCP連接,以消除連接和關閉的延時,以事務個數和事件來決定是否關閉連接
    • 管道化連接:通過共享TCP連接發起併發的HTTP請求
    • 複用的鏈接交替傳送請求和響應報文(實驗階段)
  • 傳統http連接:串行連接,每個事務都需要建立和斷開連接一次

在這裏插入圖片描述

  • 並行鏈接:同時進行多個事務,事物之間並行運行

在這裏插入圖片描述

  • 持久連接:一個連接過程一次完成多個事務,減少了建立和斷開連接的時間

在這裏插入圖片描述

  • 管道連接:一個連接過程同時進行多個事務,進一步減少了時間的開銷

在這裏插入圖片描述

uri和url

  • URI(Uniform Resource Identifier):統一資源標識,分爲urn和url
  • URN(Uniform Resource Naming):統一資源命名,用於給資源定義一個唯一的命名
  • URL(Uniform Resource Locator):統一資源定位,用於描述某服務器某特定資源的位置
  • url的組成:

在這裏插入圖片描述

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

scheme:方案,指定連接服務器使用的協議
user:用戶名
password:密碼
host:服務器的主機名或IP地址
port:端口號
path:服務器資源本地名
params:參數,參數爲名/值對,多個參數用";"分隔
query:查詢,用"?“分隔,多個查詢用”&"分隔
frag:片段,在客戶端使用,用"#"分隔

http請求訪問的完整過程

在這裏插入圖片描述

[1]建立連接

接受或拒絕連接請求

[2]接受請求

接受客戶端請求報文對某資源的一次請求的過程

在這裏插入圖片描述

web訪問響應模型(web I/O)

  • 單進程I/O模型:啓動一個進程處理用戶請求,而且一次只處理一個,多個請求被串行響應
  • 進程I/O模型:並行啓動多個進程,每個進程響應一個連接請求
  • 複用I/O結構:啓動一個進程,同時響應N個連接請求
    • 實現方法:多線程模型和事件驅動
    • 多線程模型:一個進程生成N個線程,每線程響應一個連接求
    • 事件驅動:一個進程處理N個請求
  • 複用的多進程I/O模型:啓動M個線程,每個進程響應N個連接請求,同時接收M*N個請求

[3]處理請求

服務器對請求報文進行解析,並獲取請求的資源及請求方法等相關信息,根據方法,資源,首部和可選的主題部分對請求進行處理
- 常用請求:Method: GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS

[4]訪問資源

服務器獲取請求報文中請求的資源web服務器,及存放了web資源的服務器,負責向請求者提供對請求的靜態資源,或動態運行生成的資源

  • web服務器資資源路徑映射方式
    • docroot
    • alias
    • 虛擬主機docroot
    • 用戶家目錄docroot

[5]構建響應報文

服務器執行請求方法中描述的動作,並返回響應報文。響應報文中包含有響應狀態碼、響應首部,如果生成了響應主體的話,還包括響應主體。

  • 響應報文通常包括
    • Content-Type:響應首部元素,描述響應主體的MIME類型
    • Content-Length:響應首部元素,描述響應主體的長度
  • 識別MIME類型的策略
    • 魔法分類:服務器掃描資源的內容,並將其與一個已知模式表(被稱爲魔法文件)進行匹配
    • 顯示分類:強制特定文件或目錄內容擁有某個MIME類型
    • 類型協商: 有些Web服務器經過配置,可以以多種文檔格式來存儲資源。在這種情況下,可以配置Web服務器,使其可以通過與用戶的協商來決定使用哪種格式(及相關的MIME類型)“最好”
    • 默認先根據文件的後綴名判斷MIME類型,如果沒有後綴名再通過魔法分類識別

[6]發送響應報文

  • 對非持久連接而言,服務器應該在發送了整條報文後,關閉自己這一段的連接
  • 對持久連接來說,連接可能仍保持打開狀態

[7]記錄日誌

最後,當事務結束時,web服務器會在日誌文件中添加一個條目,來描述已執行的事務

[8]http服務器應用

  • http服務器程序
    httpd apache
    nginx
    lighttpd
    -應用程序服務器
    IIS .asp
    tomcat .jsp
    jetty 開源的servlet容器,基於Java的web容器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章