PHP動態請求的流程詳解

2021-08-30 11:22:23 字數 1873 閱讀 6663

1、找本地的dns快取,如瀏覽器快取、作業系統快取、路由快取;

2、找本地host;

3、找本地dns伺服器。就是我們在配置網路時候,填寫的dns伺服器ip,比如8.8.8.8;

4、找遠端dns伺服器。當本地dns伺服器沒有網域名稱和ip的對映關係,本地dns伺服器會向根網域名稱伺服器發起詢問,但是.根伺服器並沒有網域名稱和ip的對映關係,它會告訴你去問.com域伺服器,.com伺服器同樣不會告訴你網域名稱對應的ip位址,它會告訴你去問baidu.com伺服器,最終baidu.com域伺服器會告訴你www.baidu.com網域名稱對應的ip。

二、客戶端拿到ip,向webserver發起請求

1、第一次握手:client將標誌位syn置為1(syn=1),並隨機生成乙個同步序列號seq=j,並將資料報(報文) 傳送給server,等待server確認,此時client進入syn_sent狀態;

2、第二次握手:server收到client發過來的syn資料報後,由標誌位syn=1知道客戶端請求和自己建立連線,於是將標誌位syn和ack置為1,ack=j+1,seq=k,並將資料報傳送給clinet,此時server端進入syn_rcvd;

3、第三次握手:client收到來自server的確認報文後,檢查是否ack=j+1,是否ack=1,檢查正確後將ack=1,ack=k+1,並將資料報傳送給server端,server收到資料報後檢查是否ack=k+1,ack=1,確認無誤後連線建立,此時client和server均進入established狀態,至此client和server端就可以傳輸資料了。這裡的server就是webserver,比如nginx。

三、webserver和php等動態指令碼的互動流程。

早期webserver主要是作為html等靜態資源伺服器,

後來出現了php等各類動態語言,webserver處理不了,需要交給php直譯器來處理,但是php直譯器如何和webserver通訊呢,於是cgi協議就應用而生了,但是cgi協議有個很大的缺陷,server每接到乙個動態請求後,就會fork出乙個cgi程序,請求結束後還要kill掉這個程序,這樣如果同時進來10000個請求,就需要重複10000次這樣的fork和kill程序的操作,非常耗費資源和效能。

在這種情況下fastcgi就誕生了,它的優勢就在於,每處理完乙個請求,不會kill掉程序,而是保留程序去處理更多的請求,實現復用。fastcgi有乙個master程序和多個worker程序( 具體多少個程序需要看php-fpm服務的配置檔案php-fpm.conf),master程序負責迴圈監聽來自客戶端的動態請求,並分發請求給各個worker程序,每個worker程序都嵌入了php直譯器,是php**整整執行的地方。

補充: (在nginx配置檔案中經常看到location ~ \.php 的配置,就是nginx在將php的動態請求拋給php-fpm的master程序來處理,master程序會繼續將請求分發給worker程序,而worker程序內嵌有php直譯器,最終由php直譯器處理完以後,再將處理結果返回給nginx伺服器,nginx伺服器再將後端處理的內容,響應給瀏覽器等客戶端處理)

四、有建立連線就會有斷開連線,再說下tcp/ip協議四次揮手的流程。

第一次: client向server端傳送fin報文,關閉client到server的資料傳送,client進入fin_wait_1狀態;

第二次: server收到來自client的fin報文,傳送ack給client,確認序號為收到序號+1,server進入close_wait狀態;

第三次: server向client傳送fin報文, 關閉server到client的資料傳送,進入last_ack狀態;

第四次:client收到fin報文後,client進入time_wait狀態,隨後傳送ack給server,確認序號為收到序號+1,隨後client和server端均變為closed狀態,連線至此完全斷開,完成四次揮手

springMVC請求流程詳解

springmvc框架是乙個基於請求驅動的web框架,並且使用了 前端控制器 模型來進行設計,再根據 請求對映規則 分發給相應的頁面控制器進行處理。具體步驟 1 首先使用者傳送請求到前端控制器,前端控制器根據請求資訊 如 url 來決定選擇哪乙個頁面控制器進行處理並把請求委託給它,即以前的控制器的控...

PHP模擬http請求的方法詳解

方法一 利用php的socket程式設計來直接給介面傳送資料來模擬post的操作。建立兩個檔案post.php,getpost.php post.php內容如下 params errno errstr 要post的資料 ar array var1 abc var2 how are you my fr...

nginx處理php請求流程是什麼

http 事務執行過程 2 客戶端對網域名稱進行解析,向設定的 dns 伺服器請求 ip 位址。3 客戶端根據 dns 伺服器返回 ip 位址採用三次握手與服務端建立 tcp ip 連線。4 tcp ip 連線成功後,客戶端向服務端傳送 http 請求。5 服務端的 web server 會判斷 h...