http服務詳解(1)——一次完整的http服務請求處理過程

前言:要熟練掌握一個服務,首先需要非常了解這個服務的工作過程,這篇就詳細解釋了http服務的請求處理過程。

一次完整的http請求處理過程

(1)流程圖

(2)過程詳解

0、DNS域名解析:遞歸查詢、迭代查詢

  遞歸查詢:客戶端向第一個服務器查詢,給最終結果

  迭代查詢:第一個服務器向根查詢

1 、建立連接:接收或拒絕連接請求:三次握手的過程

提高HTTP 連接性能:

  并行連接:通過多條TCP 連接發起并發的HTTP 請求

  持久連接:keep-alive, 長連接,重用TCP 連接,以消除連接和關閉的時延, 以事務個數和時間來決定是否關閉連接

  管道化連接:通過共享TCP 連接發起并發的HTTP 請求

  復用的連接:交替傳送請求和響應報文(實驗階段,還未實現)

① 串行連接

② 并行連接

③ 持久連接

④ 管道化連接

?

2 、接收請求:接收客戶端請求報文中對某資源的一次請求的過程,請求報文

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

  單進程I/O 模型啟動一個進程處理用戶請求,而且一次只處理一個,多個請求被串行響應,太古老了

  多進程I/O 模型 : 并行啟動多個進程, 每個進程響應一個連接請求

  復用I/O 結構 :啟動一個進程,同時響應N 個連接請求連接池

    實現方法: 多線程模型和事件驅動

    多線程模型:一個進程生成N個線程,每線程響應一個連接請求

    事件驅動:一個進程處理N 個請求,Nginx

      進程:比如復制的工作,項目小組,耗資源

      線程:比如人,輕量級

      一個進程必有一個線程,一個進程可以有多個線程

  復用的多進程I/O 模型:啟動M個進程,每個進程響應N個連接請求,同時接收M*N 個請求


3 、處理請求

服務器對請求報文進行解析,并獲取請求的資源及請求方法等相關信息 ,根據方法,資源,首部和可選的主體部分對請求進行處理

  元數據:請求報文首部

  <method> <URL> <VERSION>

  HEADERS 格式 name:value

  <request body>

示例:

  Host: www.along.com 請求的主機名稱

  Server: Apache/2.4.7

  HTTP 常用請求方式,Method:

  GET 、POST 、HEAD 、PUT 、DELETE 、TRACE 、OPTIONS

?

4 、訪問資源:

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

資源放置于本地文件系統特定的路徑:DocRoot 服務的根

  DocRoot ---> /var/www/html

  例:/var/www/html/images/logo.jpg

  http://www.along.com/images/logo.jpg

web 服務器資源路徑映射方式:下篇會詳解

  (a) docroot

  (b) alias

  (c) 虛擬主機docroot

  (d) 用戶家目錄docroot

?

5、構建響應報文

一旦Web 服務器識別出了資源,就執行請求方法中描述中的動作,并返回響應報文。響應報文中 ,包含有響應狀態碼、響應首部,如果生成了響應主體的話,還包括響應主體。

1)響應實體:如果事務處理產生了響應主體,就將內容放在響應報文中回送過去。響應報文中通常包括:

  描述了響應主體MIME 類型的Content-Type 首部

  描述了響應主體長度大小的Content-Length

  實際報文的主體內容

2)URL 重定向:web 服務構建的響應并非客戶端請求的資源,而是資源另外一個訪問路徑

  永久重定向:http://www.360buy.com --->?http://www.jd.com

  臨時重定向:http://www.taobao.com ?--->?https://www.taobao.com

3)MIME 類型:多媒體的郵件擴展

Web 服務器要負責確定響應主體的MIME 類型。有很多配置服務器的方法可以將MIME 類型與資源管理起來

  魔法分類(掃描首部信息):Apache web 服務器可以掃描每個資源的內容,并將其與一個已知模式表,首部( 被稱為魔法文件) 進行匹配,以決定每個文件的MIME 類型。這樣做可能比較慢,但很方便,尤其是文件沒有標準擴展名的時候

  顯式分類:可以對Web 服務器進行配置,使其不考慮文件的擴展名或內容,強制特定文件或目錄內容擁有某個MIME 類型,例如:php,Apache不識別,強制識別

  類型協商: 有些Web 服務器經過配置,可以以多種文檔格式來存儲資源。在這種情況下,可以配置Web 服務器,使其可以通過與用戶的協商來決定使用哪種格式( 及相關的MIME 類型)" 最好"

?

6 、發送響應報文

Web 服務器通過連接發送數據時也會面臨與接收數據一樣的問題。服務器可能有很多條到各個客戶端的連接, 有些是空閑的,有些在向服務器發送數據,還有一些在向客戶端回送響應數據 。服務器 要記錄連接的狀態,還要特別注意對持久連接的處理。對非持久連接而言,服務器應該在發送了整條報文之后,關閉自己這一端的連接 。對持久連接來說,連接可能仍保持打開狀態,在這種情況下, 服務器要 正確地計算Content-Length 首部,不然客戶端就無法知道響應什么時候結束了

?

7 、記錄日志

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

日志類型:下一篇會詳解日志各項格式的意義

  訪問日志:現在愈發重要,大數據的時代

  錯誤日志:排錯使用

?

另附一張http服務通信過程:

?

下篇更精彩,盡情期待~

轉載于:https://www.cnblogs.com/along21/p/7691234.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282133.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282133.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282133.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

線程管理(九)使用本地線程變量

聲明&#xff1a;本文是《 Java 7 Concurrency Cookbook 》的第一章&#xff0c; 作者&#xff1a; Javier Fernndez Gonzlez 譯者&#xff1a;鄭玉婷 校對&#xff1a;方騰飛 使用本地線程變量 并發應用的一個關鍵地方就是共享數據。這個對那些擴展Thread類或者實現Runnable接…

5訓練需要更改參數嗎_糖尿病病人需要多喝水嗎?多喝水的5大好處,了解一下...

糖尿病是典型的慢性疾病&#xff0c;需要在生活中多加講究&#xff0c;從各方面進行預防&#xff0c;其中喝水也是非常重要的一項調控方法。這就與糖尿病影響到患者的代謝功能有一定的關系&#xff0c;如果能夠保持良好的飲水習慣&#xff0c;就可以有效解決糖尿病帶來的影響。…

wordpress搭建博客 主題推薦 2019

一、generatepress2.14 主頁&#xff1a; 詳情頁&#xff1a; 二、 Astra 主頁&#xff1a; 詳情頁&#xff1a; 三、Bstone 主頁&#xff1a; 詳情頁&#xff1a; 四、Hestia 主頁&#xff1a; 詳情頁&#xff1a; 五、Rife free 主頁&#xff1a; 詳情頁&#xff1a;

Blazor學習之旅(1)初步了解Blazor

【Blazor】| 總結/Edison Zhou九月以來在學習Blazor做全棧開發&#xff0c;因此根據老習慣&#xff0c;我會將我的學習過程記錄下來&#xff0c;一來體系化整理&#xff0c;二來作為筆記供將來翻看。作為第一篇&#xff0c;我們先來了解一下這個Blazor到底是個什么鬼。什么是Bl…

英國如何推動分享經濟的發展?

——基于英國“分享經濟全球中心”戰略的深度分析 蔡雄山 騰訊研究院法律研究中心首席研究員 徐 俊 騰訊研究院助理研究員 “分享經濟具有巨大的經濟潛力&#xff0c;我希望確保英國處于分享經濟的前沿與中心&#xff0c;并且成為能夠與舊金山相媲美的高科技初創企業的發源地…

C#合并文件夾圖片列表 自定義排版順序

本次程序編寫主要為了將pdf word等文檔轉換為圖片后設置不同的打印排版 前提 目標文件夾中的圖片高寬都是一致的 /// <summary>/// 合并圖片/// </summary>/// <param name"savedictory">文件保存目錄</param>/// <param name"singl…

硬盤基本知識(一)

總體來說&#xff0c;硬盤結構包括&#xff1a;盤片、磁頭、盤片主軸、控制電機、磁頭控制器、數據轉換器、接口、緩存等幾個部份。所有的盤片&#xff08;一般硬盤里有多個盤片&#xff0c;盤片之間平行&#xff09;都固定在一個主軸上。在每個盤片的存儲面上都有一個磁頭&…

MySQL - 存儲過程

一、概述 存儲過程可以理解為一段 SQL 語句的集合&#xff08;相當于 PHP 中的一個函數方法&#xff0c;去實現業務邏輯&#xff09;&#xff0c;它們被事先編譯好并且存儲在數據庫中。 調用存儲過程與直接執行 SQL 語句的效果是相同的&#xff0c;但是存儲過程的一個好處是處理…

白話聊應用架構

產業互聯網時代&#xff0c;數字化轉型&#xff08;數字化演化歷史&#xff09;已成為一種趨勢&#xff0c;各行各業都投入到數字化轉型的浪潮中來。節后有個客戶項目參與者問我架構方面的事情&#xff0c;我想來想去對于非IT人來說&#xff0c;可能應用架構是最容易理解&#…

python大數_python處理大數字的方法

本文實例講述了python處理大數字的方法。分享給大家供大家參考。具體實現方法如下&#xff1a;def getFactorial(n):"""returns the factorial of n"""if n 0:return 1else:k n * getFactorial(n-1)return kfor k in range(1, 70):print "…

數據庫分庫分表、讀寫分離的原理和實現,以及使用場景

2019獨角獸企業重金招聘Python工程師標準>>> 為什么要分庫分表和讀寫分離&#xff1f; 類似淘寶網這樣的網站&#xff0c;海量數據的存儲和訪問成為了系統設計的瓶頸問題&#xff0c;日益增長的業務數據&#xff0c;無疑對數據庫造成了相當大的負載&#xff0c;同時…

談談一些有趣的CSS題目(十六)-- 奇妙的 background-clip: text

開本系列&#xff0c;談談一些有趣的 CSS 題目&#xff0c;題目類型天馬行空&#xff0c;想到什么說什么&#xff0c;不僅為了拓寬一下解決問題的思路&#xff0c;更涉及一些容易忽視的 CSS 細節。 解題不考慮兼容性&#xff0c;題目天馬行空&#xff0c;想到什么說什么&#x…

第五周軟件工程作業-每周例行報告

一、PSP T名稱C內容ST開始時間ED結束時間中斷時間/min實際時間/minScrum會議第一次Scrum會議10月13日11:3010月13日12:10040第二次Scrum會議10月14日15:3010月14日15:55025第三次Scrum會議10月15日13:3010月15日14:05035第四次Scrum會議10月16日11:3010月16日13:00090第五次Scr…

MySQL - 觸發器

一、概述 Mysql 允許通過觸發器、存儲過程、函數的形式來存儲代碼。 觸發器可以讓你在執行 Insert、Update、Delete的時候&#xff0c;執行一些特定的操作。可以在Mysql中指定是在Sql語句執行之前觸發還是執行后觸發。 二、使用觸發器需要注意的點 對每一個表的每一個事件&a…

Docker Desktop 可以直接啟用Kubernetes 1.25 了

作為目前事實上的容器編排系統標準&#xff0c;K8s 無疑是現代云原生應用的基石&#xff0c;很多同學入門可能直接就被卡到第一關&#xff0c;從哪去弄個 K8s 的環境&#xff0c; Docker Desktop 自帶了Kubernetes 服務&#xff0c;但是在過往的經驗中就是用梯子也安裝不了&…

截取url的host_java正則表達式獲取url的host示例

java正則表達式獲取url的host示例 復制代碼 代碼如下: public static String getHost(String url){if(url==null||url.trim().equals("")){return ""; } String host = ""; Pattern p = Pattern.compile("(?<=//|)((\\w)+\\.)+\\w+&qu…

MySQL - 視圖

一、概述 Mysql 5.0 版本后開始引入視圖。視圖本身是一個虛擬表&#xff0c;不存放任何數據。在使用 sql 語句訪問視圖的時候&#xff0c;他返回的數據都是在查詢過程中從其他表動態生成的。 二、使用視圖   1、創建視圖 CREATE VIEW comic_view as SELECT comic_id,name,pe…

Linux環境下壓縮與解壓命令大全

tar命令 解包&#xff1a;tar zxvf FileName.tar 打包&#xff1a;tar czvf FileName.tar DirName gz命令 解壓1&#xff1a;gunzip FileName.gz 解壓2&#xff1a;gzip -d FileName.gz 壓縮&#xff1a;gzip FileName .tar.gz 和 .tgz 解壓&#xff1a;tar zxvf FileName.tar.…

Centos 磁盤管理及配額管理

實驗內容&#xff1a;一.添加兩塊硬盤&#xff0c;使用LVM做成VG01組&#xff0c;在該VG中新建兩個LV。二.將這兩個LV格式化為ext4/xfs&#xff0c;開機自動掛載到系統mnt1,mnt2目錄下。三.lv02開啟磁盤配額功能&#xff0c;用來進行用戶與組分配額的實驗。四.在系統里添加用戶…

OnionArch - 采用DDD+CQRS+.Net 7.0實現的洋蔥架構

博主最近失業在家&#xff0c;找工作之余&#xff0c;看了一些關于洋蔥&#xff08;整潔&#xff09;架構的資料和項目&#xff0c;有感而發&#xff0c;自己動手寫了個洋蔥架構解決方案&#xff0c;起名叫OnionArch。基于最新的.Net 7.0 RC1, 數據庫采用PostgreSQL, 目前實現了…