http請求的理解(待整理)

2021-08-25 08:09:37 字數 3417 閱讀 6659

客戶端瀏覽器發起請求-》一些列網域名稱解析-》通過tcp與伺服器建立連線-》發起http請求-》**伺服器-》目標伺服器-》fastcgi-》目標伺服器-》響應給**伺服器-》再由**伺服器響應給請求客戶端-》瀏覽器進行解析顯示。

1、客戶端瀏覽器再請求某個頁面時,首先會通過網域名稱解析找到該url的真正ip位址,(應該理解http是建立在tcp之上的連線),

2、源主機與目標伺服器通過三次握手建立起連線,此時源主機就可以向目標伺服器發起http請求

3、在發起http請求時,可能會經過**伺服器,由**伺服器將請求傳送給目標伺服器

4、目標伺服器收到請求後,會在本機中的虛擬主機查詢對應的server_name,如果找到則去該server_name配置目錄查詢對應的頁面

5、如果請求的頁面是html型別可以直接返回給請求主機或**伺服器,

6、如果請求的是php等需要解析的檔案,此時伺服器會將該檔案交由fastcgi進行解析,解析成html檔案後返還給伺服器

7、伺服器將解析後的html檔案響應給**伺服器(或請求主機),**伺服器響應給請求主機

8、請求主機在收到響應後,瀏覽器會自動解析html檔案,並顯示

9、至此,請求完成

網域名稱解析就是將網域名稱解析為ip的過程。

1、本地網域名稱伺服器 (理解為本地的hosts檔案中的對映關係和本地的dns伺服器)

2、根網域名稱伺服器 (全球13臺根網域名稱伺服器)

以不同域的兩個主機通訊為例介紹。域xyz.com主機a(網域名稱為x.xyz.com)欲與d.abc.com域的主機b(網域名稱為g.d.abc.com)通訊。主機a不知道主機b的ip位址。

1、首先向本地網域名稱伺服器(授權網域名稱伺服器dns.xyz.com)發出請求報文。

2、本地網域名稱伺服器沒有主機b的資訊,向根網域名稱伺服器(dns.com)發出請求。

3、若沒有主機bd的資訊,由根網域名稱伺服器**到另外的本地網域名稱伺服器(授權網域名稱伺服器dns.abc.com),.

4、以此類推,一直**到最終的本地網域名稱伺服器(dnx.d.abc.com)。

5、若有主機b的資訊,則將ip位址資訊作為響應報文,安請求順序傳送到主機a.若沒有主機b的資訊,則將出錯資訊作為相應報文,傳送到主機a

第一次握手:源端主機傳送乙個帶有本次連線序號的請求

第二次握手:目的主機收到請求後,如果同意連線,則發回乙個帶有本次連線序號和源端主機連線序號的確認。

第三次握手:源端主機收到含有對初始訊號的應答後,再向目的主機傳送乙個帶有兩次連線序號的確認。當目的主機收到確認後,雙方就建立起了連線。

**是一種特殊的網路服務,允許乙個網路終端(一般為客戶端)通過這個服務與另乙個網路終端(一般為伺服器)進行非直接的連線。一些閘道器、路由器等網路裝置具備網路**功能。一般認為**服務有利於保障網路終端的隱私或安全,防止攻擊。提供這種服務的終端就是**伺服器

正向** 是乙個位於客戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得內容,客戶端向**傳送乙個請求並指定目標(原始伺服器),然後**向原始伺服器轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設定才能使用正向**。

用途:(1)訪問原來無法訪問的資源,如google

(2) 可以做快取,加速訪問資源

(3)對客戶端訪問授權,上網進行認證

(4)**可以記錄使用者訪問記錄(上網行為管理),對外隱藏使用者資訊

初次接觸方向**的感覺是,客戶端是無感知**的存在的,反向**對外都是透明的,訪問者者並不知道自己訪問的是乙個**。因為客戶端不需要任何配置就可以訪問。

反向**(reverse proxy)實際執行方式是指以**伺服器來接受internet上的連線請求,然後將請求**給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連線的客戶端,此時**伺服器對外就表現為乙個伺服器。

作用:(1)保證內網的安全,可以使用反向**提供waf功能,阻止web攻擊

(2)負載均衡,通過反向**伺服器來優化**的負載

區別:使用一張圖來說明

通過如下幾個圖來理解負載均衡。負載均衡就相當於在本來直連伺服器間加了一層,使得請求必須通過負載均衡器來訪問伺服器端。

未使用負載均衡的web架構

使用多個負載均衡器:

使用了負載均衡的web架構

浮動 ip 的負載均衡架構示意圖:

cgi是保證伺服器和請求處理程式之間傳輸資料的一種標準.

cgi針對每個http請求都是fork乙個新程序來進行處理,處理過程包括解析php.ini檔案,初始化執行環境等,然後這個程序會把處理完的資料返回給web伺服器,最後web伺服器把內容傳送給使用者,剛才fork的程序也隨之退出。 如果下次使用者還請求動態資源,那麼web伺服器又再次fork乙個新程序,周而復始的進行。

fastcgi則會先fork乙個master,解析配置檔案,初始化執行環境,然後再fork多個worker。當請求過來時,master會傳遞給乙個worker,然後立即可以接受下乙個請求。這樣就避免了重複的勞動,效率自然是高。而且當worker不夠用時,master可以根據配置預先啟動幾個worker等著;當然空閒worker太多時,也會停掉一些,這樣就提高了效能,也節約了資源。這就是fastcgi的對程序的管理。大多數fastcgi實現都會維護乙個程序池。注:swoole作為httpserver,實際上也是類似這樣的工作方式。

它是乙個實現了fastcgi協議的程式,用來管理fastcgi起的程序的,即能夠排程php-cgi程序的程式。現已在php核心中就整合了php-fpm,使用--enalbe-fpm這個編譯引數即可。另外,修改了php.ini配置檔案後,沒辦法平滑重啟,需要重啟php-fpm才可。此時新fork的worker會用新的配置,已經存在的worker繼續處理完手上的活。

參考

HTTP的請求個人理解彙總

1 瀏覽器先搜尋自身的dns快取 2 作業系統搜尋自身的dns快取 瀏覽器沒有找到快取或者快取已經失效 3 讀取本地的host檔案 4 瀏覽器發起乙個dns的乙個系統呼叫 寬頻運營商伺服器檢視本身快取 運營商伺服器發起乙個迭代dns解析的請求 運營商伺服器把結果返回作業系統核心同時快取起來 作業系統...

的問題 (待整理)

資料 瀏覽次數 3426次 懸賞分 5 提問者 dangdangxww 為什麼這個s形參前面用了 和 呢?是怎麼個用法,含義如何呀?小弟在這先謝了,那位高手幫一下?問題補充 這個寫法是我從 資料結構上機試驗 的書上抄下來的,且可以執行,但就是不知道是什麼個用法!最佳答案 這樣的表示確實是有的,我來詳...

HTTP請求方式GET和POST區別整理

超文字傳輸協議 http 的設計目的是保證客戶端與伺服器之間的通訊。http 的工作方式是客戶端與伺服器之間的請求 應答協議。web 瀏覽器可能是客戶端,而計算機上的網路應用程式也可能作為伺服器端。舉例 客戶端 瀏覽器 向伺服器提交 http 請求 伺服器向客戶端返回響應。響應包含關於請求的狀態資訊...