HTTP協議介紹

HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是互聯網上應用最為廣泛的一種網絡協議。所有的WWW文件都必須遵守這個標準。

本節索引

一、套接字概念

二、HTTP相關術語

三、HTTP工作機制

四、HTTP請求、響應報文格式

五、網站訪問量統計

六、HTTP狀態碼

 

HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是互聯網上應用最為廣泛的一種網絡

協議。所有的WWW文件都必須遵守這個標準。

HTTP是一個基于TCP/IP通信協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。

 

一、套接字概念

跨Internet的主機間通訊時,在建立通信連接的每一端,進程間的傳輸要有兩個標志:

IP地址和端口號,合稱為套接字地址(socket address)

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

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

套接字

Socket:套接字,進程間通信IPC的一種實現,允許位于不同主機(或同一主機)上

不同進程之間進行通信和數據交換,SocketAPI出現于1983年,4.2 BSD實現

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或tdp,APP直接通過IP包通信

 

套接字相關的系統調用:

socket(): 創建一個套接字

bind():綁定IP和端口

listen():監聽

accept():接收請求

connect():請求連接建立

write():發送

read():接收

close():關閉連接

 

 

相關通信過程如下圖:

http通信服務過程

 

二、HTTP相關術語

http:Hyper Text Transfer Protocol, 80/tcp

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

示例:

<html>

<head>

<title>html語言</title>

</head>

<body>

<h1>標題1</h1>

<p><a href=http://www.wxlinux.com>你好</a>歡迎訪問</p>

<h2>標題2</h2>

</body>

</html>

 

CSS: Cascading Style Sheet 層疊樣式表

 

js: javascript?

 

MIME:?Multipurpose Internet Mail Extensions

多用途互聯網郵件擴展 /etc/mime.types

格式:major/minor

text/plain

text/html

text/css

image/jpeg

image/png

video/mp4

application/javascript

參考:http://www.w3school.com.cn/media/media_mimeref.asp

 

URI(Uniform Resource Identifier)統一資源標識,分為URL和URN

 

URN: Uniform Resource Naming,統一資源命名

示例: P2P下載使用的磁力鏈接是URN的一種實現

magnet:?xt=urn:btih:660557A6890EF888666

URL: Uniform Resorce Locator,統一資源定位符,用于描述某服務器某特定資

源位置

 

URN與URL區別:

URN如同一個人的名稱,而URL代表一個人的住址。換言之,URN定義某事物的身份,

而URL提供查找該事物的方法。URN僅用于命名,而不指定地址

 

URL的組成

格式:

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

schame:方案,訪問服務器以獲取資源時要使用哪種協議

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

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

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

port:端口,資源宿主服務器正在監聽的端口號,很多方案有默認端口號

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

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

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

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

 

示例:

http://www.wxlnux.com:8080/images/logo.jpg

ftp://wang:password@172.16.0.1/pub/linux.ppt

rtsp://videoserver/video_demo/

Real Time Streaming Protocol

http://www.wxlinux.com/bbs/hello;gender=f/send;type=title

https://list.jd.com/list.html?cat=670,671,672&ev=149_2992&sort=sort_t

otalsales15_desc&trans=1

 

 

目前主流使用的http版本有1.1版本2.0版本

 

http/1.1:1997年1月

1)引入了持久連接(persistent connection),即TCP連接默認不關閉,可以被多個請求

復用,不用聲明Connection: keep-alive。對于同一個域名,大多數瀏覽器允許同時建

立6個持久連接

2)引入了管道機制(pipelining),即在同一個TCP連接里,客戶端可以同時發送多個請

求,進一步改進了HTTP協議的效率

3)新增方法:PUT、PATCH、OPTIONS、DELETE

4)同一個TCP連接里面,所有的數據通信是按次序進行的。服務器只能順序處理回應,

前面的回應慢,會有許多請求排隊,造成”隊頭堵塞”(Head-of-line blocking)

5)為避免上述問題,兩種方法:一是減少請求數,二是同時多開持久連接。網頁優化技

巧,比如合并腳本和樣式表、將圖片嵌入CSS代碼、域名分片(domain sharding)等

6)HTTP 協議不帶有狀態,每次請求都必須附上所有信息。請求的很多字段都是重復的,

浪費帶寬,影響速度

 

Spdy:2009年,谷歌研發,解決 HTTP/1.1 效率不高問題

http/2.0:2015年

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

2)復用TCP連接,在一個連接里,客戶端和瀏覽器都可以同時發送多個請求或

回應,且不用按順序一一對應,避免了“隊頭堵塞“,此雙向的實時通信稱為

多工(Multiplexing)

3)引入頭信息壓縮機制(header compression),頭信息使用gzip或compress

壓縮后再發送;客戶端和服務器同時維護一張頭信息表,所有字段都會存入

這個表,生成一個索引號,不發送同樣字段,只發送索引號,提高速度

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

(server push)

 

三、HTTP工作機制

工作機制:

http請求:http request

http響應:http response

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

請求相應模型

 

http協議:stateless 無狀態

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

解決http協議無狀態方法

cookie? 客戶端存放

session 服務端存放

 

Cookie

HTTP 是一種無狀態協議。協議自身不對請求和響應之間的通信狀態進行保存。

也就是說在 HTTP 這個級別,協議對于發送過的請求或響應都不做持久化處理。

這是為了更快地處理大量事務,確保協議的可伸縮性,而特意把 HTTP 協議設

計成如此簡單的??墒请S著 Web 的不斷發展,很多業務都需要對通信狀態進行

保存。于是引入了 Cookie 技術。使用 Cookie 的狀態管理Cookie 技術通過在

請求和響應報文中寫入 Cookie 信息來控制客戶端的狀態。Cookie 會根據從服

務器端發送的響應報文內的一個叫做 Set-Cookie 的首部字段信息,通知客戶端

保存Cookie。當下次客戶端再往該服務器發送請求時,客戶端會自動在請求報

文中加入 Cookie 值后發送出去。服務器端發現客戶端發送過來的 Cookie 后,

會去檢查究竟是從哪一個客戶端發來的連接請求,然后對比服務器上的記錄,

最后得到之前的狀態信息

cookie

Web資源:web resource

一個網頁由多個資源構成,打開一個頁面,會有多個資源展示出來,但是每個資源都

要單獨請求。因此,一個“Web 頁面”通常并不是單個資源,而是一組資源的集合

靜態文件:無需服務端做出額外處理

??? 文件后綴:.jpg, .html, .txt, .js, .css, .mp3, .avi

動態文件:服務端執行程序,返回執行的結果

文件后綴:.asp, .php, .jsp

 

提高HTTP連接性能

并行連接:通過多條TCP連接發起并發的HTTP請求

持久連接:keep-alive,長連接,重用TCP連接,以消除連接和關閉的時延,以事

務個數和時間來決定是否關閉連接

管道化連接:通過共享TCP連接發起并發的HTTP請求

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

 

串行連接:

串行連接

并行連接:

并行連接

串行、持久連接和管道化連接

持久連接

 

四、HTTP請求、相應報文格式

request報文

<method> <request-URL> <version>

<headers>

<entity-body>

請求報文

response報文

<version> <status> <reason-phrase>

<headers>

<entity-body>

響應報文

 

Method:

請求方法:標明客戶端希望服務器對資源執行的動作

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

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

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

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

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

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

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

version:

HTTP/<major>.<minor>

status:

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

reason-phrase:

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

headers:

每個請求或響應報文可包含任意個首部;每個首部都有首部名稱,后面跟一

個冒號,而后跟一個可選空格,接著是一個值

entity-body:

請求時附加的數據或響應時附加的數據

 

五、網站訪問量統計

IP(獨立IP):即Internet Protocol,指獨立IP數。一天內來自相同客戶機IP地址只

計算一次,記錄遠程客戶機IP地址的計算機訪問網站的次數,是衡量網站流量

的重要指標

PV(訪問量): 即Page View, 頁面瀏覽量或點擊量,用戶每次刷新即被計算一

次,PV反映的是瀏覽某網站的頁面數,PV與來訪者的數量成正比,PV并不是頁

面的來訪者數量,而是網站被訪問的頁面數量

UV(獨立訪客):即Unique Visitor,訪問網站的一臺電腦為一個訪客。一天內相

同的客戶端只被計算一次??梢岳斫獬稍L問某網站的電腦的數量。網站判斷來

訪電腦的身份是通過來訪電腦的cookies實現的。如果更換了IP后但不清除

cookies,再訪問相同網站,該網站的統計中UV數是不變的

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

 

網站訪問統計示例:

甲乙丙三人在同一臺通過ADSL上網的電腦上(中間沒有斷網),分別訪問

www.wxlinux.com網站,并且每人各瀏覽了2個頁面,那么網站的流量統計是:

IP: 1 ? PV:6 ? UV:1

若三人都是ADSL重新撥號后,各瀏覽了2個頁面,則

IP: 3 ? PV:6 ? UV:1

 

QPS:request per second,每秒請求數

QPS= PV* 頁?衍生連接次數/ 統計時間(86400)

并發連接數 =QPS * http平均響應時間

峰值時間:每天80%的訪問集中在20%的時間里,這20%時間為峰值時間

峰值時間每秒請求數(QPS)=( 總PV數 *頁?衍?連接次數)*80% ) / ( 每天秒數* 20% )

 

六、HTTP狀態碼

HTTP狀態碼由三個十進制數字組成,第一個十進制數字定義了狀態碼的類型,后兩個數字沒有分類的作

用。

HTTP狀態碼共分為5種類型:

狀態碼分類

HTTP狀態碼列表:

1**:信息

1

2**:成功

2

3**:重定向

3

4**:客戶端錯誤

4-1

4-2

5**:服務器錯誤

5

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/101244

(1)
wangxczwangxcz
上一篇 2018-06-19
下一篇 2018-06-20

相關推薦

欧美性久久久久