HTTP協議,全稱HyperText Transfer Protocol即超文本傳輸協議,是互聯網中最常用的一種網絡協議。HTTP協議是互聯網上的通信協議方案之一。它有很多的應用, 但最流行的就是用於web浏覽器和web服務器之間的通信應用,即www應用或web應用。HTTP協議位於OSI模型中第7層應用層。
HTTP協議的WWW服務應用的默認服務端口為80,另一個加密的www服務應用(https)的默認服務端口為443,用於網銀、支付等和資金交易相關的業務。
HTTP方法
作用描述
GET
客戶端請求指定資源信息,服務器返回指定資源。
HEAD
只請求響應報文中的HTTP首部
POST
將客戶端的數據提交到服務器,例如:注冊表單
PUT
從客戶端向服務器傳送的數據替代指定的文檔內容
DELETE
請求服務器刪除指定的資源
MOVE
請求服務器將指定的頁面移至另一個網絡地址
HTTP狀態碼(HTTP Status Code)是用來表示web服務器響應http請求狀態的數字代碼。狀態碼是一個三位數字代碼,作業是告知web客戶端此次的請求是否成功,或者是采取其它的動作方式。
狀態碼范圍
作用描述
100-199
指定客戶端應響應的某些動作
200-299
表示請求成功
300-399
已經移動的文件並且常被包含在定位頭信息中指定新的地址信息。
400-499
客戶端錯誤
500-599
服務器錯誤
常見的狀態碼及對應的作用
200 - OK:服務器成功返回網頁,成功的http請求,返回的標准狀態碼。
301 - Moved Permanently:永久跳轉,所有請求的網頁將永久跳轉到被設定的新位置。
404 - Forbidden:禁止訪問,這個請求是合法的,但是服務端因為匹配了預先設置的規則而拒絕響應客戶端的請求,此類問題一般為服務器權限配置不當所致。
500 - Internal Server Error:內部服務器錯誤,服務器遇到了意料不到的情況,不能完成客戶端請求,一般是服務器的設置或者內部程序問題所致。例如:SElinux開啟,而又沒有為http設置規則許可。
502 - Bad Gateway:網關問題,一般是代理服務器請求後端服務時,後端服務不可用或者沒有完成響應網關服務器。一般為代理服務器下面的節點出問題所致。
503 - Service Unavailable:服務當前不可用,可能因為服務器超載或停機維護導致,或者是代理服務器後面沒有可以提供服務的節點。
504 - Gateway Timeout:網關超時,一般是網關代理服務器請求後端服務時,後端服務沒有在特定的時間內完成處理請求,一般是服務器過載導致沒有在指定的時間內返回數據給代理服務器。
HTTP報文中有很多行內容,不同行的字段都是一些ASCII碼串,各個字段的長度也是不同的。HTTP報文有兩種,一種是從web客戶端往web服務器的HTTP報文,稱為請求報文(Request Message)。另外一種是 從web服務器發往web客戶端的報文,稱為響應報文(Response Message),HTTP請求和相應報文的格式類似。
HTTP請求報文由請求行、請求頭部(header)、空行和請求報文主體幾個部分組成。
請求行:請求方法URL協議版本,例如:GET /index.html HTTP/1.1。
請求頭:
字段名1:值1
字段名2:值2
……
例如:
Accept:image/gif,image/jpeg
Accept -Language:zh-cn
……
空行:空白無內容
請求報文主體:GET方法沒有請求報文主體,POST方法才有。
請求行是請求報文的第一行,用來說明客戶端想要做什麼。內容由請求方法字段、URL字段和HTTP協議版本字段共3個字段組成,它們之間用空格分隔。例如:GET /index.html HTTP/1.1。
請求頭部由關鍵字/值組成,每行一對,關鍵字和值用英文冒號":"分隔。請求頭部的作用是客戶端把請求的相關信息告訴給服務器。
請求頭信息
說明
Accept:image/gif,image/jpeg
媒體類型
Accept -Language:zh-cn
語言類型
Accept –Encoding:gzip,deflate
支持壓縮
User -Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT;…)
客戶端類型
Host:<a href="http://www.baidu.com">www.baidu.com</a>
主機名
與請求報文相關的最常用的請求頭是Content-Type和Content-Length。
最後一個請求頭部信息之後是一個空行,發送回車符和換行符,通知web服務器空行以下不會有請求頭部的信息了。
請求報文主體中包括了要發送給web服務器的數據信息。請求報文主體不會應用於HTTP的GET命令方法,而是應用於POST方法。POST方法適用於需要客戶填寫表單的場合。
HTTP相應報文由起始行、響應頭部(header)、空行和響應報文主體幾個部分組成,與HTTP請求報文格式類似。
HTTP協議屬於OSI模型中的第七層應用層協議,HTTP協議的重要應用就是WWW服務應用。以WWW服務應用為例,HTTP協議進行通信時,需要有客戶端即終端用戶和服務端即web服務器,當web客戶端向web服務器發送請求報文之前,先要通過TCP/IP協議在web客戶端和服務器之間建立一個TCP/IP連接。整個http協議請求的工作流程原理如下:
1、終端客戶在web浏覽器地址欄輸入訪問地址www.baidu.com。
2、web浏覽器請求DNS服務器把域名www.baidu.com轉換成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浏覽器顯示訪問的網站內容到屏幕。
動態web服務請求流程:
客戶端發送請求àhttpd得到請求àhttpd解析請求的格式(html、css)à請求響應php解析àphp解析程序執行完畢àdb(數據庫),返回結果(html)給httpdàhttpd把數據返回給客戶端(可能是壓縮過的)à浏覽器接到返回結果(解壓)。
1、每個頁面都有一個固定的URL地址,且URL一般以.html、.htm、.shtml等常見形式為後綴,並且地址中不含有問號"?"或"&"等特殊符號。
2、網頁內容一經發布到網站服務器上,無論是否有用戶訪問,每個網頁的內容都是保存在網站服務器文件系統上的,也就是說,靜態網頁是實實在在保存在服務器上的文件實體,每個網頁都是一個單獨的文件。
3、網頁內容相對固定的,因此,容易被搜索引擎收錄。
4、網頁沒有數據庫的支持,在網站制作和維護方面工作量較大,因此當網站信息量很大時完全依靠靜態網頁制作的方式比較困難。
5、網頁的交互性較差,在程序功能實現方面有較大的限制。
6、網頁程序在用戶浏覽器端解析,如IE浏覽器,這樣程序解析效率更高,由於服務器端不進行解析,並且不需要讀取數據庫,因此可接收更多的並發訪問。當客戶端向服務器請求數據時,服務器直接把數據從磁盤上返回(不做任何解析),當客戶端拿到數據後,在浏覽器端解析展示出來。
高並發高訪問量的場景,做架構優化,關鍵的環節,就是把動態網頁轉成靜態網頁,不直接請求數據庫和動態服務器,並且可以把靜態內容推送到前端緩存中提供服務,可以提升用戶體驗,節約服務器和維護成本。
1、網頁擴展名常見為asp、aspx、php、jsp、do、cgi等。
2、網頁一般以數據庫技術為基礎,大大降低了網站維護的工作量。
3、采用動態網頁技術的網站可以實現更多的功能,如用戶注冊、用戶登錄、在線調查、投票、用戶管理、訂單管理、發博文等等。
4、動態網頁並不是獨立存在於服務器上的一個個網頁文件(php/jsp),當用戶請求服務器上的動態程序時,服務器解析程序並讀取數據庫返回一個完整的網頁內容。
5、動態網頁中的"?"對搜索引擎的收錄存在一定的問題,搜索引擎一般不會從一個網站的數據庫中訪問全部網頁,或者處於技術方面的考慮,搜索蜘蛛一般不會去抓取網站中"?"後面的內容,因此采用動態網頁的網站在進行搜索引擎推廣時需要做一定的技術處理(偽靜態技術)才能適應搜索引擎的抓取的要求。
6、程序在服務器端解析,服務端如:php引擎、java容器(tomcat、resin、jboss、weblogic),由於程序在服務端解析,因此,會消耗大量的CPU和內存等資源,並且多數還要讀取數據庫等服務,因此,訪問效率不如靜態網頁。
1、一般來說,靜態網頁的效果是動態網頁的10-30倍。
2、動態網頁效率很差,並發能力也很低,高並發場景中,應盡可能轉換成靜態網頁提供服務。
3、動態轉靜態也要根據業務需求設計,例如,對於更新頻繁的網站會產生數據不一致的情況,即用戶看到的數據不會是最新的內容。
4、動態轉靜態,高並發網站必備的架構方案,是高級架構師的職責所在。
從網站的URL地址看,偽靜態表面上看起來是靜態內容(如地址結尾帶html),這是通過rewite規則來實現的URL地址重寫。改寫後的URL地址規范、美觀,有利於搜索引擎抓取,以及用戶訪問體驗加強。偽靜態網頁還是動態網頁,從性能上考慮,偽靜態功能不但沒有提示網站性能,反而會降低網站的性能。
由於靜態網頁程序在客戶端解析,大大降低了服務端的訪問壓力,因此解析效率更高,在實際高並發網站架構中,可以考慮把用戶請求的數據解析後存成靜態文件存放於磁盤中或放於內存中來降低動態服務器的壓力,節約企業成本,提示用戶體驗。
新聞網站的特點是一旦發布完成,幾乎不會再改動網頁內容。因此,對於新聞的業務內容靜態化相對比較簡單:
第一步:程序支持發布內容直接轉成靜態。
第二步:運營編輯人員發布新聞網頁後,後台程序立刻將動態網頁生成靜態文件。
第三步:運維人員通過觸發把生成的靜態網頁發布到事先搭建好的公司緩存集群服務器上,或者把靜態內容同步到全國所有CDN服務器節點上,然後,再提供給用戶訪問浏覽。
優酷視頻,用戶上傳視頻,需要經歷轉碼-審核的過程,大概1-2小時,轉碼-審核-推送(同步到全國所有CDN服務器節點)。
blog、bbs、sns、微博社區業務、電商(淘寶、京東)
異步方式,消息中間件、消息隊列。
IP(獨立IP):即Internet Protocol,這裡指獨立IP數,獨立IP數是指不同IP地址的計算機訪問網站的被計算的總次數。獨立IP數是衡量網站流量的一個重要指標。一般一天內(00:00-24:00)內相同IP地址的客戶端訪問網站頁面只被計算為一次。
PV(訪問量):即Page View,頁面浏覽量或點擊量,不管客戶端是不是相同,也不管IP是不是相同。用戶每次訪問一個網站頁面都會被計算一個PV。
UV(獨立訪客):即Unique Visitor,同一台客戶端(PC或移動端)訪問網站被計算為一個訪客。UV一般是以客戶端Cookie等技術作為統計數據的,實際統計會有誤差。
網站
獨立IP/日
PV數/日
網站並發級別
機器數量
www.51cto.com
582000
1338600
10000
50台
www.ganji.com
1734000
13872000
10000-30000
幾百台
www.58.com
1398000
22927200
10000-30000
幾百台
www.weibo.com
30180000
166593600
幾十萬
千台
www.taobao.com
46620000
489510000
幾十萬-幾百萬
萬台
www.jd.com
6108000
98949600
數萬
千台
www.163.com
10320000
79154400
十萬
千台
www.suning.com
930000
7254000
10000-30000
百台
1、apache:中小型web服務的主流,web服務器中的老大哥。
2、nginx:大型網站web服務主流。nginx的分支tengine目前也在飛速發展。
3、lighttpd:社區不活躍,靜態解析效率很高。
1、php(fastcgi):大中小型網站都會使用,動態網頁語言php程序的解析容器。
2、tomcat:中小型企業動態web服務主流,互聯網java容器主流(jsp、do)。
3、resin:大型動態web服務主流,互聯網java容器主流(jsp、do)。
4、IIS:微軟的windows下的web服務軟件(asp、aspx)。
http://www.bkjia.com/Linuxjc/1193232.html TechArticle