日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HTTP请求流程

發布時間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTTP请求流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

hhtp請求流程

首先http是一個應用層的協議,在這個層的協議,只是一種通訊規范,也就是因為雙方要進行通訊,大家要事先約定一個規范。

http請求與響應的步驟如下:

  • URL解析、域名解析
    輸入URL的時候,首先瀏覽器會去請求DNS服務器,通過DNS獲取相應的域名對應的IP。如果url里不包含端口號,則會使用協議的默認端口號。

    瀏覽器根據訪問的域名找到其IP地址。DNS查找過程如下:

    1)瀏覽器緩存:瀏覽器會緩存DNS記錄一段時間。 但操作系統沒有告訴瀏覽器儲存DNS記錄的時間,這樣不同瀏覽器會儲存個自固定的一個時間(2分鐘到30分鐘不等)。

    2)系統緩存:如果在瀏覽器緩存里沒有找到需要的域名,瀏覽器會做一個系統調用(windows里是gethostbyname),這樣便可獲得系統緩存中的記錄。

    3)路由器緩存:如果系統緩存也沒找到需要的域名,則會向路由器發送查詢請求,它一般會有自己的DNS緩存。

    4)ISP DNS緩存:如果依然沒找到需要的域名,則最后要查的就是ISP緩存DNS的服務器。在這里一般都能找到相應的緩存記錄。

  • 產生請求數據

    根據返回的IP和URL解析得到的參數,結合應用層的協議,確定發送的數據內容,將這些數據放到一個緩沖區內,然后形成了應用層的報文data。

    此時,將應用層的報文data發送到傳輸層。經過傳輸層處理,如報文打上了傳輸頭的包頭(主要包含端口號,以及tcp的各種信息),得到tcp的數據傳送單位segment。

  • 建立網絡連接并發送請求包

    拿到域名對應的IP地址之后,User-Agent(一般是指瀏覽器)會以一個隨機端口(1024< 端口 < 65535)向服務器的WEB程序(常用的有httpd,nginx等)80端口發起TCP的連接請求。

    采用ip地址+協議+端口號唯一標示網絡中的一個進程,利用socket進行通信。基于socket進行TCP三次握手,建立TCP連接。然后瀏覽器發起了http的請求。

    將傳輸層的數據段送到網絡層,在網絡層被打包,這樣封裝上了網絡層的包頭,包頭內部含有源及目的的ip地址,該層數據發送單位被稱為packet。網絡層開始負責將這樣的數據包在網絡上傳輸,如何穿過路由器,最終到達目的地址。

  • 返回響應數據

  • 瀏覽器解析html代碼,并請求html代碼中的資源(如js、css、圖片等)

  • 瀏覽器對頁面進行渲染呈現給用戶

  • 斷開網絡連接

    若connection 模式為close,則服務器主動關閉TCP 連接,客戶端被動關閉連接,釋放TCP 連接;若connection 模式為keepalive,則該連接會保持一段時間,在該時間內可以繼續接收請求;

HTTP請求格式和返回格式

  • 請求格式

    HTTP請求格式主要有四部分組成,分別是:請求行、請求頭、空行、消息體,每部分內容占一行

    1
    2
    3
    4
    5
    6
    <request-line>
    <general-headers>
    <request-headers>
    <entity-headers>
    <empty-line> // (用于分割請求頭和消息體)
    [<message-body>]
    • 請求行中包含的請求方法:

      1
      2
      3
      4
      5
      GET: 完整請求一個資源 (常用)
      HEAD: 僅請求響應首部
      POST:提交表單 (常用)
      PUT: 上傳
      DELETE:刪除
  • 響應格式

    為了告知瀏覽器,Web服務器首先傳送一些HTTP頭信息,然后傳送具體內容(即HTTP體信息),HTTP頭信息和HTTP體信息之間用一個空行分開

    HTTP響應格式
    服務器接收處理完請求后返回一個HTTP相應消息給客戶端。HTTP響應消息的格式包括:狀態行、響應頭、空行、消息體。每部分內容占一行。

    1
    2
    3
    4
    5
    6
    <status-line>
    <general-headers>
    <response-headers>
    <entity-headers>
    <empty-line>
    [<message-body>]
常用的HTTP頭信息有([一個http請求的詳細過程](https://www.jianshu.com/p/aa97810e5fa4)):① HTTP 1.0 200 OK  這是Web服務器應答的第一行,列出服務器正在運行的HTTP版本號和應答代碼。代碼"200 OK"表示請求完成。② MIME_Version:1.0 它指示MIME類型的版本。③ content_type:類型 這個頭信息非常重要,它指示HTTP體信息的MIME類型。如:content_type:text/html指示傳送的數據是HTML文檔。④ content_length:長度值 它指示HTTP體信息的長度(字節)。

Socket

WEB Server都是基于Socket編程,又稱之為網絡編程,網絡協議通過一個叫做socket的對象抽象出來,socket可以建立網絡連接,讀數據,寫數據。socket模塊定義了一些常量參數,用來指定socket的的地址族、socket的類型、以及支持的TCP/IP協議。

利用ip地址+協議+端口號唯一標示網絡中的進程,然后利用socket進行通信。

socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層復雜的操作抽象為幾個簡單的接口供應用層調用已實現進程在網絡中通信。

通常傳輸層的服務通過系統調用的方式提供,以socket的方式。對于客戶端,要想建立一個socket連接,需要調用這樣一些函數socket() bind() connect(),然后就可以通過send()進行數據發送。

參考:

  • 一次完整的HTTP請求過程
  • 一個http請求的詳細過程
  • TCP與SOCKET的三次握手的對應關系
  • 三次握手 四次握手 與socket函數的關系
  • http請求與響應全過程
  • 寫給那些讓我糊里糊涂的HTTP、TCP、UDP、Socket
  • 總結

    以上是生活随笔為你收集整理的HTTP请求流程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。