前言
隨著互聯網的迅猛發展和網絡的普及,各類網站層出不窮,網站也成為企業宣傳和實力展現的主要途徑之一,說到網站就不得不說一下web服務了,現在比較流行的web服務還是當屬Apache即httpd。本文將詳解http協議及httpd的特性。
http協議詳解
http協議
http: Hyper Text Transfer Protocol 超文本傳輸協議
傳輸文本:HTML
html: Hyper Text Mark Language 超文本標記語言
html文檔的生成方式
靜態:純html格式文檔
動態:編程語言編寫的程序可輸出html格式的結果
http協議版本
http 0.9: 僅用于傳輸html文檔
http 1.0:引入MIME機制,從而支持多媒體數據;引入keep-alive(持久連接);緩存
http 1.1:更多請求方法,更精細緩存控制;持久連接(persistent)
注意:http協議是無狀態的
http事務:一次請求及對應的響應
CGI:Common Gateway Interface 通用網關接口
http協議報文
請求報文
報文詳解
請求報文主要由請求行、請求頭部和請求數據(實體)組成
①請求行
請求行由請求方法字段、請求資源字段(URL)和協議版本字段組成
http方法:
GET:請求獲取一個資源,需要服務器發送 HEAD:跟GET近似,但其不需要服務響應請求的資源,而返回響應首部 POST:基于HTML表單向服務器提交數據,服務器通常需要存儲此數據(位置:通常為關系型數據庫) PUT:與GET相反,向服務器發送資源;服務器通常需要存儲此資源(位置:通常為文件系統) DELETE:刪除URL指向的資源 OPTIONS:探測服務器端對請求的URL所支持使用的請求方法 TRACE:跟一次請求中間所經過的代理服務器、防火墻或網關等 #注意:方法嚴格區分大小寫
資源名稱:URI (Uniform Resource Idnentifier)
URL :描述一個特定服務器上某資源的特定位置
可以是相對路徑,也可以絕對路徑 例如:http://www.scholar.com/download/index.html 分為三部分: scheme(方案):http:// 服務器:www.scholar.com 特定服務器上的資源:/download/index.html
協議版本:例如HTTP/1.0, HTTP/1.1
②請求頭部
http協議首部:
通用首部
Connection: 定義C/S之間關于請求、響應的有關選項 Connection: keep-alive Cache-Control: 緩存控制 Via: 顯示了報文經過的中間節點
請求首部
Client-IP:客戶端IP Host: 請求的主機 Referer: 指明了請求當前資源原始資源的URL User-Agent: 用戶代理 Accept首部: Accept: 指明服務器能發送的媒體類型 Accept-Charset: 支持使用的字符集 Accept-Encoding: 支持使用的編碼方式 Accept-Language: 支持使用語言 條件式請求: Expect: 告訴服務器能夠發送哪些媒體類型 If-Modified-Since: 是否在指定時間內修改過此資源 If-None-Match:如果提供的實體標記與當前文檔的實體標記不符,就獲取此文檔 跟安全相關請求: Authorization: 客戶端提交給服務器的認證數據,如帳號和密碼 Cookie: 客戶端發送給服務器身份標識
實體首部
Location: 資源的新位置 Allow: 允許對此資源使用的請求方法 內容相關的首部: Content-Encoding: 支持編碼 Content-Language:支持語言 Content-Length:文本長度 Content-Location:資源所在位置 Content-Type:主體對象類型 Content-Range:在整個資源中此實體表示的字節范圍 緩存相關: ETag: 實體標簽 Expires: 過期期限 Last-Modified: 上次修改時間
③實體
實體內包含客戶端請求服務器的數據
響應報文
報文詳解
響應報文主要由狀態行、響應頭部和響應數據(實體)組成
①狀態行
狀態行由協議版本字段、狀態碼字段和原因短語字段組成
狀態碼:
1XX:信息性狀態碼 2XX:成功狀態碼 200:OK,客戶端請求成功 201:CREATED,請求已被實現 3XX: 重定向類的狀態碼 301: Moved Permanently, 永久重定向 302: Found, 臨時重定向,會在響應報文中使用“Location: 新位置” 304: Not Modified,條件式請求中使用 4XX:客戶端類錯誤 403:Forbidden,請求被服務器拒絕 404: Not Found,服務器無法找到請求的URL 405: Method Not Allowed,不允許使用此方法請求相應的URL 5XX:服務器類的錯誤 500:Internal Server Error, 服務器內部錯誤 502:Bad Gateway, 代理服務器從上游服務器收到一條偽響應 503:Service Unavailable, 服務暫時不可用 505:HTTP Version Not Supported,服務器不支持
②響應頭部
響應首部
Date:消息產生的時間 Age: 響應持續時間 Server: 向客戶端說明自己的程序名稱和版本 ETage:不透明驗證者 Location:URL備用的位置 Content-Length:實體的長度 Content-Tyep:實體的媒體類型 協商首部: ary: 首部列表,服務器會根據列表中的內容挑一個最適用的版本發送給客戶端 Accept-Ranges: 對當前資源來講,服務器所能夠接受的范圍類型 跟安全相關: WWW-Authentication:質詢,即要求客戶提供帳號和密碼 Set-Cookie:服務器端在某客戶端第一次請求時發送令牌
③實體
實體內包含客戶端請求的數據,根據解析請求報文內的請求數據,將客戶端請求的數據打包,通過響應報文發送給客戶端,如果請求出現錯誤,則顯示報文內的錯誤代碼及原因。
資源請求過程及服務器結構
一次Web資源請求的具體過程(服務器的角度):
建立連接 接收請求 處理請求 訪問資源 構建響應 發送響應 記錄日志
web服務器的I/O結構:
單進程模型:串行
多進程模型:每個進程響應一個用戶請求實現并發的效果
復用的I/O機制:一個進程生成多個線程,每個線程響應一個用戶請求
復用的I/O機制:多個線程,每個線程響應多個用戶請求;
httpd特性詳解
httpd特性
高度模塊化:core + modules
DSO: Dynamic Shared Object
MPM:Multipath Processing Module
MPM包含: prefork: 每個進程響應一個用戶請求,預先生成多個空閑進程; worker: 啟動多個進程,每個進程生成多個線程,每個線程響應一個用戶請求; event: 啟動多個線程,每個線程響應N個請求;
httpd功能特性
豐富用戶認證:基本認證和摘要認證
CGI:原生支持perl CGI
虛擬主機:基于端口、IP、主機名
反向代理:負載均衡
用戶站點:用戶可在家目錄創建站點
路徑別名:alias
支持第三方模塊
The end
好了,http協議及httpd特性就說到這里了。下文將講解虛擬主機和基于用戶訪問控制及SSL實現https等配置,有興趣可以繼續關注呦。以上僅為個人學習整理,如有錯漏,大神勿噴~~~
原創文章,作者:書生,如若轉載,請注明出處:http://www.www58058.com/3145