1. 程式人生 > >HTTP服務介紹

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)