HTTP服務原理

第1章 HTTP服務介紹

1.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.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.1.2 dns樹狀結構圖

 

1.1.3 DNS域名解析,獲悉域名對應IP地址(windows

査看有關DNS信息方法(windows主機上):php

1> 査看windows客戶端本地緩存的DNS解析記錄的命令以下。css

c:\>ipconfig /displaydns <-意思是display the contents of the DNS Resolver
(顯示DNS CACHE內容),"/displaydns"前面有空格

2> 清除windows客戶端本地緩存的DNS解析記錄的命令以下。html

c:\>ipconfig /flushdns <-意思爲Purges the DNS Resolver cache"

(清除DNS CACHE內容),"/displaydns"前面有空格

3> windows系統下hosts域名解析記錄的位置以下。前端

c:\Windows\system32\drivers\etc\hosts

1.1.4 linux上實現DNS緩存

nscd bind dnsmasq

  關於BIND服務的使用能夠參照:http://www.cnblogs.com/clsn/p/8424274.htmllinux

1.2 HTTP協議知識介紹

1.2.1 什麼是HTTP協議

HTTP協議,全稱HyperText Transfer Protocol,中文名爲超文本傳輸協議,是互聯網中最經常使用的一種網絡協議。 HTTP的重要應用之一是 WWW服務。設計 HTTP協議最初的目的就是提供一種發佈和接收HTML (一種頁面標記語言)頁面的方法。nginx

HTTP協議是互聯網上經常使用的通訊協議之一。它有不少的應用,但最流行的就是用於Web瀏覽web

器和Web服務器之間的通訊,即WWW應用或稱Web應用。面試

www ,全稱World Wide Web ,常稱爲Web ,中文譯爲"萬維網:它是目前互聯網上最受用戶歡迎的信息服務形式。 HTTP協議的 WWW服務應用的默認端口爲80,另一個加密的WWW服務應用https的默認端口爲443,主要用於網銀、支付等和錢相關的業務。當今,HTTP服務、WWW服務、Web服務三者的概念已經混淆了,都是指當下最多見的網站服務應用。正則表達式

1.2.2 HTTP協議版本

  HTTP/1.0 規定瀏覽器和服務器只保持短暫的鏈接(TCP短連接數據庫

   HTTP/1.1 支持持久鏈接,在一個TCP鏈接上能夠傳送多個HTTP請求和響應,減小了創建和關閉鏈接的消耗和時間延遲(TCP長鏈接

1.3 http協議原理過程

linux系統中參看報文的方法

curl -v   ---顯示訪問域名請求報文與響應報文信息
curl www.baidu.com  -v

> 表示http請求報文  <表示http的響應報文

wget --debug www.baidu.com

1.3.1 響應http請求方法

HTTP方法

做用描述

GET     

客戶端請求指定資源信悤,服務器返回指定資源

HEAD   

只請求響應報文中的 HTTP首部

POST   

將客戶端的數據提交到服務器,例:註冊表單

PUT    

用從客戶端向服務器傳送的數據取代指定的文檔內容。

DELETE 

請求服務器刪除 Request-URI所表示的資源。

MOVE   

請求服務器將指定的頁面移至另外一個網絡地址。

 

1.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 方法能夠提交主體)

1.3.2.1  請求頭信息說明

請求頭內容

說明

Host           

接受請求的服務器地址,能夠是IP:端口號,也能夠是域名

User-Agent     

發送請求的應用程序名稱

Connection     

指定與鏈接相關的屬性,如Connection:Keep-Alive

Accept-Charset 

通知服務端能夠發送的編碼格式

Accept-Encoding

通知服務端能夠發送的數據壓縮格式

1.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>

……

響應主體的內容(請求後進行響應的返回的內容 信息)

1.3.3.1  響應頭信息說明

響應頭

說明

Server

服務器應用程序軟件的名稱和版本

Content-Type

響應正文的類型(是圖片仍是二進制字符串)

Content-Length

響應正文長度

Content-Charset

響應正文使用的編碼

Content-Encoding

響應正文使用的數據壓縮格式

Content-Language

響應正文使用的語言

1.4 HTTP協議狀態碼

HTTP狀態碼(HTTP Status Code )是用來表示Web服務器響應HTTP請求狀態的數字代碼。每當Web客戶端向Web服務器發送一個HTTP請求時,Web服務器都會返回一個狀態響應代碼。這個狀態碼是一個三位數字代碼,做用是告知Web客戶端這次請求是否成功,或者是否要採起其餘的動做方式。

1.4.1 HTTP協議狀態碼介紹

curl -v www.oldboyedu.org   ---能夠獲取狀態碼信息
********************************************************************
擴展命令說明:經過curl命令只獲取狀態碼信息
curl -I www.nmtui.com|awk 'NR==1{print $2}'
curl -I -s  www.nmtui.com |awk 'NR==1{print $2}' 
curl -I -s -w %{http_code}  www.nmtui.com
curl -I -s -w %{http_code} -o /dev/null www.nmtui.com
curl -I -s -w "%{http_code}\n" -o /dev/null www.nmtui.com
curl -s -w "%{http_code}\n" -o /dev/null www.nmtui.com
curl -I -s www.nmtui.com|head -1
curl -I 10.0.0.7 2>/dev/null|head -1
********************************************************************

1.4.2 不一樣範圍的狀態碼及其對應的做用

狀態碼範圍

做用描述

100 - 199

用於指定客戶端相應的某些動做

200 - 299

用於表示請求成功

300 - 399

用於己經移動的文件,而且常被包含在定位頭信息中指定新的地址系信息

400 - 499

用於指出客戶端的錯誤  

500 - 599

用於指出服務端的錯誤

1.4.3 常見的狀態碼

代碼

代碼說明

301 Moved Permanently(永久跳轉)

請求的網頁已永久跳轉到新位置

403 Forbidden(禁止訪問)

服務器拒絕請求

404 - Not Found,

服務器找不到請求的頁面

500

內部服務器錯誤

502

壞的網關,通常是網關服務器請求後端服務時,後端服務沒有按照http協議正確返回結果

503 - Service Unavailable

(服務當前不可用)

可能由於超載或停機維護

504 - Gateway Timeout

(網關超時)

通常是網關服務器請求後端服務時,後端服務沒有在特定的時間內完成服務。

 

第2章 HTTP資源

2.1 媒體資源

互聯網上的數據有不少不一樣的類型,Web服務器會把經過Web傳輸的每一個對象都打上MIME型(即MIME type)的數據格式標籤。最初設計MIME(Multipurpose Internet Mall Extension,多用途因特網郵件擴展)是爲了解決在不一樣的電子郵件系統之間搬移報文時存在的問題.MIME在電子郵件系統中工做得很是好。後來,HTTP也支持了這個功能,用它來描述數據並標記不一樣的數據內容類型。

Web服務器響應HTTP謫求時,會爲每個HTTP對象數據加一個MIME類型,當Web瀏覽器獲取到服務器返回的對象時,會去査看相關的MIME類型,並進行相應處理。

MIME類型存在與HTTP響應報文的響應頭部信患裏,它是一種文本標記,表示一種主要的對象類型和一個特定的子類型,中間由一條斜槓來分割。

2.1.1 MIME媒體資源

web服務能夠處理的資源類型,根據擴展名進行識別(html css mp4

2.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軟件識別urluri的方式和上面說明一致

2.2 網頁資源種類

 靜態網頁資源

 動態網頁資源

 僞靜態網頁資源

2.2.1 靜態網頁資源

請求響應信息,發給客戶端進行處理,由瀏覽器進行解析,顯示的頁面稱爲靜態頁面

在網站設計中,純粹HTML格式的網頁(能夠包含圖片、視頻JS (前端功能實現)、CSS (樣式)等)一般被稱爲"靜態網頁"

靜態頁面資源特徵

 01. 處理文件類型:如.html、jpg、.gif、.mp四、.swf、.avi、.wmv、.flv等-

 02. 地址中不含有問號"?"或&等特殊符號。

 03. 保存在網站服務器文件系統上的,是實實在在保存在服務器上的文件實體

 04. 網頁內容是固定不變的,所以,容易被搜索引擎收錄

 05. 網頁頁面交互性交差,由於不能與數據庫配合

 06. 網頁程序在用戶瀏覽器端解析,當客戶端向服務器請求數據時,服務器會直接從磁盤文件系統上返回數據(不作任何解析)

優點:

 01. 訪問的效率比較高

 02. 網頁內容是固定不變的,所以,容易被搜索引擎收錄

 03. 網頁程序在用戶瀏覽器端解析,當客戶端向服務器請求數據時,服務器會直接從磁盤文件系統上返回數據(不作任何解析)

劣勢:

 01. 網頁頁面交互性交差,由於不能與數據庫配合

 02. 保存在網站服務器文件系統上的,是實實在在保存在服務器上的文件實體

2.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.2.3 僞靜態網頁資源

將動態頁面假裝成靜態頁面,便於被搜索引擎收錄

將動態頁面轉換爲靜態頁面的方式(rewrite 正則表達式)

將動態頁面內容轉換爲靜態頁面,去掉動態頁面uri地址中的? &字符,假裝成靜態頁面uri信息

動態轉靜態(開發來配合完成)

2.3 網站流量度量術語

2.3.1 獨立IP數度量值

        獨立IP數是指不一樣IP地址的計算機訪問網站時被計算的總次數

         在一個局域網內多個主機進行訪問相同的網站地址時,獨立IP數記爲多少?

    通常一天內(00:00-24:00相同IP地址的客戶端訪問網站頁面只會被計一次

  記錄獨立IP的時間可爲一天或一個月,目前通用的標準爲"一天"

2.3.2 頁面瀏覽次數PV

        頁面瀏覽量或點擊量 

2.3.3 獨立訪客數UV

        根據http請求報文:瀏覽器版本,OS

        根據http響應報文:cookie(id)    

cookieid  將服務端的信息保存到客戶端

session       將客戶端信息保存到服務器

2.3.4 【擴展知識】cookiesession區別

2.3.4.1  cookie介紹說明

  cookie 存放在瀏覽器緩存中---瀏覽器進行查看(谷歌)

    【設置裏面】---【顯示高級設置】---【隱私設置】---【內容設置】---【全部cookie和內容設置】

     PS:cookie的格式信息是由開發人員進行定義,因此不一樣的網站所生成的cookie信息內容不太一致

     cookie 數據存放在客戶的瀏覽器上

     cookie 不是很安全,別人能夠分析存放在本地的COOKIE並進行COOKIE欺騙

     cookie 不佔用服務器端資源,提高了服務器性能

     cookie 保存的數據不能超過4K,不少瀏覽器都限制一個站點最多保存20個cookie。

2.3.4.2  session介紹說明

     session 存放在服務器的內存中     

     session 數據放在服務器上

     session 從數據庫的安全應用方面會更安全些

     session 會在必定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能

2.3.4.3  建議性說明:

  將登錄信息等重要信息存放爲SESSION

  其餘信息若是須要保留,能夠放在COOKIE中

2.4 IP PV UV 統計度量的方法

2.4.1 IP pv 統計度量的方法

1)利用awk或者相應統計命令,進行分析訪問日誌信息進行統計

2)在網站訪問頁面中嵌入統計程序代碼(頁面結尾處),只有所有網頁加載完畢後,才進行數據統計

[root@tx ~]# curl -s  www.nmtui.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

2.4.2 UV統計度量的方法

     經過客戶端HTTP請求報文分析

經過Cookie信息鑑別統計

2.4.3 工做中經常使用的統計工具

     網頁信息統計軟件-piwik  pwiki統計工具:(https://piwik.org/)   pwiki演示頁面:https://piwik.org/demo

       ELK軟件介紹說明   http://blog.oldboyedu.com/elk/

2.5 網站併發鏈接說明

2.5.1 如何理解網站併發的概念

 A種理解:網站服務器每秒可以接收的最大用戶請求數。

 B種理解:網站服務器每秒可以響應的最大用戶請求數。

 C種理解:網站服務器在單位時間內可以處理的最大鏈接數。(推薦)

ss -lntup|grep 80
netstat -lntup|grep 80

2.5.2 網站併發概念舉例說明

飯店吃飯/酒店住宿舉例 

  咱們去餐館吃飯(如圖6-6所示),餐館裏一共有10張卓,每張桌最多坐4我的同時吃飯,那麼按通常人的理解,這個餐館可以接收的併發吃飯人數爲10M ,即40個併發,其實這裏就沒有考慮時間問題,1秒併發能夠是40個,10分鐘內併發也是40個。由於這裏還有一個因素,就是每一個人吃飯時長的問題,若是平均每一個人10分鐘吃完,那麼能夠說10分鐘內,這個餐館的併發爲40個,而不是每秒鐘併發40個,由於,第一秒能夠是40我的同時進來,可是第二秒就無人可進了(滿員了),若是說10分鐘併發是40個,下一個10分鐘仍是40個,第三個10分鐘還能夠是40個。即網站服務器在單位時間內可以處理的最大鏈接數。

 高速公路通車舉例說明  

  高速公路每一個方向都有兩條車道,那麼,同一時刻併發的車輛爲兩輛,而且併發能夠永遠爲2 ,若是按秒計算,每秒的併發可能就有十幾輛,這個例子和餐館不一樣,由於高速路處理併發不須要處理時間。可是對於Web服務器來說,是須要花費時間處理請求的,這個請求多是1秒或數秒,所以說,併發不該該只是用戶訪問的請求數,而應是服務器同時處理的併發數,而且單位時間不必定是1秒,多是一個鏈接處理週期內的鏈接數。

2.5.3 網站併發統計計算方法

netstat -an|grep -i 「est」|wc -l
ss -ant|grep -ic est

 說明: nginx web服務中相應的軟件模塊進行統計 

2.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表示平均用戶思考時間。

2.5.1 有關網站度量Linux企業運維問題

常見的面試題以下:

  1)請問你如何理解網站併發?

  2)大家公司網站訪問量是多少?是怎麼計算的?

  —定要理解IPPV、併發量這3個點的知識,在回答時纔能有的放矢,這三個點的多少決定面試時說多大的架構,對於沒有經驗的新手不能在介紹有幾萬PV的同時描述數十臺的集羣架構,這樣就尷尬了。

  關於網站訪問指標的計算,能夠考慮:

  運維部門的日誌分析。

   開發在頁面嵌入的JS程序(用於統計、收集、分析)。

   運營市場經過第三方公司提供的工具進行統計,例如GA統計。

2.6 知名網站訪問量信息參考

網站

獨立IP/

PV數萬/

網站併發級別

機器數量

www.51cto.com 

 582'000    

1'338,600  

10000      

數十臺

www.ganji.com 

 1’734'000  

13,872,000 

10000-30000

幾百臺

www.58.com    

 1398'000   

22,927,200 

10000-30000

幾百臺

www.weibo.com 

 30’180'000 

166'593’600

幾十萬     

千臺

www.taobao.com

 46,620'000 

489,510,000

幾十萬~百萬

萬臺

www.jd.com    

 6'08'000   

98,949,600 

數萬       

千臺

www.163.com   

 10'320'000 

79,154,000 

十萬       

千臺

www.suning.com

 623,250    

3,365,550  

10000-30000

百臺

 

2.7 HTTP協議

  全部的協議,都是爲軟件提供服務的

  利用HTTP協議的軟件,稱爲www服務軟件或者web服務軟件

2.7.1   web服務軟件分類

2.7.1.1  靜態解析web服務軟件

    Apache:這是中小型Web服務的主流,Web服務器中的老大哥。

  Nginx:大型網站Web服務的主流,曾經Web服務器中的初生牛犢,現已長大。

            Nginx的分支Tenginehttp://tengine.taobao.org/)目前也在飛速發展。

    Lighttpd:這是一個不溫不火的優秀Web軟件,社區不活躍,靜態解析效率很高。

              Nginx流行前,它是大併發靜態業務的首選,

              國內百度貼吧、豆瓣等衆多網站都有Lighttpd奮鬥的身影。

2.7.1.2  動態解析web服務軟件

 PHPFastCGI):大中小型網站都會使用,動態網頁語言PHP程序的解析容器。它可配合Apache解析動態程序,

不過,這裏的PHP不是FastCGI守護進程模式,而是mod_php5.somodule)。也可配合Nginx解析動態程序,此時的PHP經常使用FastCGI守護進程模式提供服務。

  Tomcat:中小企業動態Web服務主流,互聯網Java容器主流(如jspdo)。

  Resin:大型動態Web服務主流,互聯網Java容器主流(如jspdo)。

  IISInternet information services):微軟windows下的Web服務軟件(如aspaspx

2.7.2 web服務軟件官方資料整合:

  apache:http://www.apache.org/
  nginx: http://www.nginx.org/
  Resin: http://www.caucho.com/download
          http://caucho.com/resin-3.1/doc/
          http://caucho.com/resin/doc/install-apache.xtp
  Tomcat:http://tomcat.apache.org/whichversion.html
        http://tomcat.apache.org
  PHP:   http://php.net
相關文章
相關標籤/搜索