httpd是Apache超文本傳輸協議(HTTP)服務器的主程序。被設計爲一個獨立運行的後臺進程,它會建立一個處理請求的子進程或線程的池。說到httpd,首先就要了解HTTP協議,HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議。它可以使瀏覽器更加高效,使網絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示(如文本先於圖形)等。
以下是個人對WebServer之http和httpd基礎知識的簡單總結梳理:
WebServer 之http協議
http協議版本介紹
http/0.9:原型版本;
http/1.0:cache,MIME(multipupose internet Mail Extensions)
method:GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS、...
http/1.1:緩存功能大大增強
speedy:簡寫spdy
http/2.0
端口:80/tcp
https協議:443/tcp
基於TCP承載的HTTP協議:
http:hyper texttranfer protocol,超文本傳輸協議;應用層的的一種協議
作用對象是用超文本標記語言編譯的文本,實現文檔的檢索
html:hyper text marklanguage,超文本標記語言;
格式:
<html>
<head>
<title></title>
</head>
<body>
</body>
</html>
http協議的工作模式:request/response
一次完整的http事務:請求<-->響應;
請求內容:主要就是web資源
web資源:
一個html文檔;
一個圖片;
一個mp3文件片斷;
...
URL:Uniform ResourceLocator,資源標識,用於描述服務器上某特定資源
的位置;
URL組成:
URL scheme:協議,http,https, ftp,
服務器地址:IP:PORT
資源路徑:/path/to/resource
DocumentRoot
http://www.magedu.com/images/logo.jpg
基本語法格式: <scheme>://<user>:<password>@<host>[:<port>]/<path>;<params>?<query>#<frag>
params:參數
http://www.magedu.com/admin/admin.php;username=admin
query:查詢 http://www.magedu.com/admin/admin.php?logintime=12/07/2018
frag:在同一個頁面文件中的偏移量
http://www.magedu.com/admin/readme.html#chart1
資源的種類:
靜態資源:.jpg,.gif, .png, .html, .txt,
動態資源:
服務器端技術:.php,.jsp, ...
客戶端技術:.js
一次完整的http請求的處理過程:
(1)建立或處理連接:接收請求或拒絕請求;
(2)接收請求:接收客戶端發來的具體請求報文;
(3)處理請求:對請求報文進行解析;
(4)訪問資源:對本地訪問而言,通過存儲IO獲取用戶請求的資源;
(5)構建響應報文:
(6)發送響應報文 :
(7)記錄於日誌中:
http協議報文格式:
通用格式:
起始行
Name:Value
Name:Value
...
主體
request:
<method><request-URL> <version>
<headers>
<body>
response:
<version><status> <reason-phrase>
<headers>
<body>
格式中的關鍵字段說明:
method:請求方法,標明客戶端希望服務器對資源執行的動作
GET、HEAD、POST
WebDAV:PUT、DELETE
OPTIONS、TRACE
注:POST:向服務器端提交表單等數據
HEAD:只從服務器端獲取響應報文的首部
PUT:上傳資源 DocumentRoot
DELETE:刪除資源 DocumentRoot
WebDAV機制:web分佈式版本協作功能,只有打開的這個功能才能PUT
和DELETE
OPTIONS:請求服務器返回給我列出某一資源所支持所有的請求方法
TRACE:追蹤從客戶端到服務器端所經過的代理服務器(web網關)
協議查看或分析工具:tcpdump,wireshark, tshark, ...
status:狀態碼,statuscode
三位數字,1xx,2xx, ..., 5xx
標明請求處理過程的結果狀態;
1xx:100-101, 信息提示;
2xx:200-206,成功類的響應碼,例如200;
3xx:300-305,重定向類的響應碼,例如301(永久重定向), 302(臨時重定
向), 304(資源沒修改,對客戶端緩存而言)等;
4xx:400-415, 錯誤類信息,客戶端錯誤,例如 401(認證質詢), 404(訪問
資源不存在), 403(無權限)等;
5xx:500-505, 服務器端錯誤,例如500(服務器內部錯誤),502(bad gateway)
等;
headers:請求/響應報文的首部
媒體格式:通過MIME實現
媒體格式標記形式:
major/minor
images/jpeg
text/html
text/plaintext
text/xml
...
格式:
Name:Value
首部分類:
通用首部
請求首部
響應首部
實體首部
擴展首部
通用首部:請求、響應報文均可使用;
Date:報文的創建時間;
Connction:連接狀態,keep-alive,close;
Via:經由,報文傳輸經由的代理節點;
Cache-Control:緩存控制
Pragma:
請求首部:
Accept:可接受的媒介類型;MIME
Accept-Charset:接受字符集格式;
Accept-Encoding:接受的編碼格式,deflate,gzip, ...
Accept-language:接受的語言;
Client-IP:
Host:請求的服務器名稱和端口;
Referer:包含當前正在請求的資源的上一級資源;
User-Agent:客戶端代理;
條件式請求首部:
Expect:期望返回的結果
If-Modified-Since:自從某時間是否發生了修改
If-Unmodified-Since:
If-None-Match:本地緩存中存儲的文件的ETag的值是否與 服務器對應的資源的不相同;
If-Match:
安全請求首部:
Authrization:向服務器發送賬號和密碼;
Cookie:向服務器端發送Cookie信息;
Cookie2:
示例:
Cookie:_gscu_2145764248=62963660up7ov365;sto-id- jzxx=GFBEKIMA;_trs_uv=l187_365_io2qnkij;_gscu_20
65735475=62963431dzqj3716
響應首部:
信息性首部:
Age:響應持續時長
Server:服務器端軟件程序的名稱、版本、...
協商首部:
Accept-Ranges:服務器端可接受的請求類型範圍;
Vary:服務器查看的其它首部列表;
安全響應首部:
Set-Cookie:爲客戶端設定Cookie
Set-Cookie2:
WWW-Authenticat:認證質詢
實體首部:
Allow:對此實體可使用的請求方法;
Location:資源的真正地址;
Content-Encoding:資源的編碼格式
Content-language:資源的語言
Content-Length:資源的長度
Content-Location:資源的真正地址;
Content-Type:資源的類型
緩存相關:
Etag:code標記
Expires:實體過期時間;
Last-Modified: 最近一次的修改時間;
擴展首部:
X-Forwared-For:中間經由哪個服務器轉發的
...
參開書籍:《HTTP權威指南》前四章;
併發響應模型:(對接收請求而言)
單進程I/O模型:串行響應;
多進程I/O模型:同時啓動多個進程,每個進程響應一個請求;
複用的I/O模型:一個進程響應多個請求;
多線程模型:一個進程生成多個線程,每個線程響應一個請求;
事件驅動:一個進程直接響應多個請求;
複用的多進程I/O結構:啓動m個進程,每個進程生成n個線程,每個
線程響應一個請求;
2. WebServer 之httpd程序
http協議的實現
簡單的基本http協議服務器:也稱純靜態web資源服務器
httpd (apache)
nginx
lighttpd
httpd的特性:
高度模塊化:core +modules
modules支持:
DSO:Dynamic shared objects
支持動態裝載和卸載;
MPM:multipathprocessing modules,多路處理模塊
prefork:一個主進程,多個子進程;一個進程響應一個請求;
主進程:管理子進程;創建套接字;接收用戶請求,並派發給某子進程處理;...
子進程:處理請求、響應請求;
worker:多進程多線程模型;一個線程響應一個請求;
主進程:管理子進程;創建套接字;接收用戶請求,並派發給某子進程處理;...
子進程:負責管理線程;
線程:處理並響應請求;
event:事件驅動模型,多進程模型,每個進程響應多個請求;
主進程:管理子進程;創建套接字;接收用戶請求,並派發給某子進程處理;...
子進程:處理並響應請求;
注:MPM:
httpd-2.2:event爲測試模型;
CentOS6:MPM不支持DSO機制;
httpd-2.4:productionready;支持DSO機制;
CentOS7:MPM支持DSO機制,event爲生產測試模式
httpd的版本:
httpd-1.3:官方已經停止維護;
httpd-2.0:
httpd-2.2:
httpd-2.4:
httpd.apache.org 官方站點
httpd的功能特性:
CGI:commongateway interface;
通用網絡接口
虛擬主機:IP, PORT, HOSTNAME
反向代理
負載均衡:bytraffic,bybusiness, byreques
路徑別名
豐富的用戶認證機制
basic:
digest:
支持第三方模塊
...
3. WebServer 之httpd部署與配置
httpd軟件說明:
rpm包:CentOS base源;
編譯安裝:定製新功能,或其它原因;
CentOS 6:httpd-2.2
sysinit腳本:/etc/rc.d/init.d/httpd
安裝:yuminstall httpd
程序環境:
配置文件:
/etc/httpd/conf/httpd.conf 主配置文件
/etc/httpd/conf.d/*.conf
程序文件:
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
注:這三個文件是編譯到程序內核的,不支持DSO
日誌文件:
/var/log/httpd
access_log:訪問日誌
error_log:錯誤日誌
站點文檔根目錄:
/var/www/html
模塊文件路徑:
/usr/lib64/httpd/modules
啓動程序:
# servicehttpd start
chkconfig httpd on|off
# chkconfig --level235 httpd on
CentOS 7:httpd-2.4
Systemd Unit File:/usr/lib/systemd/system/httpd.service
安裝:yuminstall httpd
程序環境:
配置文件:
/etc/httpd/conf/httpd.conf主配置文件
/etc/httpd/conf.modules.d/*.conf模塊配置文件
/etc/httpd/conf.d/*.conf
程序文件:
/usr/sbin/httpd(工作方式文件)
MPM支持DSO機制,所以各爲一個獨立的模塊;換模式只需要更換模塊即可
日誌文件:
/var/log/httpd
access_log:訪問日誌
error_log:錯誤日誌
站點文檔根目錄:
/var/www/html
模塊文件路徑:
/usr/lib64/httpd/modules
啓動程序:
#systemctl start httpd
# systemctl enablehttpd.service
說明:以上內容由於時間有限匆忙寫之,如有不清楚的內容還請海涵,不足之處,歡迎達人們批評指正。