接受一個客戶端鏈接,或者若是不但願與這個客戶端創建鏈接,就將其關閉。html
從網絡中讀取一條HTTP請求報文web
1. 解析請求行,查找請求方法、指定的資源標識符(URI)以及版本號,各項之間由一個空格分隔,並以一個回車換行(CRLF)序列做爲行的結束; 2. 讀取以CRLF結尾的報文首部; 3. 檢測到以CRLF結尾的、標識首部結束的空行(若是有的話); 4. 若是有的話(長度由Content-Length首部指定),讀取請求主體。
有些Web服務器還會用便於進行報文操做的內部數據結構來存儲請求報文
瀏覽器
不一樣的Web服務器結構會以不一樣的方式爲請求服務服務器
一次只處理一個請求,直到其完成爲止。一個事務處理結束以後,纔去處理下一條鏈接網絡
服務器會爲每條鏈接分配一個線程/進程;但當服務器同時要處理成百、上千,甚至數以萬計的鏈接時,須要的進程或線程數量可能會消耗太多的內存或系統資源。所以,不少多線程Web服務器都會對線程/進程的最大數量進行限制。數據結構
Web服務器都採用了複用結構。在複用結構中,要同時監視全部鏈接上的活動。當鏈接的狀態發生變化時(好比,有數據可用,或出現錯誤時),就對那條鏈接進行少許的處理;處理結束以後,將鏈接返回到開放鏈接列表中,等待下一次狀態變化。只有在有事情可作時纔會對鏈接進行處理;在空閒鏈接上等待的時候並不會綁定線程和進程。多線程
有些系統會將多線程和複用功能結合在一塊兒,以利用計算機平臺上的多個CPU。多個線程(一般是一個物理處理器)中的每個都在觀察打開的鏈接(或打開的鏈接中的一個子集),並對每條鏈接執行少許的任務負載均衡
對請求報文進行解釋,並採起行動,好比post可能提交了一些信息,服務器須要來處理這些信息post
訪問報文中的指定資源,好比Get請求根據地址映射獲取服務器上的某個文件。spa
一般,Web服務器的文件系統中會有一個特殊的文件夾專門用於存放Web內容。這個文件夾被稱爲文檔的根目錄(document root,或docroot)。Web服務器從請求報文中獲取URI,並將其附加在文檔根目錄的後面。
不少web服務器都支持配置document 在配置文件httpd.conf中添加一個DocumentRoot行就能夠爲Apache Web服務器設置文檔的根目錄了:DocumentRoot /usr/local/httpd/files
虛擬託管的Web服務器會在同一臺Web服務器上提供多個Web站點;每一個站點在服務器上都有本身獨有的文檔根目錄。虛擬託管Web服務器會根據URI或Host首部的IP地址或主機名來識別要使用的正確文檔根目錄。經過這種方式,即便請求URI徹底相同,託管在同一Web服務器上的兩個Web站點也能夠擁有徹底不一樣的內容了。
咱們能夠對大多數Web服務器進行配置,使其在客戶端請求目錄URL時採起不一樣的動做。
1. 返回一個錯誤。 2. 不返回目錄,返回一個特殊的默認「索引文件」(Web服務器可自行配置索引優先級)。 3. 掃描目錄,返回一個包含目錄內容的HTML頁面(自動生成且返回一個展現目錄下的全部文件/目錄的html文件)。
大多數Web服務器都會去查找目錄中一個名爲index.html或index.htm的文件來表明此目錄。若是用戶請求的是一個目錄的URL,並且這個目錄中有一個名爲index.html(或index.htm)的文件,服務器就會返回那個文件的內容。
一旦Web服務器識別出了資源,就執行請求方法中描述的動做,並返回響應報文。
若是事務處理產生了響應主體,就將內容放在響應報文中回送過去。
響應報文中一般包括:
1. 描述了響應主體MIME類型的Content-Type首部; 2. 描述了響應主體長度的Content-Length首部; 3. 實際報文的主體內容。
Web服務器有時會返回重定向響應而不是成功的報文。Web服務器能夠將瀏覽器重定向到其餘地方來執行請求。重定向響應由返回碼3XX說明。Location響應首部包含了內容的新地址或優選地址的URI。重定向可用於下列狀況。
資源可能已經被移動到了新的位置,或者被從新命名,有了一個新的URL。態碼301Moved Permanently就用於此類重定向。
若是資源被臨時移走或重命名了,服務器可能但願將客戶端重定向到新的位置上去。狀態碼303 See Other以及狀態碼307 Temporary Redirect就用於此類重定向。
服務器一般用重定向來重寫URL,每每用於嵌入上下文。當請求到達時,服務器會生成一個新的包含了嵌入式狀態信息的URL,並將用戶重定向到這個新的URL上去。[插圖]客戶端會跟隨這個重定向信息,從新發起請求,但此次的請求會包含完整的、通過狀態加強的URL。這是在事務間維護狀態的一種有效方式。狀態碼303 See Other和307 Temporary Redirect用於此類重定向。
若是一個超載的服務器收到一條請求,服務器能夠將客戶端重定向到一個負載不過重的服務器上去。狀態碼303 See Other和307 TemporaryRedirect可用於此類重定向。
將響應報文返回給客戶端
最後,當事務結束時,Web服務器會在日誌文件中添加一個條目,來描述已執行的事務。大多數Web服務器都提供了幾種日誌配置格式。