HTTP協議詳解

                                      HTTP協議相關詳解
javascript

--------------------------------------------------------------------------------------------------------------------------------------------php

1、css

ARPAnet是互聯網的前身html

1987年錢天白創建起一個網絡節點,經過國際長途電話撥號鏈接國際互聯網java

1990年錢天白表明中國正式在國際互聯網絡信息中心的前身DDN-NIC註冊等急了我國的頂級域名CN,而且今後開通了使用裝過頂級域名CN的國際電子郵件服務web

1993年3月租用AT&T公司的64K專線正式開通,這條專線是我國部分連入Internet的第一根專線數據庫

1994年實現與互聯網的全功能鏈接,被國際上正式認可爲有互聯網的國家apache

1996年開始提供服務編程

2、後端

image.png

3、跨Ineternet的主機間通信

一、在創建通訊鏈接的每一端,進程間的傳輸要有兩個標誌

二、ip地址和端口號,合稱爲套接字地址socket address

三、客戶機套接字地址定義了一個惟一的客戶進程

四、服務器套接字地址定義了一個惟一的服務器進程

五、httpd默認80端口

4、socket套接字

一、Socket:套接字,進程間通訊IPC的一種實現,容許位於不一樣主機(或同一主機)上不一樣進程之間進行通訊和數據交換

二、Socket API:封裝了內核中所提供的socket通訊相關的系統調用

三、Socket Domain:根據其所使用的地址

    AF_INET:Address Family,IPv4

    AF_INET6:IPv6

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

四、Socket Type:根據使用的傳輸層協議

    SOCK_STREAM:流,tcp套接字,可靠地傳遞、面向鏈接

    SOCK_DGRAM:數據報,udp套接字,不可靠地傳遞、無鏈接

    SOCK_RAW: 裸套接字,無須tcp或udp,APP直接經過IP包通訊

五、Socket套接字函數

image.png

六、套接字相關的系統調用:

    socket(): 建立一個套接字

    bind(): 綁定IP和端口

    listen(): 監聽

    accept(): 接收請求

    connect(): 請求鏈接創建

    write(): 發送

    read(): 接收

    close(): 關閉鏈接

5、再次說明端口號

image.png

所以某些服務端口號比較小,小於1023時候,普通用戶沒法直接開啓

6、HTTP服務通訊過程

一、HTTP服務通訊:上網打開一個網頁時,當網頁打開後將斷開,釋放服務器資源,這樣能夠達到更多的網站訪問

二、解封裝流程

image.png

7、HTTP術語

http:Hyper Text Transfer Protocol,超文本傳輸協議,tcp 80端口

html:Hyper Text Markup Language,超文本標記語言,編程語言

CSS:Cascading Style Sheet,層疊樣式表,定義某個標準,能夠應用到不少網頁上,按照它定義的標準執行

js:javascript,和java不要緊

MIME:Multipurpose Internet Mail Extensions,多用途互聯網郵件擴展,支持視頻圖片等多媒體格式,查看文件位置/etc/mime.types

8、HTTP協議

一、http/0.9:1991,原型版本,只有一個命令GET

二、http/1.0:1996年,支持cache,MIME,method,引入了POST命令和HEAD命令

三、http/1.1:1997年,支持持久鏈接,如今主流

    (1)持久鏈接:TCP鏈接默認不關閉,能夠被多個請求複用,對於同一個域名,大多數瀏覽器容許同時創建6個持久鏈接

    (2)引入了管道機制(pipelining),即在同一個TCP鏈接裏,客戶端能夠同時發送多個請求,進一步改進了HTTP協議的效率

    (3)同一個TCP鏈接裏,全部的數據通訊是按次序進行的。服務器只能順序處理迴應,前面的迴應慢,會有許多請求排隊,形成"隊頭堵塞"(Head-of-line blocking)

    (4)爲避免上述問題,兩種方法:一是減小請求數,二是同時多開持久鏈接。網頁優化技巧,如合併腳本和樣式表、將圖片嵌入CSS代碼、域名分片(domain sharding)等

    (5)HTTP 協議不帶有狀態,每次請求都必須附上全部信息。請求的不少字段都是重複的,浪費帶寬,影響速度

四、Spdy:2009年,谷歌研發解決http/1.1效率不高的問題

五、http/2.0:2015年

    (1)頭信息和數據體都是二進制,稱爲頭信息幀和數據幀

    (2)複用TCP鏈接,在一個鏈接裏,客戶端和瀏覽器均可以同時發送多個請求或迴應,且不用按順序一一對應,避免了「隊頭堵塞「,此雙向的實時通訊稱爲多工(Multiplexing)

    (3)引入頭信息壓縮機制(header compression),頭信息使用gzip或compress壓縮後再發送;客戶端和服務器同時維護一張頭信息表,全部字段都會存入這個表,生成一個索引號,不發送一樣字段,只發送索引號,提升速度

    (4)HTTP/2 容許服務器未經請求,主動向客戶端發送資源,即服務器推送(server push)

9、HTTP工做機制

一、工做機制

    http請求:http request

    http響應:http request

    一次http事務:請求<-->響應

    工做在應用層,基於tcp協議

二、Web資源:web resource

一個網頁由多個資源構成,打開一個頁面,會有多個資源展現出來,可是每一個資源都要單獨請求。所以,一個「Web 頁面」一般並非單個資源,而是一組資源的集合

    (1)靜態文件:無需服務端作出額外處理,文件後綴:.html, .txt, .jpg, .js, .css, .mp3, .avi

    (2)動態文件:服務端執行程序,返回執行的結果,文件後綴:.php, .jsp ,.asp

三、提升HTTP工做性能

    (1)並行鏈接:經過多條TCP鏈接發起併發的HTTP請求

    (2)持久鏈接:keep-alive,長鏈接,重用TCP鏈接,以消除鏈接和關閉的時延,以事務個數和時間來決定是否關閉鏈接,只創建一次TCP鏈接,一次三次握手和四次揮手,但後續會傳不少資源

    (3)管道化鏈接:經過共享TCP鏈接發起併發的HTTP請求

    (4)複用的鏈接:交替傳送請求和響應報文(實驗階段)

image.png

10、URI

URI: Uniform Resource Identifier 統一資源標識,分爲URL和URN

    (1)URN: Uniform Resource Naming,統一資源命名,好比說, P2P下載(相似人人爲我,我爲人人)使用的磁力連接是URN的一種實現,下載磁力連接生成的種子時候,會搜索網絡上其它主機誰有該資源,進行並行下載

    (2)URL: Uniform Resorce Locator,統一資源定位符,用於描述某服務器某特定資源位置

    (3)二者區別:URN如同一我的的名稱,而URL表明一我的的住址。換言之,URN定義某事物的身份,而URL提供查找該事物的方法。URN僅用於命名,而不指定地址

11、URL

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

一、scheme:scheme,驗證,方案,訪問服務器以獲取資源時要使用哪一種協議

二、user:用戶,某些方案訪問資源時須要的用戶名

三、password:密碼,用戶對應的密碼,中間用:分隔

四、Host:主機,資源宿主服務器的主機名或IP地址

五、port:端口,資源宿主服務器正在監聽的端口號,不少方案有默認端口號

六、path:路徑,服務器資源的本地名,由一個/將其與前面的URL組件分隔

七、params:參數,指定輸入的參數,參數爲名/值對,多個參數,用;分隔

八、query:查詢,傳遞參數給程序,如數據庫,用?分隔,多個查詢用&分隔

九、frag:片斷,一小片或一部分資源的名字,此組件在客戶端使用,用#分隔

12、網址訪問量

一、IP(獨立IP):即Internet Protocol,指獨立IP數。一天內來自相同客戶機IP地址只計算一次,記錄遠程客戶機IP地址的計算機訪問網站的次數,是衡量網站流量的重要指標

二、PV(訪問量): 即Page View, 頁面瀏覽量或點擊量,用戶每次刷新即被計算一次,PV反映的是瀏覽某網站的頁面數,PV與來訪者的數量成正比,PV並非頁面的來訪者數量,而是網站被訪問的頁面數量

三、UV(獨立訪客):即Unique Visitor,訪問網站的一臺電腦爲一個訪客。一天內相同的客戶端只被計算一次。能夠理解成訪問某網站的電腦的數量。網站判斷來訪電腦的身份是經過來訪電腦的cookies實現的。若是更換了IP後但不清除cookies,再訪問相同網站,該網站的統計中UV數是不變的

四、網站統計:http://www.alexa.cn/rank/

五、QPS:request per second,每秒請求數

六、PV,QPS,併發鏈接數換算公式

    (1)QPS=PV*頁面衍生鏈接次數/統計時間(86400)

        頁面衍生鏈接次數:頁面上的圖片視頻等資源數

    (2)併發鏈接數=QPS*http平均響應時間

七、峯值時間:天天80%的訪問集中在20%的時間裏,這20%時間爲峯值時間,二八法則

八、峯值時間每秒請求數(QPS)=(總PV數*頁面衍生鏈接次數*80%/(天天秒數*20%)

十3、web服務請求處理步驟

一、客戶端向服務器發起請求,請求裏帶有數據報文頭部,request httpd header,而請求報文頭部裏會帶有method方法(GET、POST、PUT、HEAD、DELETE等)

image.png

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

    (1)創建鏈接:接收或拒絕鏈接請求

    (2)接收請求:接收客戶端請求報文中對某資源的一次請求的過程

    Web訪問響應模型(Web I/O)

        單進程I/O模型:啓動一個進程處理用戶請求,並且一次只處理一個,多個請求被串行響應

        多進程I/O模型:並行啓動多個進程,每一個進程響應一個鏈接請求

        複用I/O結構:啓動一個進程,同時響應N個鏈接請求

        實現方法:多線程模型和事件驅動

        多線程模型:一個進程生成N個線程,每線程響應一個鏈接請求

        事件驅動:一個進程處理N個請求

        複用的多進程I/O模型:啓動M個進程,每一個進程響應N個鏈接請求,同時接收M*N個請求image.png

    (3)處理請求:服務器對請求報文進行解析,並獲取請求的資源及請求方法等相關信息,根據方法,資源,首部和可選的主體部分對請求進行處理。注:HTTP經常使用請求方式,Method:GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS

    (4)、訪問資源:服務器獲取請求報文中請求的資源web服務器,即存放了web資源的服務器,負責向請求者提供對方請求的靜態資源,或動態運行後生成的資源。注:web服務器資源路徑映射方式:docroot、alias、虛擬主機docroot、用戶家目錄docroot

    (5)構建響應報文:一旦Web服務器識別除了資源,就執行請求方法中描述的動做,並返回響應報文。響應報文中包含響應狀態碼、響應首部,若是生成了響應主體的話,還包括響應主體

        1)響應實體:若是事務處理產生了響應主體,就將內容放在響應報文中回送過去。響應報文中一般包括:

            描述了響應主體MIME類型的Content-Type首部

            描述了響應主體長度的Content-Length

            實際報文的主體內容

        2)URL重定向:web服務構建的響應並不是客戶端請求的資源,而是資源另一個訪問路徑

        3)MIME類型:

            Web服務器要負責肯定響應主體的MIME類型。多種配置服務器的方法可將MIME類型與資源管理起來

            魔法分類:Apache web服務器能夠掃描每一個資源的內容,並將其與一個已知模式表(被稱爲魔法文件)進行匹配,以決定每一個文件的MIME類型。這樣作可能比較慢,但很方便,尤爲是文件沒有標準擴展名時

            顯式分類:能夠對Web服務器進行配置,使其不考慮文件的擴展名或內容,強制特定文件或目錄內容擁有某個MIME類型

            類型協商:有些Web服務器通過配置,能夠以多種文檔格式來存儲資源。在這種狀況下,能夠配置Web服務器,使其能夠經過與用戶的協商來決定使用哪一種格式(及相關的MIME類型)"最好"

    (6)發送響應報文

    Web服務器經過鏈接發送數據時也會面臨與接收數據同樣的問題。服務器可能有不少條到各個客戶端的鏈接,有些是空閒的,有些在向服務器發送數據,還有一些在向客戶端回送響應數據。服務器要記錄鏈接的狀態,還要特別注意對持久鏈接的處理。對非持久鏈接而言,服務器應該在發送了整條報文以後,關閉本身這一端的鏈接。對持久鏈接來講,鏈接可能仍保持打開狀態,在這種狀況下,服務器要正確地計算Content-Length首部,否則客戶端就沒法知道響應何時結束了

    (7)記錄日誌

    最後,當事務結束時,Web服務器會在日誌文件中添加一個條目,來描述已執行的事務

十4、http協議

服務器沒法持續追蹤訪問者來源

解決http協議無狀態方法

cookie 客戶端存放,一個cookie文件4K,裏面的東西是鍵值對(name:value)

胖cookie:把全部信息全放在cookie裏

瘦cookie:只放關鍵的信息,惟一的id信息,根據id信息從服務器端的session中查找

session 服務端存放

十5、HTTP請求報文

image.png

十6、HTTP響應報文

image.png

十7、報文解釋

報文語法格式:

一、request報文

<method> <request-URL> <version>

<headers>

<entity-body>

二、response報文

<version> <status> <reason-phrase>

<headers>

<entity-body>

三、method: 請求方法,標明客戶端但願服務器對資源執行的動做

GET、HEAD、POST等

四、version:

HTTP/<major>.<minor>

五、status:

三位數字,如200,301, 302, 404, 502; 標記請求處理過程當中發生的狀況

六、reason-phrase:

狀態碼所標記的狀態的簡要描述

七、headers:

每一個請求或響應報文可包含任意個首部;每一個首部都有首部名稱,後面跟一個冒號,然後跟一個可選空格,接着是一個值

八、entity-body:請求時附加的數據或響應時附加的數據

九、Method 方法:

GET:從服務器獲取一個資源

HEAD:只從服務器獲取文檔的響應首部

POST:向服務器輸入數據,一般會再由網關程序繼續處理

PUT:將請求的主體部分存儲在服務器中,如上傳文件

DELETE:請求刪除服務器上指定的文檔

TRACE:追蹤請求到達服務器中間通過的代理服務器

OPTIONS:請求服務器返回對指定資源支持使用的請求方法

十、協議查看或分析的工具:tcpdump, wireshark,tshark

十8、常見狀態碼

一、狀態碼分類

1xx:100-101信息提示

2xx:200-206成功

3xx:300-305重定向

4xx:400-415錯誤類信息,客戶端錯誤

5xx:500-505錯誤類信息,服務器端錯誤

二、經常使用狀態碼

200:成功,請求數據經過響應報文的entity-body部分發送;OK

301:請求的URL指向的資源已經被刪除;但在響應報文中經過首部Location指明瞭資源如今所處的新位置;Moved Permanently,永久重定向,該域名將被淘汰

302:響應報文Location指明資源臨時新位置Moved Temporarily,臨時重定向,域名保留

304:客戶端發出了條件式請求,但服務器上的資源不曾發生改變,則經過響應此響應狀態碼通知客戶端;Not Modified,利用瀏覽器自身的緩存進行響應

401:須要輸入帳號和密碼認證方能訪問資源;Unauthorized

403:請求被禁止;Forbidden

404:服務器沒法找到客戶端請求的資源;Not Found

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

502:代理服務器從後端服務器收到了一條僞響應,如沒法鏈接到網關;Bad Gateway

503:服務不可用,臨時服務器維護或過載,服務器沒法處理請求

504:網關超時

十9、HTTP首部字段

一、HTTP 首部字段包含的信息最爲豐富。首部字段同時存在於請求和響應報文內,並涵蓋HTTP 報文相關的內容信息。使用首部字段是爲了給客服端和服務器端提供報文主體大小、所使用的語言、認證信息等內容

二、首部字段結構HTTP 首部字段是由首部字段名和字段值構成的,中間用冒號「:」分隔

三、字段值對應單個HTTP 首部字段能夠有多個值

四、報文首部中出現了兩個或以上具備相同首部字段名的首部字段時,在規範內還沒有明確,根據瀏覽器內部處理邏輯的不一樣,優先處理的順序可能不一樣,結果可能並不一致

二10、HTTP協議首部

一、首部的分類:

(1)通用首部:請求報文和響應報文兩方都會使用的首部

(2)請求首部:從客戶端向服務器端發送請求報文時使用的首部。補充了請求的附加內容、客戶端信息、請求內容相關優先級等信息

(3)響應首部:從服務器端向客戶端返回響應報文時使用的首部。補充了響應的附加內容,也會要求客戶端附加額外的內容信息

(4)實體首部:針對請求報文和響應報文的實體部分使用的首部。補充了資源內容更新時間等與實體有關的的信息

(5)擴展首部

二、通用首部:

Date: 報文的建立時間

Connection:鏈接狀態,如keep-alive, close

Via:顯示報文通過的中間節點(代理,網關)

Cache-Control:控制緩存,如緩存時長

MIME-Version:發送端使用的MIME版本

Warning:錯誤通知

二11、http協議

一、請求首部:

Accept:通知服務器本身可接受的媒體類型

Accept-Charset:客戶端可接受的字符集

Accept-Encoding:客戶端可接受編碼格式,如gzip

Accept-Language:客戶端可接受的語言

Client-IP: 請求的客戶端IP

Host: 請求的服務器名稱和端口號

Referer:跳轉至當前URI的前一個URL

User-Agent:客戶端代理,瀏覽器版本

二、條件式請求首部:

Expect:容許客戶端列出某請求所要求的服務器行爲

If-Modified-Since:自從指定的時間以後,請求的資源是否發生過修改

If-Unmodified-Since:與上面相反

If-None-Match:本地緩存中存儲的文檔的ETag標籤是否與服務器文檔的Etag不匹配

If-Match:與上面相反

三、安全請求首部:

Authorization:向服務器發送認證信息,如帳號和密碼

Cookie: 客戶端向服務器發送cookie

四、代理請求首部:

Proxy-Authorization: 向代理服務器認證

五、響應首部:

信息性:

Age:從最初建立開始,響應持續時長

Server:服務器程序軟件名稱和版本

協商首部:某資源有多種表示方法時使用

Accept-Ranges:服務器可接受的請求範圍類型

Vary:服務器查看的其它首部列表

安全響應首部:

Set-Cookie:向客戶端設置cookie

WWW-Authenticate:來自服務器對客戶端的質詢列表

六、實體首部:

Allow: 列出對此資源實體可以使用的請求方法

Location:告訴客戶端真正的實體位於何處

Content-Encoding:對主體執行的編碼

Content-Language:理解主體時最適合的語言

Content-Length: 主體的長度

Content-Location: 實體真正所處位置

Content-Type:主體的對象類型,如text

緩存相關:

ETag:實體的擴展標籤

Expires:實體的過時時間

Last-Modified:最後一次修改的時間

二12、APR

APR:apache運行的可移植庫,apache基於apr開發,不直接面對操做系統,各系統針對各系統開發各自APR,他們最後開發出來了一個共同的APR的API接口,apache就基於這個APR的API接口之上,apache的其餘應用軟件也在這個接口上

相關文章
相關標籤/搜索