httpd簡介



一、TCP及socket通信原理

1、Port number(IANA,互聯網地址授權機構規定)

    TCP:傳輸控制協議,面向連接的協議;通信前需要建立虛擬鏈路,結束後拆除鏈路。

    UDP:User Datagran Protocol,無連接的協議。

    0-1023:衆所周知,永久的分配給固定的應用使用,特權端口(22/ssh,80/http)。

    1024-41951:亦爲註冊端口,但要求並不是特別嚴格,分配給程序註冊爲某應用使用(11211/tcp,3306/tcp)

    41952-65535:客戶端程序隨機使用的端口:動態端口,或私有端口;其範圍的定義在文件中:(/proc/sys/net/ipv4/ip_local_port_range)。

2、Socker:IPC的一種實現,允許位於不同主機(甚至同一主機)上不同進程之間進行通信。

   Socket API(封裝了內核中的socket通信相關的系統調用)

wKioL1dpD4OBhF8CAACIsjf45Us893.png

    (1)、根據傳輸層協議分類:

        SOCK_STREAM:TCP套接字

        SOCK_DGRAN:UDP套接字

        SOCK_RAW:裸(raw)套接字

    (2)、根據套接字所使用的地址格式,Socket Domain:

        AF_INET:Address Family,IPv4的地址

        AD_INET6:IPv6的地址

        AF_UNIX:同一主機上不同進程之間通信時使用

    (3)、套接字相關的系統調用:

        Socket():創建一個套接字

        bind():綁定

        listen():監聽

        accept():接受請求

        connect():請求連接建立

        write():發送

        read():接收

wKiom1dpD6qCbg7xAADtb-i5Rlg406.png

3、TCP協議的特性

    建立連接:三次握手

    將數據打包成段:校驗和(CRC-32)

    確認、重傳以及超時

    排序:邏輯序號

    流量控制:滑動窗口算法

    擁塞控制:慢啓動和擁塞避免算法

4、TCP FSM:TCP Finite State Machine,有限狀態機

CLOSED、LISTEN、SYN_SENT、SYN_RECV、ESTABLISHED、FIN_WAIT1、 CLOSE_WAIT、FIN_WAIT2、LAST_ACK

wKioL1dpD8yzQbcYAACV9u88KJE952.png

二、httpd協議及Web基本原理

1、http:hyper text transfer protocal,超文本傳輸協議

    C/S架構:客戶端-服務器,實現該協議的程序有httpd,nginx,lighttpd......

    工作模式:一次httpd事務:請求<-->響應

      http請求報文:http request

      http響應報文:http response

2、http協議版本

    1)HTTP/0.9:原型版本只能傳輸文本文件,僅有GET方法傳輸到客戶端

    2)HTTP/1.0:第一個廣發使用的版本,支持MIME機制、cache支持、method(請求方法)

      MIME:Multipurpose Internet Mail Extesion多用途互聯網郵件擴展,支持非文本編碼傳輸後再解碼還原

    3)HTTP/1.1:增強了緩存功能

    4)HTTP/2.0:借鑑spdy對1.0多方面改進,大大提升性能

    SPDY是Google開發的基於TCP的應用層協議,用以最小化網絡延遲,提升網絡速度,優化用戶的網絡使用體驗。

      SPDY對HTTP協議的增強。新協議的功能包括數據流的多路複用、請求優先級以及HTTP報頭壓縮。

3、Web資源:Web resources 

1
2
3
4
5
6
靜態資源(無需服務端做出額外處理):.jpg,.png,.gif,.html,txt,.js,.css,.mp3,avi
動態資源(服務端需要通過執行程序做出處理,發送給客戶端的是程序的運行結果):.php,.jsp
注意:一個頁面中展示的資源可能有多個;每個資源都需要單獨請求;
資源的標識機制:URL,Uniform Resource Locator:用於描述服務器某特定資源的位置
Scheme://Server[:Port][/PATH/TO/SOME_RESOURCE]-->協議://服務[:端口]/資源路徑
沒有給資源路徑打開的是默認頁面,即主頁,http默認端口爲80

4、併發訪問響應模型(Web I/O):

1
2
3
4
5
6
單進程I/0結構:啓動一個進程處理用戶請求,而且一次只處理一個;多個請求被串行響應;
多進程I/O結構:並行啓動多個進程,每個進程響應一個請求;
複用I/O結構:一個進程響應N個請求:
多線程模型:一個進程生成N個線程,每個線程響應一個用戶請求;
事件驅動:event-driven
複用的多進程I/0結構:啓動多個(m)進程,每個進程響應n個請求;

5、一次完整的http請求處理過程

1
2
3
4
5
6
7
8
9
10
11
(1)、建立或處理連接:接收請求或拒絕請求;
(2)、接收請求:接收來自於網絡的請求報文中對某資源的一次請求的過程;
(3)、處理請求:分析請求報文的http請求報文首部進行解析,獲取客戶端請求的資源及請求方法等相關信息
   請求報文首部的格式:
        <method><URL><VERSION>
        HEADERS:(name:value)
        <request body>
(4)、訪問資源:獲取請求報文中請求的資源,默認在/var/www/html路徑下;
(5)、構建響應報文
(6)、發送響應報文
(7)、記錄日誌
三、httpd服務器程序

1、httpd:apache純粹的靜態服務器

    版本:1.3、2.0、2.2、2.4。centos6默認使用2.2;centos7默認使用2.4

    a patchy server(一個充滿補丁的服務器)

    ASF:apache software foundation(Apache軟件基金會)最早的項目,官方站點:httpd.apache.com

2、httpd的特性

    高度模塊化:core + modules

    DSO:Dynamic Shared Object

    MPM:Multipath Processing Modules

     profork:多進程模型,每個進程響應一個請求:

     一個主線程:複製生成n個子進程,子進程也稱爲工作進程,每個子進程處理一個用戶請求;即便沒有用戶請求,也會預先生成多個空閒進程,隨時等待請求到達:最大不會超過1024個。

     worker:事件驅動模型,每個線程響應n個請求;

     一個主進程,生成m個子進程,每個子進程負責生成多個線程,每個線程響應一個請求; 

     m進程,n線程:m * n

     event:事件驅動模型,每個線程響應n個請求;

     一個主進程,生成m個子進程,每個子進程直接響應n個請求    m * n 

3、httpd的功能特性    

1
2
3
4
5
6
7
支持虛擬主機:IP、Port、FQDN
支持CGI:Common Gateway Interface,通用網關接口;
支持反向代理
支持負載均衡
支持路徑別名
具有豐富的用戶認證機制:basic基本認證、digest摘要認證
支持第三方模塊

4、httpd的請求方法 

1
2
3
4
5
6
7
8
GET:請求獲取一個資源,需要服務器發送
HEAD:跟GET近似,但其不需要服務響應請求的資源,而返回響應頭部
POST:基於HTML表單向服務器提交數據,服務器通常需要存儲此數據(位置:通常爲關係型數據庫)
PUT:與GET相反,向服務器發送資源;服務器通常需要存儲此資源(位置:通常爲文件系統)
DELETE:刪除URL指向的資源
OPTIONS:探測服務器端對請求的URL所支持使用的請求方法
TRACE:跟一次請求中間所經過的代理服務器、防火牆或網關等
#注意:方法嚴格區分大小寫

5、http協議首部

1)、通用首部

1
2
3
4
Connection:定義C/S之間關於請求、響應的有關選項
Connection:keep-alive
Cache-Control:緩存控制
Via:顯示了報文經過的中間節點

2)、請求首部

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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:客戶端發送給服務器身份標識

3)、實體首部   

1
2
3
4
5
6
7
8
9
10
11
12
13
Location: 資源的新位置
Allow: 允許對此資源使用的請求方法
內容相關的首部:
Content-Encoding: 支持編碼
Content-Language:支持語言
Content-Length:文本長度
Content-Location:資源所在位置
Content-Type:主體對象類型
Content-Range:在整個資源中此實體表示的字節範圍
緩存相關:
ETag: 實體標籤
Expires: 過期期限
Last-Modified: 上次修改時間

4)、響應首部

1
2
3
4
5
6
7
8
9
10
11
12
13
Date:消息產生的時間
Age: 響應持續時間
Server: 向客戶端說明自己的程序名稱和版本
ETage:不透明驗證者
Location:URL備用的位置
Content-Length:實體的長度
Content-Tyep:實體的媒體類型
協商首部:
ary: 首部列表,服務器會根據列表中的內容挑一個最適用的版本發送給客戶端
Accept-Ranges: 對當前資源來講,服務器所能夠接受的範圍類型
跟安全相關:
WWW-Authentication:質詢,即要求客戶提供帳號和密碼
Set-Cookie:服務器端在某客戶端第一次請求時發送令牌

6、http狀態碼   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 Unavailbale,服務暫時不可用
   505:HTTP Version Not Supported,服務器不支持


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章