HTTP 之 HTTP概念介紹
1 概述
本文將對HTTP協議的發展,相關術語,工作機制進行介紹
2 HTTP協議發展介紹
.http/0.9:
1991,原型版本,功能簡陋,只有一個命令GET
GET /index.html ,服務器只能回應HTML格式字符串,不能回應別的格式
.http/1.0:
1996年5月,支持cache, MIME, method
每個TCP連接只能發送一個請求,發送數據完畢,連接就關閉,如果還要請求其他資源,就必須再新建一個連接,http/1.0引入了POST命令和HEAD命令
POST 上傳
HEAD 只看頭部信息,不看數據
頭信息是ASCII碼,後面數據可為任何格式。服務器回應時會告訴客戶端,數據是什麽格式,即Content-Type
常見Content-Type值:text/xml image/jpegaudio/mp3
.http/1.1:
1997年1月,HTTP/1.1是目前的主流
.引入了持久連接(persistent connection),即TCP連接默認不關閉,可以被多個請求復用,不用聲明Connection:keep-alive。對於同一個域名,大多數瀏覽器允許同時建立6個持久連接
.引入了管道機制(pipelining),即在同一個TCP連接裏,客戶端可以同時發送多個請求,進一步改進了HTTP協議的效率
.新增方法:PUT、PATCH、OPTIONS、DELETE
.同一個TCP連接裏面,所有的數據通信是按次序進行的。服務器只能順序處理回應,前面的回應慢,會有許多請求排隊,造成"隊頭堵塞"(Head-of-lineblocking)
.為避免上述問題,兩種方法:一是減少請求數,二是同時多開持久連接。網頁優化技巧,比如合並腳本和樣式表、將圖片嵌入CSS代碼、域名分片(domain sharding)等域名分片(domain sharding)指把不同的資源放在不同的域裏
.HTTP 協議不帶有狀態,每次請求都必須附上所有信息。請求的很多字段都是重復的,浪費帶寬,影響速度
.Spdy:
2009年,谷歌研發,
.http/2.0:
2015年,基於 Spdy技術,
.頭信息和數據體都是二進制,稱為頭信息幀和數據幀
.復用TCP連接,在一個連接裏,客戶端和瀏覽器都可以同時發送多個請求或回應,且不用按順序一一對應,避免了“隊頭堵塞“,此雙向的實時通信稱為多工(Multiplexing)
.引入頭信息壓縮機制(header compression),頭信息使用gzip或compress壓縮後再發送;客戶端和服務器同時維護一張頭信息表,所有字段都會存入這個表,生成一個索引號,不發送同樣字段,只發送索引號,提高速度
.HTTP/2 允許服務器未經請求,主動向客戶端發送資源,即服務器推送(serverpush)
3 HTTP協議介紹
http協議
http/0.9, http/1.0, http/1.1,http/2.0,目前主流的版本是1.1,協議查看或分析的工具:tcpdump,wireshark,tshark(wireshare的命令行版)
.http協議:stateless無狀態
無狀態指不能判斷用戶的來源。服務器無法持續追蹤訪問者來源
.解決http協議無狀態方法
cookie 客戶端存放,由服務器生成,把用戶的信息,如編號進行封裝後發給客戶端保存,當客戶端下次在訪問同一網站的時候,就會把上次生成的cookie一起發給服務器端。此時服務器又會生成新的cookie,再次發給客戶端保存
cookie是一段文本文件,相當於是小型數據庫,http協議是無法實現身份驗證的,cookie配合http協議實現身份的驗證
cookie分成多種:輕量級和重量級的cookie
重量級,把所有的信息,如範圍網站的行為,都放到cookie裏
重cookie有個缺點時,換了機器,cookie就不存在了。而且按照cookie的原理,cookie會一直增大,造成了麻煩,所以一般不會采用重cookie
輕量級cookie之後將服務器生成的id(如用戶登錄的用戶名)封裝在cookie裏發給用戶。
瀏覽器中查看cookie
在谷歌網頁的 “設置-->內容設置”,可以直接打開cookie查看
在Firefox中查看cookie, 可以選擇”工具 > 選項 >隱私 >移除特定網站的Cookie。”可以查看cookie。
session 服務端存放。
session可以理解成時服務器端的小型數據庫,這個會根據id來記錄這個session,配合輕量級cookie來實現。session是放在服務器的磁盤裏的。
session有個問題是,當有多臺服務器提供統一服務時,這個時候存在seesion同步的問題。
解決session同步的方法
1.自動同步session,這個會造成服務器壓力,僅適合小環境,如三五臺機器
2.在web服務器前設置一個調度器(反向代理),當用戶發起請求的時候,首先訪問到調度器,該調度器不提供服務,但是轉發請求到對應的服務器上,用戶請求的時候,是同一ip,訪問到調度器,此時要根據算法來實現調度器分配請求。其中,調度器可以根據ip來分配該請求分配到哪一臺機器上
3.專門找一臺session服務器。這是主流的做法。
事務的概念
http事務:一次訪問的過程,有請求和響應,不同的協議報頭
請求:request
響應:response
請求和響應的格式是通用的,使用的服務器沒有關系,如apacheh和nginx一樣,
響應報文和請求報文格式類似,開始行的格式有區別
關於請求和響應報文的相關介紹,見博客 http://ghbsunny.blog.51cto.com/7759574/1970485
4 HTTP服務器應用
.http服務器程序
httpd apache
nginx
lighttpd
.應用程序服務器
IIS .asp:支持動態的程序
tomcat .jsp,tomcat屬於中間件的程序
jetty 開源的servlet容器,基於Java的web容器,相對tomcat而言是輕量級的,適合雲的環境
Resin CAUCHO公司,支持servlets和jsp的引擎
webshpere(IBM), weblogic(BEA),jboss,oc4j(Oracle)
.市場占有率統計,查看網站www.netcraft.com
5 HTTP相關術語
.http:
Hyper Text Transfer Protocol,80/tcp,超文本傳輸協議。
.html:
Hyper Text Markup Language 超文本標記語言,編程語言
html是一種文本語言,帶標簽,
http協議是網絡協議,網絡中傳輸可以是a.html,a.txt,a.mp3格式的文件。其中html格式比文本格式顯示會更漂亮。html是帶格式的文本。瀏覽器根據html的標簽來顯示不同的字體或顏色,使得顯示更漂亮
.示例:
<html> <head> <title>html語言</title> </head> <body> <h1>標題1</h1> <p><ahref=http://www.magedu.com>sunny home</a>歡迎你</p> <h2>標題2</h2> </body> </html>
.MIME:MultipurposeInternet Mail Extensions
多用途互聯網郵件擴展 /etc/mime.types。
MIME(Multipurpose Internet Mail Extensions)多用途互聯網郵件擴展類型。是設定某種擴展名的文件用一種應用程序來打開的方式類型,當該擴展名文件被訪問的時候,瀏覽器會自動使用指定應用程序來打開。多用於指定一些客戶端自定義的文件名,以及一些媒體文件打開方式。
它是一個互聯網標準,擴展了電子郵件標準,使其能夠支持:
非ASCII字符文本;非文本格式附件(二進制、聲音、圖像等);由多部分(multipleparts)組成的消息體;包含非ASCII字符的頭信息(Header information)。
這個標準被定義在RFC 2045、RFC 2046、RFC 2047、RFC 2048、RFC 2049等RFC中。 MIME改善了由RFC 822轉變而來的RFC 2822,這些舊標準規定電子郵件標準並不允許在郵件消息中使用7位ASCII字符集以外的字符。正因如此,一些非英語字符消息和二進制文件,圖像,聲音等非文字消息原本都不能在電子郵件中傳輸(MIME可以)。MIME規定了用於表示各種各樣的數據類型的符號化方法。此外,在萬維網中使用的HTTP協議中也使用了MIME的框架,標準被擴展為互聯網媒體類型。
多用途互聯網郵件擴展,它是一個互聯網標準,在1992年最早應用於電子郵件系統,但後來也應用到瀏覽器。服務器會將它們發送的多媒體數據的類型告訴瀏覽器,而通知手段就是說明該多媒體數據的MIME類型,從而讓瀏覽器知道接收到的信息哪些是MP3文件,哪些是Shockwave文件等等。服務器將MIME標誌符放入傳送的數據中來告訴瀏覽器使用哪種插件讀取相關文件。
.格式:major/minor(大類別/細分類別) text/plain text/html text/css image/jpeg image/png video/mp4 application/javascript
URI
.URI: Uniform Resource Identifier 統一資源標識,分為URL和URN
.URN: Uniform Resource Naming,統一資源命名
示例:P2P下載使用的磁力鏈接是URN的一種實現
magnet:?xt=urn:btih:660557A6890EF888666,URN下載的資源是不確定在哪裏的,即下載的位置不固定。
.URL: Uniform ResorceLocator,統一資源定位符,用於描述某服務器某特定資源位置
.兩者區別:URN如同一個人的名稱,而URL代表一個人的住址。換言之,URN定義某事物的身份,而URL提供查找該事物的方法。URN僅用於命名,而不指定地址
URL組成
URL組成可以用以下截圖來說明
URL不一定是http協議,可以是ftp或郵件協議等
.<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
.schame:方案,訪問服務器以獲取資源時要使用哪種協議
.user:用戶,某些方案訪問資源時需要的用戶名
.password:密碼,用戶對應的密碼,中間用:分隔
.Host:主機,資源宿主服務器的主機名或IP地址
.port:端口,資源宿主服務器正在監聽的端口號,很多方案有默認端口號
.path:路徑,服務器資源的本地名,由一個/將其與前面的URL組件分隔
路徑可以不是服務器的的實際路徑,比如該url被重定向到其他位置
.params:參數,指定輸入的參數,參數為名/值對,多個參數,用;分隔
.query:查詢,傳遞參數給程序,如數據庫,用?分隔,多個查詢用&分隔
.frag:片段,一小片或一部分資源的名字,此組件在客戶端使用,用#分隔
#用於定位,文檔的內容地址定位
URL示例
.http://www.magedu.com:8080/images/logo.jpg
.ftp://mage:[email protected]/pub/linux.ppt
.rtsp://videoserver/video_demo/
Real Time Streaming Protocol
.http://www.magedu.com/bbs/hello;gender=f/send;type=title
.https://list.jd.com/list.html?cat=670,671,672&ev=149_2992&sort=sort_totalsales15_desc&trans=1
.http://apache.org/index.html#projects-list
網站訪問量
.IP(獨立IP):即Internet Protocol,指獨立IP數。一天內來自相同客戶機IP地址只計算一次,記錄遠程客戶機IP地址的計算機訪問網站的次數,是衡量網站流量的重要指標。
用ip138.com就可以查看到主機對外的端口
如局域網對外就一個ip,所以通過ip來統計可能不準確
.PV(訪問量):即Page View, 頁面瀏覽量或點擊量,用戶每次刷新即被計算一次,PV反映的是瀏覽某網站的頁面數,PV與來訪者的數量成正比,PV並不是頁面的來訪者數量,而是網站被訪問的頁面數量
.UV(獨立訪客):即Unique Visitor,訪問網站的一臺電腦為一個訪客。一天內相同的客戶端只被計算一次。可以理解成訪問某網站的電腦的數量。網站判斷來訪電腦的身份是通過來訪電腦的cookies實現的。如果更換了IP後但不清除cookies,再訪問相同網站,該網站的統計中UV數是不變的
.網站統計:http://www.alexa.cn/rank/
網站訪問統計示例
.示例:
.甲乙丙三人在同一臺通過ADSL上網的電腦上(中間沒有斷網),分別訪問www.magedu.com網站,並且每人各瀏覽了2個頁面,那麽網站的流量統計是:
IP:1 PV:6 UV:1
.若三人都是ADSL重新撥號後,各瀏覽了2個頁面,則
IP:3 PV:6 UV:1
6 HTTP工作機制
.工作機制:
http請求:httprequest
客戶端發過來的請求
http響應:httpresponse
一次http事務:請求<-->響應
.Web資源:webresource
一個網頁由多個資源構成,打開一個頁面,會有多個資源展示出來,但是每個資源都要單獨請求。因此,一個“Web 頁面”通常並不是單個資源,而是一組資源的集合
每個資源都有對應的地址
.靜態文件:無需服務端做出額外處理,在客戶端生成
文件後綴:.jpg,.html, .txt, .js, .css, .mp3, .avi
.動態文件:服務端執行程序,返回執行的結果,在服務器端生成。
文件後綴:.asp,.php, .jsp
.提高HTTP連接性能
.並行連接:通過多條TCP連接發起並發的HTTP請求,瀏覽器是並行連接
.持久連接:keep-alive,長連接,重用TCP連接,以消除連接和關閉的時延,以事務個數和時間來決定是否關閉連接
一個tcp連接可以下載多個資源,叫持久連接
.管道化連接:通過共享TCP連接發起並發的HTTP請求
一個連接裏可以發起多個鏈接
.復用的連接:交替傳送請求和響應報文(實驗階段)
交替傳輸請求和響應報文,目前還是實驗階段
7 HTTP服務通信過程
http的端口是80.基於socket通信,是應用層的協議。服務通信過程見以下兩張截圖
串行,並行,持久連接,管道連接 圖形說明
串行 是一次連接只能下載一個資源
並行是第一次建立一個連接,連接成功後,並發創建多個連接
持久連接是建立第一次連接後,之後的下載是利用第一次的連接來下載,不需要重新創建連接。
管道化連接,即創建一個連接後,可以並行發起多個請求
本文出自 “陽光運維” 博客,請務必保留此出處http://ghbsunny.blog.51cto.com/7759574/1970488
HTTP 之 HTTP概念介紹