1 http協議
1.1 http協議簡介
HyperText Transfer Protocol,超文本傳輸協議,重要應用之一就是WWW服務
WWW,全稱World Wide Web,萬維網
http協議的WWW服務應用默認端口:80
加密的WWW服務應用https默認端口:443
http協議版本:http1.0 http1.1 http2.0
1.2 http請求方法
根據HTTP標準,HTTP請求可以使用多種請求方法。
HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
序號 | 方法 | 作用描述 |
1 | GET | 請求指定的資源信息,服務器返回指定資源 |
2 | HEAD | 類似於get請求,不過只返回http首部,用於獲得報頭 |
3 | POST | 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。 |
4 | PUT | 從客戶端向服務器傳送的數據取代指定的文檔的內容。 |
5 | DELETE | 請求服務器刪除指定的頁面。 |
6 | CONNECT | HTTP/1.1協議中預留給能夠將連接改爲管道方式的代理服務器。 |
7 | OPTIONS | 允許客戶端查看服務器的性能。 |
8 | TRACE | 回顯服務器收到的請求,主要用於測試或診斷。 |
9 | MOVE | 請求服務器將指定的頁面移至另一個網絡地址 |
1.3 http狀態碼
當瀏覽者訪問一個網頁時,瀏覽者的瀏覽器會向網頁所在服務器發出請求。當瀏覽器接收並顯示網頁前,此網頁所在的服務器會返回一個包含HTTP狀態碼的信息頭(server header)用以響應瀏覽器的請求。
HTTP狀態碼的英文爲HTTP Status Code。
下面是常見的HTTP狀態碼:
200 - 請求成功
301 - 資源(網頁等)被永久轉移到其它URL
404 - 請求的資源(網頁等)不存在
500 - 內部服務器錯誤
http狀態碼分類
HTTP狀態碼由三個十進制數字組成,第一個十進制數字定義了狀態碼的類型,後兩個數字沒有分類的作用。HTTP狀態碼共分爲5種類型:
分類 | 描述 |
1** | 信息,服務器收到請求,需要請求者繼續執行操作 |
2** | 成功,操作被成功接收並處理 |
3** | 已經移動的文件,重定向,需要進一步操作以完成請求 |
4** | 客戶端錯誤,請求包含語法錯誤或無法完成請求 |
5** | 服務器錯誤,服務器在處理請求的過程中發生了錯誤 |
常見的http狀態碼列表
狀態代碼 | 詳細描述 |
200 OK | 服務器成功返回頁面,成功的http請求返回的標準狀態碼 |
301 Moved Permanently | 永久跳轉,所請求的網頁將永久跳轉到被設定的新位置,例如:baidu.com跳轉到www.baidu.com |
403 Forbidden | 禁止訪問,雖然這個請求是合法的,但是服務器端因爲匹配了預先設置的規則而拒絕相應客戶端的請求,此類問題一般爲服務器或服務權限配置不當所致 |
404 Not Found | 服務器找不到客戶端請求的指定頁面,可能是客戶端請求了服務器上不存在的資源所致 |
500 Internal Server Error | 內部服務器錯誤,服務器遇到了意料不到的情況,不能完成客戶的請求。這是一個較爲籠統的報錯,一般爲服務器的設置或內部程序問題導致。例如:Selinux開啓,而又沒有爲http設置規則許可,客戶端訪問就是500 |
502 Bad Gateway | 壞的網關,一般是代理服務器請求後端服務時,後端服務不可用或沒有完成響應網關服務器。這通常爲反向代理服務器下面的節點出問題所致 |
503 Service Unavailable | 服務當前不可用,可能是服務器超載或停機維護導致的,或者是反向代理服務器後面沒有可以提供服務的節點 |
504 Gateway Time-out | 網關超時,一般是網關代理服務器請求後端服務時,後端服務沒有在特定的時間內完成處理請求。多數是服務器過載導致沒有在指定的時間內返回數據給前端代理服務器 |
http狀態碼的命令行查看
curl命令查看
[root@nfs-server ~]# curl -I www.airocov.com
HTTP/1.1 200 OK
Date: Mon, 17 Jul 2017 13:05:41 GMT
Server: Apache/2.4.7 (Ubuntu)
1.4 http報文(請求報文和響應報文)
HTTP請求報文(request message)
一個HTTP請求報文由請求行(request line)、請求頭部(header)、空行和請求數據4個部分組成,下圖給出了請求報文的一般格式。
<request-line>
<headers>
<blank line>
[<request-body>
1.請求行
請求行由請求方法字段、URL字段和HTTP協議版本字段3個字段組成,它們用空格分隔。例如,GET /index.html HTTP/1.1。
HTTP協議的請求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。
而常見的有如下幾種:
1).GET
最常見的一種請求方式,當客戶端要從服務器中讀取文檔時,當點擊網頁上的鏈接或者通過在瀏覽器的地址欄輸入網址來瀏覽網頁的,使用的都是GET方式。GET方法要求服務器將URL定位的資源放在響應報文的數據部分,回送給客戶端。使用GET方法時,請求參數和對應的值附加在URL後面,利用一個問號(“?”)代表URL的結尾與請求參數的開始,傳遞參數長度受限制。例如,/index.jsp?id=100&op=bind,這樣通過GET方式傳遞的數據直接表示在地址中,所以我們可以把請求結果以鏈接的形式發送給好友。以用google搜索domety爲例,Request格式如下:
複製代碼
GET /search?hl=zh-CN&source=hp&q=domety&aq=f&oq= HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,
application/msword, application/x-silverlight, application/x-shockwave-flash, */*
Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)
Host: <a href="http://www.google.cn">www.google.cn</a>
Connection: Keep-Alive
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r
複製代碼
可以看到,GET方式的請求一般不包含”請求內容”部分,請求數據以地址的形式表現在請求行。地址鏈接如下:
<a href="http://www.google.cn/search?hl=zh-CN&source=hp&q=domety&aq=f&oq=">http://www.google.cn/search?hl=zh-CN&source=hp
&q=domety&aq=f&oq=</a>
地址中”?”之後的部分就是通過GET發送的請求數據,我們可以在地址欄中清楚的看到,各個數據之間用”&”符號隔開。顯然,這種方式不適合傳送私密數據。另外,由於不同的瀏覽器對地址的字符限制也有所不同,一般最多隻能識別1024個字符,所以如果需要傳送大量數據的時候,也不適合使用GET方式。
2).POST
對於上面提到的不適合使用GET方式的情況,可以考慮使用POST方式,因爲使用POST方法可以允許客戶端給服務器提供信息較多。POST方法將請求參數封裝在HTTP請求數據中,以名稱/值的形式出現,可以傳輸大量數據,這樣POST方式對傳送的數據大小沒有限制,而且也不會顯示在URL中。還以上面的搜索domety爲例,如果使用POST方式的話,格式如下:
複製代碼
POST /search HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,
application/msword, application/x-silverlight, application/x-shockwave-flash, */*
Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)
Host: <a href="http://www.google.cn">www.google.cn</a>
Connection: Keep-Alive
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r
hl=zh-CN&source=hp&q=domety
複製代碼
可以看到,POST方式請求行中不包含數據字符串,這些數據保存在”請求內容”部分,各數據之間也是使用”&”符號隔開。POST方式大多用於頁面的表單中。因爲POST也能完成GET的功能,因此多數人在設計表單的時候一律都使用POST方式,其實這是一個誤區。GET方式也有自己的特點和優勢,我們應該根據不同的情況來選擇是使用GET還是使用POST。
3).HEAD
HEAD就像GET,只不過服務端接受到HEAD請求後只返回響應頭,而不會發送響應內容。當我們只需要查看某個頁面的狀態的時候,使用HEAD是非常高效的,因爲在傳輸的過程中省去了頁面內容。
2.請求頭部
請求頭部由關鍵字/值對組成,每行一對,關鍵字和值用英文冒號“:”分隔。請求頭部通知服務器有關於客戶端請求的信息,典型的請求頭有:
User-Agent:產生請求的瀏覽器類型。
Accept:客戶端可識別的內容類型列表。
Host:請求的主機名,允許多個域名同處一個IP地址,即虛擬主機。
3.空行
最後一個請求頭之後是一個空行,發送回車符和換行符,通知服務器以下不會再有請求頭部的信息了。
4.請求報文主體(請求數據)
請求數據不在GET方法中使用,而是在POST方法中使用。POST方法適用於需要客戶填寫表單的場合。與請求數據相關的最常使用的請求頭是Content-Type和Content-Length。
HTTP響應報文(response message)
HTTP響應也由三個部分組成,分別是:起始行、響應頭部、響應報文主體。
如下所示,HTTP響應的格式與請求的格式十分類似:
<status-line>
<headers>
<blank line>
[<response-body>
1.起始行
響應報文的起始行也叫狀態行,用來說明服務器響應客戶端請求的狀況。一般爲協議版本號、數字狀態碼、狀態情況。例如:HTTP/1.1 200 OK
2.響應頭部
和請求報文類似,起始行的後面一般有若干個頭部字段。每個頭部字段都包含一個名字和一個值,兩者之間用冒號分隔。頭部結尾也是以一個空行結束的。常見的頭部信息有:
HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122
3.空行
最後一個響應頭部信息之後是一個空行,通過發送回車符和換行符,通知客戶端空行下文無頭部信息了
4.響應報文主體
響應報文主體中裝載了要返回給客戶端的數據。這些數據可以是文本,也可以是二進制的。實例:
<html>
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>
下面給出一個HTTP響應報文例子
HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122
<html>
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>
1.5 http協議原理
整個HTTP協議請求的工作流程:
1)終端客戶在web瀏覽器地址欄輸入訪問地址http://www.etiantian.org/index.htnl
2)web瀏覽器請求DNS服務器把域名www.etiantian.org轉換成web服務器的IP地址,DNS的解析過程略….
3)web瀏覽器將端口號(默認是80)從訪問地址(URL)中解析出來
4)web瀏覽器通過解析後的IP地址及端口號與web服務器之間建立一條TCP連接
5)建立TCP連接之後,web瀏覽器向web服務器發送一條http請求報文
6)web服務器響應並讀取瀏覽器的請求信息,然後返回一條HTTP響應報文
7)web服務器關閉HTTP連接,關閉TCP連接,web瀏覽器顯示訪問的網站內容到屏幕上
2 http資源
2.1 媒體類型
當web服務器響應HTTP請求時,會爲每一個HTTP對象數據加一個MIME類型,當web瀏覽器獲取到服務器返回的對象時,會去查看相關的MIME類型,並進行相應處理。
MIME類型存在於HTTP響應報文的響應頭部信息裏,常見的MIME類型:略
查看Nginx支持的媒體類型:
[root@lnmp02 ~]# less /application/nginx/conf/mime.types
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
…省略…
2.2 URL介紹
URL,全稱爲Uniform Resource Location,統一資源定位符,也稱爲網址
URL的格式由三部分組成:
1、協議,例如:http
2、主機資源服務器IP地址或域名(端口),例如:www.etiantian.org
3、主機資源的具體地址,如目錄和文件名等,例如:etiantian/index.html
第一部分和第二部分用“://”分隔,第二部分和第三部分用“/”分隔
2.3 URI介紹
Uniform Resource Identifier,統一資源標識符,是一個用於標識某一互聯網資源名稱的字符串。
URL是URI命名機制的一個子集
2.4 靜態網頁資源
純粹HTML格式的網頁(圖片,視頻,JS,CSS)通常被成爲靜態網頁
靜態網頁是相對於動態網頁而言的,沒有後臺數據庫,不含程序,不可交互
靜態網頁語言:HTML、JS、CSS、XML、SHTML等
靜態網頁的核心特點:
1)程序在客戶瀏覽器端解析,不讀取後端數據庫,因此性能和效率很高
2)因爲後端沒有數據庫支持,所以和用戶的交互性較差,功能實現也很少
2.5 動態網頁資源
URL後綴多半是.asp、.aspx、.php、.do、.cgi等,並且一般都含有標誌性的符號——“?,&”,大多數情況下後端都需要有數據庫支持
動態網頁資源特點:
1)擴展名後綴常見爲:asp、.aspx、.php、.do、.cgi等
2)網頁一般以數據庫技術爲基礎,大大降低了網站維護的工作量
3)採用動態網頁技術的網站可以實現更多功能,例如註冊,登錄,發博文等
4)動態網頁並不是獨立存在於服務器上的網頁文件,服務器通過讀取數據庫來返回一個完整的網頁
5)動態網頁中的“?”在搜索引擎收錄方面存在一定的問題
2.6 僞靜態網頁
通過某些技術(如rewrite)把動態網頁URL地址僞裝成靜態網頁URL地址
僞靜態網頁小結:
1、利用rewrite技術將動態網頁僞裝成靜態網頁
2、便於搜索引擎收錄,提升用戶訪問量及用戶體驗
3、訪問性能沒有提升,並且轉換成僞靜態會消耗資源,因此性能會下降
4、儘可能地將動態網頁轉換成真正的靜態網頁
5、併發量不是很大或動態更新過於頻繁,用rewrite實現僞靜態也是不錯的
6、僞靜態網頁的實現過程,一般由產品運營提出需求,開發和運維共同實現
3 網站流量度量術語
3.1 IP
指的是獨立IP數,也就是說忽略了局域網
3.2 PV
PV(訪問量)Page View,頁面瀏覽。
頁面瀏覽量,不管客戶端是不是相同,也不管IP是不是相同,用戶只要訪問網站頁面就會被計算PV,一次計一個PV。
3.3 UV
UV(獨立訪客)Unique Visitor
同一個客戶端訪問網站被計爲一個訪客。一天內相同的客戶端訪問同一個網站只計一次UV
3.4 企業對IP、PV、UV的度量
對IP的度量
1、分析web服務器的訪問日誌信息,對IP地址端去重後計數
2、在頁面結尾,嵌入JS等統計程序代碼,用戶加載頁面後,IP即傳給統計IP的服務器。
3、第三方統計工具,例如:谷歌的統計GA
對PV的度量
1、分析web服務的訪問日誌,只計算HTML、PHP等頁面數量
2、嵌入JS等統計程序代碼
3、第三方統計工具,例如:谷歌的統計GA
對UV的度量
1、通過客戶端HTTP請求報文分析
2、通過Cookie鑑別
4 WWW服務軟件介紹
4.1 當前互聯網主流Web服務說明
當前互聯網主流web服務軟件
Apache
Nginx:Nginx的分支Tengine
Lighttpd
常用來提供動態服務的軟件
PHP(FastCGI)
Tomcat
Resin
IIS
4.2 靜態服務軟件和動態服務軟件
WWW靜態服務軟件:Apache、Nginx
WWW動態服務軟件:Resin、Tomcat、PHP
PHP在配合Apache解析動態程序時,他用的是mod_php5.so模塊;
在配合Nginx解析動態程序時,常用FastCGI守護進程模式提供服務