1. 程式人生 > >HTTP 之 HTTP概念介紹

HTTP 之 HTTP概念介紹

http 協議 術語 工作機制

1 概述

本文將對HTTP協議的發展,相關術語,工作機制進行介紹

2 HTTP協議發展介紹

.http/0.9

1991,原型版本,功能簡陋,只有一個命令GET

GET /index.html ,服務器只能回應HTML格式字符串,不能回應別的格式

.http/1.0:

19965,支持cache, MIME, method

每個TCP連接只能發送一個請求,發送數據完畢,連接就關閉,如果還要請求其他資源,就必須再新建一個連接,http/1.0引入了POST命令和HEAD命令

POST 上傳

HEAD 只看頭部信息,不看數據

頭信息是ASCII碼,後面數據可為任何格式。服務器回應時會告訴客戶端,數據是什麽格式,即Content-Type

字段的作用。這些數據類型總稱為MIME 多用途互聯網郵件擴展,每個值包括一級類型和二級類型,預定義的類型,也可自定義類型。

常見Content-Type值:text/xml image/jpegaudio/mp3

.http/1.1

19971月,HTTP/1.1是目前的主流

.引入了持久連接(persistent connection),即TCP連接默認不關閉,可以被多個請求復用,不用聲明Connection:keep-alive。對於同一個域名,大多數瀏覽器允許同時建立6個持久連接

.引入了管道機制(pipelining),即在同一個TCP連接裏,客戶端可以同時發送多個請求,進一步改進了HTTP協議的效率

.新增方法:PUTPATCHOPTIONSDELETE

.同一個TCP連接裏面,所有的數據通信是按次序進行的。服務器只能順序處理回應,前面的回應慢,會有許多請求排隊,造成"隊頭堵塞"Head-of-lineblocking

.為避免上述問題,兩種方法:一是減少請求數,二是同時多開持久連接。網頁優化技巧,比如合並腳本和樣式表、將圖片嵌入CSS代碼、域名分片(domain sharding)等域名分片(domain sharding)指把不同的資源放在不同的域裏

.HTTP 協議不帶有狀態,每次請求都必須附上所有信息。請求的很多字段都是重復的,浪費帶寬,影響速度

.Spdy

2009,谷歌研發,

解決HTTP/1.1 效率不高問題

.http/2.0

2015年,基於 Spdy技術,

.頭信息和數據體都是二進制,稱為頭信息幀和數據幀

.復用TCP連接,在一個連接裏,客戶端和瀏覽器都可以同時發送多個請求或回應,且不用按順序一一對應,避免了隊頭堵塞“,此雙向的實時通信稱為多工(Multiplexing

.引入頭信息壓縮機制(header compression,頭信息使用gzipcompress壓縮後再發送;客戶端和服務器同時維護一張頭信息表,所有字段都會存入這個表,生成一個索引號,不發送同樣字段,只發送索引號,提高速度

.HTTP/2 允許服務器未經請求,主動向客戶端發送資源,即服務器推送(serverpush

3 HTTP協議介紹

http協議

http/0.9, http/1.0, http/1.1,http/2.0,目前主流的版本是1.1,協議查看或分析的工具:tcpdump,wireshark,tsharkwireshare的命令行版)

.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

請求和響應的格式是通用的,使用的服務器沒有關系,如apachehnginx一樣,

響應報文和請求報文格式類似,開始行的格式有區別

關於請求和響應報文的相關介紹,見博客 http://ghbsunny.blog.51cto.com/7759574/1970485

4 HTTP服務器應用

.http服務器程序

httpd apache

nginx

lighttpd

.應用程序服務器

IIS .asp:支持動態的程序

tomcat .jsptomcat屬於中間件的程序

jetty 開源的servlet容器,基於Javaweb容器,相對tomcat而言是輕量級的,適合雲的環境

Resin CAUCHO公司,支持servletsjsp的引擎

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>

.MIMEMultipurposeInternet Mail Extensions

多用途互聯網郵件擴展 /etc/mime.types

MIME(Multipurpose Internet Mail Extensions)多用途互聯網郵件擴展類型。是設定某種擴展名文件用一種應用程序來打開的方式類型,當該擴展名文件被訪問的時候,瀏覽器會自動使用指定應用程序來打開。多用於指定一些客戶端自定義文件名,以及一些媒體文件打開方式。

它是一個互聯網標準,擴展了電子郵件標準,使其能夠支持:

ASCII字符文本;非文本格式附件(二進制、聲音、圖像等);由多部分(multipleparts)組成的消息體;包含非ASCII字符的頭信息(Header information)。

這個標準被定義在RFC 2045RFC 2046RFC 2047RFC 2048RFC 2049RFC中。 MIME改善了由RFC 822轉變而來的RFC 2822,這些舊標準規定電子郵件標準並不允許在郵件消息中使用7ASCII字符集以外的字符。正因如此,一些非英語字符消息和二進制文件,圖像,聲音等非文字消息原本都不能在電子郵件中傳輸(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 統一資源標識,分為URLURN

.URN: Uniform Resource Naming,統一資源命名

示例:P2P下載使用的磁力鏈接是URN的一種實現

magnet:?xt=urn:btih:660557A6890EF888666URN下載的資源是不確定在哪裏的,即下載的位置不固定。

.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概念介紹