來源:jliang981 發(fā)布時間:2018-12-08 14:54:23 閱讀量:1397
web服務器實現(xiàn)
web服務器實現(xiàn)了http和相關的tcp連接處理,負責管理web服務器提供的資源,
以及對web服務器的配置、控制、及擴展方面的管理。
1
2
通用的軟件web服務器 有很多種,大多來自三個公司,apache,微軟和sun的iplant。
web服務器設備 就是預先包裝好的軟硬件解決方案,廠商在他們選擇的計算機平臺上預先安裝好軟件服務器,并將軟件配置好。
嵌入式web服務器 可以嵌入到電子消費品中去。
實際的web服務器會做什么
建立連接 如果不希望與這個客戶端建立連接,就關閉
接受請求
處理請求
訪問資源 訪問報文中指定的資源
構建響應 創(chuàng)建具有正確響應首部的http報文。
發(fā)送響應
記錄事務處理過程
接受客戶端連接
客戶端請求一條到服務器的tcp連接時,web服務器會建立連接,并將接連添加到現(xiàn)存的web服務器連接列表中去,做好監(jiān)視連接上的數據。web服務器可以隨意的拒絕或者關閉任意一條連接。
客戶端主機名識別:web服務器將客戶端主機名用于**詳細的訪問控制和日志記錄**。但是請求過來的時候,只有客戶端ip,可以通過方向dns來查找主機名,但是可能會很慢。通過ident協(xié)議來確定客戶端用戶。如果客戶端支持ident協(xié)議,就在tcp端口113上堅挺ident請求。這種方式在因特網上,并不常用。
1
2
3
接受請求報文
解析請求行,獲取請求方法,和資源標識符。獲取首部。如果有的話,還需要讀取請求主體。
1
報文內部表示法 有些web服務器使用內部數據結構來存儲請求報文。將首部放到一個快速查詢表中。
連接輸入輸出的處理結構 因為有的請求,會在任意時刻到達,web服務器會不停的觀察有無新的web請求。不同的web服務器結構會以不同的方式為請求服務:單線程web服務器,多進程及多線程web服務器,復用的io服務器(異步io),復用的多線程web服務器。
對資源的映射和訪問
負責發(fā)送預先創(chuàng)建好的內容,或者服務器上程序動態(tài)生成內容。
1
docroot 最簡單的資源映射,就是使用uri作為名字訪問web服務器文件系統(tǒng)中的文件。web服務器會有一個特殊的文件夾專門存放web內容。稱為文檔根目錄。把請求中的uri放在根目錄后面找到對應的資源。
虛擬托管的docroot 就是一臺服務器上提供多個web站點,每個站點在服務器上有自己的獨有文檔根目錄。虛擬托管web服務器根據uri或者host首部的主機名或者ip識別正確的文檔根目錄。
用戶的主目錄docroot web服務器上為人們提供私有的站點,通常把那些一斜杠和波浪線開始/~。私有的docroot通常都是用戶主目錄下那個名為public_html的目錄。
目錄列表 如果客戶端請求的是一個目錄,而不是一個資源,那么會有以下幾種方式處理:返回一個錯誤;不返回目錄,返回一個特殊的默認的索引文件;掃描目錄,返回一個包含目錄內容的html頁面。大多數服務器會去目錄下查找index.html文件來代替此目錄。這都是可以配置的。
動態(tài)內容資源映射 web服務器還可以將uri映射為動態(tài)資源。映射到按需動態(tài)生成內容的程序上去。web服務器要能分辨出資源什么時候是動態(tài)的,動態(tài)內容生成程序位于何處。apache允許用戶把uri映射為可執(zhí)行文件目錄。
訪問控制 對特定的資源,進行訪問控制
構建響應
響應實體 mime類型,content-length(不一定需要,如果服務器響應了這次請求之后,就把連接關了就不需要這個,整個流,都屬于這個主題),主體的實際內容。
mime類型 web服務器可以使用文件擴展名來說明mime類型。web服務器會為每個資源掃描一個包含了所有擴展名的mime類型文件。 -魔法分類 掃描內容,確定mime。 -顯式分類 根據目錄 -類型協(xié)商
重定向 適用于以下幾種情況:永久刪除的資源(301),臨時刪除的資源(303),url增強(303,307),負責均衡,服務器關聯(lián),規(guī)范目錄名。
發(fā)送響應
要注意此次響應發(fā)送完之后,是否要關閉連接。
---------------------