http知識彙總*

一、http相關知識點:

1、http協議:是一種無狀態(stateless)協議。

一次http事務(一次請求-響應的完成)結束後,鏈接立即斷開;可見每次請求都要進行3次握手,4次斷開,效率太低。


2、加速方式:

(1)、並行請求:瀏覽器一次發多個請求,服務器一次返回多個響應。現在的瀏覽器都是多線程的,都支持並行請求。

並行鏈接有缺陷:每個事務都會打開/關閉一條新的鏈接,會耗費時間和帶寬。由於TCP的慢啓動特性,每條新鏈接的性能都會有所降低。可打開的並行鏈接數實際上是有上限的。

(2)、持久鏈接也叫保持鏈接:一次請求後不立即斷開連接,等此頁面的所有請求都得到響應後在斷開。

持久鏈接的缺陷:如果持久時間過長,會導致其他請求被堵塞,造成其他客戶端的請求一直無法訪問,因此需要設置斷開持久鏈接的條件超時和最大請求數,只要滿足任何一個就會斷開持久鏈接。

對於http/1.0,要想使用KeepAlive特性,在請求時必須手動指定Connection  :keep-alive;

對於http/1.1,在請求時默認Connection :keep-alive,無需手動指定。


3、http協議的版本:

(1)、http/0.9:1991年的版本。

    A、僅用於傳輸html文本文檔。

    B、不可傳輸圖片、聲音等二進制文件。


(2)、http/1.0:

   A、引入了MIME(Multipurpose Internet Mail Extension) 採用base64編碼,

        base64能將二進制數據(圖片、聲音、視頻等)編碼成文本發送,並能夠讓

        接收方還原爲原來的格式。

   B、可見1.0已經支持多媒體數據的處理。

   C、開始引入緩存功能,不過緩存控制較差。

   D、並引入了keep-alive(保持鏈接)。


(3)、http/1.1:支持更多的請求方法,更精細的緩存控制,並支持持久鏈接。


注意:對於http/1.0要想使用KeepAlive特性,在請求時必須手動指定Connection :keep-alive

對於http/1.1,在請求時默認Connection :keep-alive,無需手動指定。


4、http的請求方法:


(1)、安全的方法:GET、HEAD


(2)、POST


(3)、PUT、DELETE、TRACE


(4)、擴展方法:LOCK、COPY、MOVE


(5)、部分請求詳解:

   GET:請求獲取一個資源,需要服務器發送

   HEAD:跟GET相似,但其不需要服務發送資源而僅傳送響應首部。

   POST:支持HTML表單提交。

   PUT:跟GET相反,向服務寫入文檔,例如上傳文件、發佈系統等。

   DELETE:請求刪除URL指向的資源,“危險”。

   TRACE:跟蹤請求要經過的防火牆,代理或者網關等。


5、http的狀態碼:

(1)、1**:信息狀態碼,很少見到。

(2)、2**:成功狀態碼。

  200:成功

(3)、3**:重定向狀態碼。


(4)、4**:客戶端類錯誤。

  403 :Forbidden 無權限,請求被服務器拒絕。

  404 :Not Found 不存在

  405 :Method Not Allowed ,不允許使用此方法請求相應的URL

(5)、5**:服務器類錯誤。

  500:Internal Server Error:服務器內部錯誤。

  502:Bad Gateway,代理服務器錯誤。

  503:Service Unavailable,服務器此時無法響應。


6、http報文格式:


(1)、http事務:一次請求以及與其對應的響應。


(2)、http方法:GET、PUT、HEAD、POST、DELETE等。


(3)、http請求:客戶端發送http請求報文。請求報文格式如下:

        <method><request-URL><version>

        <headers>(請求首部,其格式爲Name:Value)

        空白行

        <entity-body>(請求主題)


(4)、http響應:服務器端返回http響應報文。響應報文格式如下:

    <version><status>(響應的狀態碼)<reason-phrase>(狀態碼的說明信息)

    <headers>

    空白行

    <entity-body>


7、http首部:


(1)、通用首部:請求和響應都可以使用的首部。


A、Connection:定義C/S之間關於請求/響應的相關選項。

   對於http/1.0要想使用KeepAlive特性,在請求時必須手動指定Connection :keep-alive

   對於http/1.1,在請求時默認Connection :keep-alive,無需手動指定。


B、Via:顯示了報文經過的中間節點。


C、Cache-Control:緩存指示(能否緩存,緩存多久)。


D、Pragma:


(2)、請求首部:請求可以使用的首部。

A、Client-IP:客戶端IP

B、Host:請求的主機名和端口號,虛擬主機環境下用到。

C、Referer:用於指明瞭當前資源的上一個資源的URL,常用於"防盜鏈"。

  例如:一個頁面a.html中有一個超鏈接的href爲b.html;

  如果在a.html頁面中點擊b.html則b.html的Referer爲a.html

D、User-Agent用戶代理,使用什麼工具發出的請求。

      如IE瀏覽器,FireFox瀏覽器以及搜索引起的爬蟲等等。

E、Accept請求首部:用戶標明客戶自己更傾向於支持的方式。

    Accept-Charset:支持使用的字符集。

    Accept-Encoding:支持使用的編碼方式。

    Accept-Language:支持使用的語言。

F、條件請求首部:

    Expect:期望的格式

    If-Modified-Since:是否在指定時間以來修改過此資源,如果修改過發新資源。

    If-None-Match

G、跟安全相關的請求首部:

    Authorization:客戶端提交給服務器端的認證數據,如賬號和密碼。

    Cookie:客服端發送給服務器端的身份標識。


(3)、響應首部:響應可以使用的首部。

  A、Age:響應持續時間。

  B、Server:向客戶端標明服務器程序名稱和版本。

  C、Accept-Ranges:

    對當前資源來講,服務器所能接受的範圍類型,如壓縮,有的瀏覽器支持壓縮、有的不支持壓縮

  D、Set-Cookie:

    服務器端在某客戶端第一次請求時發給的令牌。

(4)、擴展首部:

    非標準首部,可能是由程序開發者創建的,例如:X-Forward-For

(5)、實體首部:

    用來指定實體屬性。

    location:資源的新位置。

    Allow:告訴客戶端允許對此資源使用的請求方法。

    Expires:過期期限

    Last-Modified:上次修改時間


二、一次web請求的基本過程:

    由客戶端發起請求,進而由內核空間接收請求,進而由內核交給用戶空間處理請求,處理過程中內核訪問資源,交由用戶空間來構建響應,進而交由內核空間發送響應,並記錄日誌。可見整個過程中經歷了由內核空間到用戶空間,再有用戶空間變爲內核空間的。訪問的資源時是由內核空間完成的。爲了提高效率可以減少資源內核空間和用戶空間間的轉換。


1、建立連接

2、接收請求

3、處理請求

4、訪問資源

5、構建響應

6、發送響應

7、記錄日誌

注:通過分析日誌記錄可以獲得UV(User View)和PV(Page View);

UV:在單位時間內多少個獨立IP訪問;

PV:在單位時間內訪問頁面的次數。

wKiom1aUmKnDWTlPAAJRUrPr7MY775.jpg



三、Web服務器I/O結構:處理的是一次web請求的基本過程的“接收請求”。


1、單進程I/O結構:

    Http服務器只有一個進程即單進程,所以一次只能服務一個請求,其他請求必須排隊。

    可見效率低下。


2、多進程I/O結構:

    爲了服務多個請求,http服務器啓動多個進程,能滿足多個用戶的請求,但服務器資源有限,所以啓動的多進程數量有限,可見也不能處理太多請求。


3、複用的I/O結構:

    單個進程響應多個請求(單進程開啓多個線程來響應多個請求)。


4、複用多進程I/O結構:

    多個進程,每個進程響應多個請求,是複用的I/O結構的擴展。


http的Client、Server、Application Server:


1、http-Client:IE、Firefox、chrome、Opera、Safari等。

2、http-Server:Httpd、Nginx、lighttpd、gws等,主要負責靜態頁面。

3、http-Application Server:IIS、tomcat、jetty、resin等,主要負責動態頁面。

注:訪問http://www.netcraft.com 查看http-Server市場調查軟件佔有率。


五、傳輸層協議:

1、Tcp:面向連接的協議。

虛連接:需三次捂手、四次斷開。

2、UDP:無連接的協議。

無需三次捂手、四次斷開,用在及時通訊如QQ、MSN聊天以及DNS解析、發電報等。


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