HTTP服務介紹

摘自php

https://mp.weixin.qq.com/s?__biz=MzI4NDM5NzE4Ng==&mid=2247484093&idx=1&sn=3d87e9772ffb3c9b0d40f7898970f4da&chksm=ebfd5950dc8ad046bd609e8837a401393e269fa9479afc856069c21921c5f88c5737df31b076&mpshare=1&scene=23&srcid=1115xvpAyaFpOzYhphGrqnwF#rdcss

 

1、HTTP服務介紹html

1 簡述用戶訪網站流程前端

a 進行域名信息的DNS解析   dig +trace 得到www.oldboyedu.com  ip地址信息linux

b 進行與網站服務器創建鏈接,tcp三次握手過程nginx

(syn ack SEQ ACK/狀態轉換 closed listen syn_sent  syn_rcvd established )web

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
(網關超時)
通常是網關服務器請求後端服務時,後端服務沒有在特定的時間內完成服務。

 

2、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、.mp四、.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)在網站訪問頁面中嵌入統計程序代碼(頁面結尾處),只有所有網頁加載完畢後,才進行數據統計

[root@tx ~]# 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)

相關文章
相關標籤/搜索