HTTP服務介紹
摘自
https://mp.weixin.qq.com/s?__biz=MzI4NDM5NzE4Ng==&mid=2247484093&idx=1&sn=3d87e9772ffb3c9b0d40f7898970f4da&chksm=ebfd5950dc8ad046bd609e8837a401393e269fa9479afc856069c21921c5f88c5737df31b076&mpshare=1&scene=23&srcid=1115xvpAyaFpOzYhphGrqnwF#rd
一、HTTP服務介紹
1 簡述使用者訪網站流程
a 進行域名資訊的DNS解析 dig +trace 獲得www.oldboyedu.com ip地址資訊
b 進行與網站伺服器建立連線,tcp三次握手過程
(syn ack SEQ ACK/狀態轉換 closed listen syn_sent syn_rcvd established )
c 和網站伺服器資料傳輸過程(http協議原理過程-http請求過程) 檢視方法curl -v/wget --debug
d 和網站伺服器資料傳輸過程(http協議原理過程-http響應過程)
e 進行與網站伺服器斷開連線,tcp四次揮手過程
(fin ack SEQ ACK/狀態轉換 fin_wait1 fin_wait2 close_wait last_ack time_wait closing )
1.1 DNS解析原理
01. 檢視本地主機快取和hosts檔案有沒有域名與IP對應記錄
02. 本地主機向local DNS伺服器(網絡卡上指定配置的DNS伺服器)發出請求(遞迴查詢)
03. LOCAL DNS伺服器接收到客戶端主機請求,查詢本地快取資訊
04. LOCAL DNS服務向根域名伺服器請求,向頂級域名伺服器請求,向二級域名伺服器請求(迭代查詢)
05. 獲取到域名與IP地址的對應關係,是通過授權DNS服務中獲取得到(得到的資訊稱為A記錄)
LOCAL DNS服務進行快取A記錄資訊,將A記錄資訊傳送給客戶端主機
06. 客戶端主機接收到A記錄資訊,進行本地快取,根據A記錄中記錄IP地址資訊,進行網路訪問
1.2 dns樹狀結構圖
1.3 DNS域名解析,獲悉域名對應IP地址(windows)
査看有關DNS資訊方法(windows主機上):
1> 査看windows客戶端本地快取的DNS解析記錄的命令如下。
c:\>ipconfig /displaydns <-意思是display the contents of the DNS Resolver
(顯示DNS CACHE內容),"/displaydns"前面有空格
2> 清除windows客戶端本地快取的DNS解析記錄的命令如下。
c:\>ipconfig /flushdns <-意思為Purges the DNS Resolver cache"
(清除DNS CACHE內容),"/displaydns"前面有空格
3> windows系統下hosts域名解析記錄的位置如下。
c:\Windows\system32\drivers\etc\hosts
1.4 linux上實現DNS快取
nscd bind dnsmasq
2 HTTP協議知識介紹
2.1 什麼是HTTP協議
HTTP協議,全稱HyperText Transfer Protocol,中文名為超文字傳輸協議,是網際網路中最常用的一種網路協議。 HTTP的重要應用之一是 WWW服務。設計 HTTP協議最初的目的就是提供一種釋出和接收HTML (一種頁面標記語言)頁面的方法。
HTTP協議是網際網路上常用的通訊協議之一。它有很多的應用,但最流行的就是用於Web瀏覽器和Web伺服器之間的通訊,即WWW應用或稱Web應用。
www ,全稱World Wide Web ,常稱為Web ,中文譯為"全球資訊網:它是目前網際網路上最受使用者歡迎的資訊服務形式。 HTTP協議的WWW服務應用的預設埠為80,另外一個加密的WWW服務應用https的預設埠為443,主要用於網銀、支付等和錢相關的業務。當今,HTTP服務、WWW服務、Web服務三者的概念已經混淆了,都是指當下最常見的網站服務應用。
2.2 HTTP協議版本
HTTP/1.0 規定瀏覽器和伺服器只保持短暫的連線(TCP短連結)
HTTP/1.1 支援持久連線,在一個TCP連線上可以傳送多個HTTP請求和響應,減少了建立和關閉連線的消耗和時間延遲(TCP長連線)
3 http協議原理過程
再linux系統中參看報文的方法
curl -v ---顯示訪問域名請求報文與響應報文資訊
curl www.baidu.com -v
> 表示http請求報文 <表示http的響應報文
wget --debug www.baidu.com
3.1 響應http請求方法
HTTP方法 | 作用描述 |
GET | 客戶端請求指定資源信悤,伺服器返回指定資源 |
HEAD | 只請求響應報文中的 HTTP首部 |
POST | 將客戶端的資料提交到伺服器,例:登錄檔單 |
PUT | 用從客戶端向伺服器傳送的資料取代指定的文件內容。 |
DELETE | 請求伺服器刪除 Request-URI所表示的資源。 |
MOVE | 請求伺服器將指定的頁面移至另一個網路地址。 |
3.2 http請求過程
HTTP請求報文格式 | ||
請求報文格式 | 報文資訊 | 說明 |
請求行 | GET / HTTP/1.1 | 請求的起始行(請求什麼資訊;協議版本) |
請求頭 | User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 Host: www.baidu.com Accept: */* |
請求的頭部資訊(客戶端有關資訊說明) |
空行 | 空行資訊(隔離上下文,說明請求結束) | |
請求報文主體 | 請求主體內容(只有POST 方法可以提交主體) |
① 請求頭資訊說明
請求頭內容 | 說明 |
Host | 接受請求的伺服器地址,可以是IP:埠號,也可以是域名 |
User-Agent | 傳送請求的應用程式名稱 |
Connection | 指定與連線相關的屬性,如Connection:Keep-Alive |
Accept-Charset | 通知服務端可以傳送的編碼格式 |
Accept-Encoding | 通知服務端可以傳送的資料壓縮格式 |
3.3 http響應過程
HTTP響應報文格式 | ||
請求報文格式 | 報文資訊 | 說明 |
起始行(響應行) | HTTP/1.1 200 OK | 響應的起始行(響應狀態碼 狀態資訊) |
響應頭部 | Server: bfe/1.0.8.18 Date: Mon, 23 Oct 2017 02:50:36 GMT Content-Type: text/html Content-Length: 2381 Last-Modified: Mon, 23 Jan 2017 13:27:32 GMT Connection: Keep-Alive ETag: "588604c4-94d" Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform Pragma: no-cache Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/ Accept-Ranges: bytes |
響應的頭部資訊(伺服器有關資訊介紹) |
空行 | 空行資訊(隔離上下文,說明響應頭部結束) | |
響應報文主體 | <!DOCTYPE html> …… |
響應主體的內容(請求後進行響應的返回的內容 資訊) |
① 響應頭資訊說明
響應頭 | 說明 |
Server | 伺服器應用程式軟體的名稱和版本 |
Content-Type | 響應正文的型別(是圖片還是二進位制字串) |
Content-Length | 響應正文長度 |
Content-Charset | 響應正文使用的編碼 |
Content-Encoding | 響應正文使用的資料壓縮格式 |
Content-Language | 響應正文使用的語言 |
4 HTTP協議狀態碼
HTTP狀態碼(HTTP Status Code )是用來表示Web伺服器響應HTTP請求狀態的數字程式碼。每當Web客戶端向Web伺服器傳送一個HTTP請求時,Web伺服器都會返回一個狀態響應程式碼。這個狀態碼是一個三位數字程式碼,作用是告知Web客戶端此次請求是否成功,或者是否要採取其他的動作方式。
4.1 HTTP協議狀態碼介紹
curl -v www.oldboyedu.org ---可以獲取狀態碼資訊
********************************************************************
擴充套件命令說明:通過curl命令只獲取狀態碼資訊
curl -I www.oldboyedu.com|awk 'NR==1{print $2}'
curl -I -s www.oldboyedu.com |awk 'NR==1{print $2}'
curl -I -s -w %{http_code} www.oldboyedu.com
curl -I -s -w %{http_code} -o /dev/www.oldboyedu.com
curl -I -s -w "%{http_code}\n" -o /dev/null www.oldboyedu.com
curl -s -w "%{http_code}\n" -o /dev/null www.oldboyedu.com
curl -I -s www.oldboyedu.com|head -1
curl -I 10.0.0.7 2>/dev/null|head -1
********************************************************************
4.2 不同範圍的狀態碼及其對應的作用
狀態碼範圍 | 作用描述 |
100 - 199 | 用於指定客戶端相應的某些動作 |
200 - 299 | 用於表示請求成功 |
300 - 399 | 用於己經移動的檔案,並且常被包含在定位頭資訊中指定新的地址系資訊 |
400 - 499 | 用於指出客戶端的錯誤 |
500 - 599 | 用於指出服務端的錯誤 |
4.3 常見的狀態碼
程式碼 | 程式碼說明 |
301 Moved Permanently(永久跳轉) | 請求的網頁已永久跳轉到新位置 |
403 Forbidden(禁止訪問) | 伺服器拒絕請求 |
404 - Not Found, | 伺服器找不到請求的頁面 |
500 | 內部伺服器錯誤 |
502 | 壞的閘道器,一般是閘道器伺服器請求後端服務時,後端服務沒有按照http協議正確返回結果 |
503 - Service Unavailable (服務當前不可用) |
可能因為超載或停機維護 |
504 - Gateway Timeout (閘道器超時) |
一般是閘道器伺服器請求後端服務時,後端服務沒有在特定的時間內完成服務。 |
二、HTTP資源
1 媒體資源
網際網路上的資料有很多不同的型別,Web伺服器會把通過Web傳輸的每個物件都打上MIME型別(即MIME type)的資料格式標籤。最初設計MIME(Multipurpose Internet Mall Extension,多用途因特網郵件擴充套件)是為了解決在不同的電子郵件系統之間搬移報文時存在的問題.MIME在電子郵件系統中工作得非常好。後來,HTTP也支援了這個功能,用它來描述資料並標記不同的資料內容型別。
當Web伺服器響應HTTP謫求時,會為每一個HTTP物件資料加一個MIME型別,當Web瀏覽器獲取到伺服器返回的物件時,會去査看相關的MIME型別,並進行相應處理。
MIME型別存在與HTTP響應報文的響應頭部信患裡,它是一種文字標記,表示一種主要的物件型別和一個特定的子型別,中間由一條斜槓來分割。
1.1 MIME媒體資源
web服務可以處理的資源型別,根據副檔名進行識別(html css mp4)
1.2 url/uri
url:URL,全稱為Uniform Resource Location,中文翻譯為統一資源定位符
uri:URI,全稱為Uniform Resource Identifier,中文翻譯為統一資源識別符號
URN:統一資源名稱 (Uniform Resource Name, URN),是URI兩種形式之一。
QPS: 每秒鐘處理完請求的次數;注意這裡是處理完。具體是指發出請求到伺服器處理完成功返回結果。可以理解在server中有個counter,每處理一個請求加1,1秒後counter=QPS。
TPS:每秒鐘處理完的事務次數,一般TPS是對整個系統來講的。一個應用系統1s能完成多少事務處理,一個事務在分散式處理中,可能會對應多個請求,對於衡量單個介面服務的處理能力,用QPS比較多。
併發量:系統能同時處理的請求數
RT:響應時間,處理一次請求所需要的平均處理時間
計算關係:
QPS = 併發量 / 平均響應時間
併發量 = QPS * 平均響應時間
例如
網址: http://reg.jd.com/reg/person?ReturnUrl=https%3A//www.jd.com/
http://reg.jd.com --- 稱為url
/reg/person?ReturnUrl=https%3A//www.jd.com/ --- 稱為uri
說明:nginx軟體識別url和uri的方式和上面說明一致
2 網頁資源種類
靜態網頁資源
動態網頁資源
偽靜態網頁資源
2.1 靜態網頁資源
請求響應資訊,發給客戶端進行處理,由瀏覽器進行解析,顯示的頁面稱為靜態頁面
在網站設計中,純粹HTML格式的網頁(可以包含圖片、視訊JS (前端功能實現)、CSS (樣式)等)通常被稱為"靜態網頁"
靜態頁面資源特徵:
01. 處理檔案型別:如.html、jpg、.gif、.mp4、.swf、.avi、.wmv、.flv等-
02. 地址中不含有問號"?"或&等特殊符號。
03. 儲存在網站伺服器檔案系統上的,是實實在在儲存在伺服器上的檔案實體
04. 網頁內容是固定不變的,因此,容易被搜尋引擎收錄
05. 網頁頁面互動性交差,因為不能與資料庫配合
06. 網頁程式在使用者瀏覽器端解析,當客戶端向伺服器請求資料時,伺服器會直接從磁碟檔案系統上返回資料(不做任何解析)
優勢:
01. 訪問的效率比較高
02. 網頁內容是固定不變的,因此,容易被搜尋引擎收錄
03. 網頁程式在使用者瀏覽器端解析,當客戶端向伺服器請求資料時,伺服器會直接從磁碟檔案系統上返回資料(不做任何解析)
劣勢:
01. 網頁頁面互動性交差,因為不能與資料庫配合
02. 儲存在網站伺服器檔案系統上的,是實實在在儲存在伺服器上的檔案實體
2.2 動態網頁資源
所謂的動態網頁是與靜態網頁相對而言的,也就是說,動態網頁的URL字尾不是.html .htm、.xml、.shtml、.js css 等靜態網頁的常見副檔名形式,而是.asp、.aspx、.php、.js、.do、.cgi等形式
請求響應資訊,發給屎務端進行處理,由服務端處理完成,將資訊返回給客戶端,生成的頁面稱為動態頁面
動態網頁資源特點:
01. 網覓副檔名字尾常見為:.asp、.aspx、.php、.js、.do、.cgi
02. 網頁頁面互動性強,可以與資料庫配合
03. 地址中含有問號"?"或 & 等特殊符號
04. 不便於被搜尋引擎收錄
優勢:
01.客戶端與服務端互動能力強
劣勢:
01.訪問的效率比較低
02.不便於被搜尋引擎收錄
2.3 偽靜態網頁資源
將動態頁面偽裝成靜態頁面,便於被搜尋引擎收錄
將動態頁面轉換為靜態頁面的方式(rewrite 正則表示式)
將動態頁面內容轉換為靜態頁面,去掉動態頁面uri地址中的? &字元,偽裝成靜態頁面uri資訊
動態轉靜態(開發來配合完成)
3 網站流量度量術語
3.1 獨立IP數度量值
獨立IP數是指不同IP地址的計算機訪問網站時被計算的總次數
在一個區域網內多個主機進行訪問相同的網站地址時,獨立IP數記為多少?
一般一天內(00:00-24:00)相同IP地址的客戶端訪問網站頁面只會被計一次
記錄獨立IP的時間可為一天或一個月,目前通用的標準為"一天"。
3.2 頁面瀏覽次數PV
頁面瀏覽量或點選量
3.3 獨立訪客數UV
根據http請求報文:瀏覽器版本,OS
根據http響應報文:cookie(id)
cookie(id) 將服務端的資訊儲存到客戶端
session 將客戶端資訊儲存到伺服器
3.4 【擴充套件知識】cookie和session區別
① cookie介紹說明
cookie 存放在瀏覽器快取中---瀏覽器進行檢視(谷歌)
【設定裡面】---【顯示高階設定】---【隱私設定】---【內容設定】---【所有cookie和內容設定】
PS:cookie的格式資訊是由開發人員進行定義,所以不同的網站所生成的cookie資訊內容不太一致
cookie 資料存放在客戶的瀏覽器上
cookie 不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙
cookie 不佔用伺服器端資源,提升了伺服器效能
cookie 儲存的資料不能超過4K,很多瀏覽器都限制一個站點最多儲存20個cookie。
② session介紹說明
session 存放在伺服器的記憶體中
session 資料放在伺服器上
session 從資料庫的安全應用方面會更安全些
session 會在一定時間內儲存在伺服器上。當訪問增多,會比較佔用你伺服器的效能
③ 建議性說明:
將登陸資訊等重要資訊存放為SESSION
其他資訊如果需要保留,可以放在COOKIE中
4 IP PV UV 統計度量的方法
4.1 IP pv 統計度量的方法
1)利用awk或者相應統計命令,進行分析訪問日誌資訊進行統計
2)在網站訪問頁面中嵌入統計程式程式碼(頁面結尾處),只有全部網頁載入完畢後,才進行資料統計
[[email protected] ~]# curl -s www.oldboyedu.com|grep "hm.baidu" --color -C5
</script>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?9aa800f882f575237396648643111698";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<script src="https://s95.cnzz.com/z_stat.php?id=1261663735&web_id=1261663735" language="JavaScript"></script>
說明:利用hm.baidu.com在頁面curl時會出現,利用百度進行統計PV IP資訊
利用第三方公認的統計工具進行統計,例如:百度統計工具 hm.baidu.com
4.2 UV統計度量的方法
通過客戶端HTTP請求報文分析
通過Cookie資訊鑑別統計
4.3 工作中常用的統計工具
網頁資訊統計軟體-piwik pwiki統計工具:(https://piwik.org/) pwiki演示頁面:https://piwik.org/demo
ELK軟體介紹說明 http://blog.oldboyedu.com/elk/
5 網站併發連線說明
5.1 如何理解網站併發的概念
A種理解:網站伺服器每秒能夠接收的最大使用者請求數。
B種理解:網站伺服器每秒能夠響應的最大使用者請求數。
C種理解:網站伺服器在單位時間內能夠處理的最大連線數。(推薦)
ss -lntup|grep 80
netstat -lntup|grep 80
5.2 網站併發概念舉例說明
飯店吃飯/酒店住宿舉例
我們去餐館吃飯,餐館裡一共有10張卓,每張桌最多坐4個人同時吃飯,那麼按一般人的理解,這個餐館能夠接收的併發吃飯人數為10M ,即40個併發,其實這裡就沒有考慮時間問題,1秒併發可以是40個,10分鐘內併發也是40個。因為這裡還有一個因素,就是每個人吃飯時長的問題,如果平均每個人10分鐘吃完,那麼可以說10分鐘內,這個餐館的併發為40個,而不是每秒鐘併發40個,因為,第一秒可以是40個人同時進來,但是第二秒就無人可進了(滿員了),如果說10分鐘併發是40個,下一個10分鐘還是40個,第三個10分鐘還可以是40個。即網站伺服器在單位時間內能夠處理的最大連線數。
高速公路通車舉例說明
高速公路每個方向都有兩條車道,那麼,同一時刻併發的車輛為兩輛,並且併發可以永遠為2 ,如果按秒計算,每秒的併發可能就有十幾輛,這個例子和餐館不同,因為高速路處理併發不需要處理時間。但是對於Web伺服器來講,是需要花費時間處理請求的,這個請求可能是1秒或數秒,因此說,併發不應該只是使用者訪問的請求數,而應是伺服器同時處理的併發數,並且單位時間不一定是1秒,可能是一個連線處理週期內的連線數。
5.3 網站併發統計計算方法
netstat -an|grep -i “est”|wc -l
ss -ant|grep -ic est
說明: 在 nginx web服務中相應的軟體模組進行統計
5.4 統計公式說明
例如:某網站的併發是5000。意味著單位時間內(理解為1秒或數秒內),正在處理的連線數,正在建立的連線數,加起來一共是5000個。
下面是國外學者對網站併發數的計算公式及參考說明:
Request Per Second + Simultaneous Browser connections + Thinking Time = Concurrent User
其中:
Concurrent User 表示網併發使用者總數一
Request Per Second[RPS]表示每秒請求數(吞吐量
Simultaneous Browser connections[SBC]表示併發瀏覽連線數。
Thinking Time表示平均使用者思考時間。
5.1 有關網站度量Linux企業運維問題
常見的面試題如下:
1)請問你如何理解網站併發?
2)你們公司網站訪問量是多少?是怎麼計算的?
—定要理解IP、PV、併發量這3個點的知識,在回答時才能有的放矢,這三個點的多少決定面試時說多大的架構,對於沒有經驗的新手不能在介紹有幾萬PV的同時描述數十臺的叢集架構,這樣就尷尬了。
關於網站訪問指標的計算,可以考慮:
運維部門的日誌分析。
開發在頁面嵌入的JS程式(用於統計、收集、分析)。
運營市場通過第三方公司提供的工具進行統計,例如GA統計。
6 HTTP協議
所有的協議,都是為軟體提供服務的
利用HTTP協議的軟體,稱為www服務軟體或者web服務軟體
6.1 web服務軟體分類
① 靜態解析web服務軟體
Apache:這是中小型Web服務的主流,Web伺服器中的老大哥。
Nginx:大型網站Web服務的主流,曾經Web伺服器中的初生牛犢,現已長大。
Nginx的分支Tengine(http://tengine.taobao.org/)目前也在飛速發展。
Lighttpd:這是一個不溫不火的優秀Web軟體,社群不活躍,靜態解析效率很高。
在Nginx流行前,它是大併發靜態業務的首選,
國內百度貼吧、豆瓣等眾多網站都有Lighttpd奮鬥的身影。
② 動態解析web服務軟體
PHP(FastCGI):大中小型網站都會使用,動態網頁語言PHP程式的解析容器。它可配合Apache解析動態程式,
不過,這裡的PHP不是FastCGI守護程序模式,而是mod_php5.so(module)。也可配合Nginx解析動態程式,此時的PHP常用FastCGI守護程序模式提供服務。
Tomcat:中小企業動態Web服務主流,網際網路Java容器主流(如jsp、do)。
Resin:大型動態Web服務主流,網際網路Java容器主流(如jsp、do)。
IIS(Internet information services):微軟windows下的Web服務軟體(如asp、aspx)