HTTP 之 HTTP概念介紹

1 概述

本文將對HTTP協(xié)議的發(fā)展,相關(guān)術(shù)語方妖,工作機(jī)制進(jìn)行介紹

2 HTTP協(xié)議發(fā)展介紹

.http/0.9:

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

GET /index.html ,服務(wù)器只能回應(yīng)HTML格式字符串趁蕊,不能回應(yīng)別的格式

.http/1.0:

1996年5月,支持cache, MIME, method

每個TCP連接只能發(fā)送一個請求坞生,發(fā)送數(shù)據(jù)完畢仔役,連接就關(guān)閉,如果還要請求其他資源是己,就必須再新建一個連接又兵,http/1.0引入了POST命令和HEAD命令

POST上傳

HEAD只看頭部信息,不看數(shù)據(jù)

頭信息是ASCII碼卒废,后面數(shù)據(jù)可為任何格式沛厨。服務(wù)器回應(yīng)時會告訴客戶端,數(shù)據(jù)是什么格式摔认,即Content-Type字段的作用逆皮。這些數(shù)據(jù)類型總稱為MIME多用途互聯(lián)網(wǎng)郵件擴(kuò)展,每個值包括一級類型和二級類型参袱,預(yù)定義的類型电谣,也可自定義類型。

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

.http/1.1:

1997年1月抹蚀,HTTP/1.1是目前的主流

.引入了持久連接(persistent connection)剿牺,即TCP連接默認(rèn)不關(guān)閉,可以被多個請求復(fù)用环壤,不用聲明Connection:keep-alive晒来。對于同一個域名,大多數(shù)瀏覽器允許同時建立6個持久連接

.引入了管道機(jī)制(pipelining)郑现,即在同一個TCP連接里湃崩,客戶端可以同時發(fā)送多個請求荧降,進(jìn)一步改進(jìn)了HTTP協(xié)議的效率

.新增方法:PUT、PATCH攒读、OPTIONS誊抛、DELETE

.同一個TCP連接里面,所有的數(shù)據(jù)通信是按次序進(jìn)行的整陌。服務(wù)器只能順序處理回應(yīng)拗窃,前面的回應(yīng)慢,會有許多請求排隊泌辫,造成"隊頭堵塞"(Head-of-lineblocking)

.為避免上述問題随夸,兩種方法:一是減少請求數(shù),二是同時多開持久連接震放。網(wǎng)頁優(yōu)化技巧宾毒,比如合并腳本和樣式表、將圖片嵌入CSS代碼殿遂、域名分片(domain sharding)等域名分片(domain sharding)指把不同的資源放在不同的域里

.HTTP協(xié)議不帶有狀態(tài)诈铛,每次請求都必須附上所有信息。請求的很多字段都是重復(fù)的墨礁,浪費帶寬幢竹,影響速度

.Spdy:

2009年,谷歌研發(fā),解決HTTP/1.1效率不高問題

.http/2.0:

2015年,基于Spdy技術(shù)恩静,

.頭信息和數(shù)據(jù)體都是二進(jìn)制焕毫,稱為頭信息幀和數(shù)據(jù)幀

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

.引入頭信息壓縮機(jī)制(header compression),頭信息使用gzip或compress壓縮后再發(fā)送级乐;客戶端和服務(wù)器同時維護(hù)一張頭信息表疙咸,所有字段都會存入這個表,生成一個索引號风科,不發(fā)送同樣字段撒轮,只發(fā)送索引號,提高速度

.HTTP/2允許服務(wù)器未經(jīng)請求丐重,主動向客戶端發(fā)送資源腔召,即服務(wù)器推送(serverpush)

3 HTTP協(xié)議介紹

http協(xié)議

http/0.9, http/1.0, http/1.1,http/2.0,目前主流的版本是1.1扮惦,協(xié)議查看或分析的工具:tcpdump,wireshark,tshark(wireshare的命令行版)

.http協(xié)議:stateless無狀態(tài)

無狀態(tài)指不能判斷用戶的來源臀蛛。服務(wù)器無法持續(xù)追蹤訪問者來源

.解決http協(xié)議無狀態(tài)方法

cookie客戶端存放,由服務(wù)器生成,把用戶的信息浊仆,如編號進(jìn)行封裝后發(fā)給客戶端保存客峭,當(dāng)客戶端下次在訪問同一網(wǎng)站的時候,就會把上次生成的cookie一起發(fā)給服務(wù)器端抡柿。此時服務(wù)器又會生成新的cookie舔琅,再次發(fā)給客戶端保存

cookie是一段文本文件,相當(dāng)于是小型數(shù)據(jù)庫洲劣,http協(xié)議是無法實現(xiàn)身份驗證的,cookie配合http協(xié)議實現(xiàn)身份的驗證

cookie分成多種:輕量級和重量級的cookie

重量級备蚓,把所有的信息,如范圍網(wǎng)站的行為囱稽,都放到cookie里

重cookie有個缺點時郊尝,換了機(jī)器,cookie就不存在了战惊。而且按照cookie的原理流昏,cookie會一直增大,造成了麻煩吞获,所以一般不會采用重cookie

輕量級cookie之后將服務(wù)器生成的id(如用戶登錄的用戶名)封裝在cookie里發(fā)給用戶况凉。

瀏覽器中查看cookie

在谷歌網(wǎng)頁的? “設(shè)置-->內(nèi)容設(shè)置”,可以直接打開cookie查看

在Firefox中查看cookie, 可以選擇”工具 > 選項 >隱私 >移除特定網(wǎng)站的Cookie各拷〉笕蓿”可以查看cookie。

session服務(wù)端存放撤逢。

session可以理解成時服務(wù)器端的小型數(shù)據(jù)庫膛锭,這個會根據(jù)id來記錄這個session,配合輕量級cookie來實現(xiàn)粮坞。session是放在服務(wù)器的磁盤里的蚊荣。

session有個問題是,當(dāng)有多臺服務(wù)器提供統(tǒng)一服務(wù)時莫杈,這個時候存在seesion同步的問題互例。

解決session同步的方法

1.自動同步session,這個會造成服務(wù)器壓力筝闹,僅適合小環(huán)境媳叨,如三五臺機(jī)器

2.在web服務(wù)器前設(shè)置一個調(diào)度器(反向代理),當(dāng)用戶發(fā)起請求的時候关顷,首先訪問到調(diào)度器糊秆,該調(diào)度器不提供服務(wù),但是轉(zhuǎn)發(fā)請求到對應(yīng)的服務(wù)器上议双,用戶請求的時候痘番,是同一ip,訪問到調(diào)度器,此時要根據(jù)算法來實現(xiàn)調(diào)度器分配請求汞舱。其中伍纫,調(diào)度器可以根據(jù)ip來分配該請求分配到哪一臺機(jī)器上

3.專門找一臺session服務(wù)器。這是主流的做法昂芜。

事務(wù)的概念

http事務(wù):一次訪問的過程莹规,有請求和響應(yīng),不同的協(xié)議報頭

請求:request

響應(yīng):response

請求和響應(yīng)的格式是通用的泌神,使用的服務(wù)器沒有關(guān)系良漱,如apacheh和nginx一樣,

響應(yīng)報文和請求報文格式類似欢际,開始行的格式有區(qū)別

關(guān)于請求和響應(yīng)報文的相關(guān)介紹债热,見博客http://ghbsunny.blog.51cto.com/7759574/1970485

4 HTTP服務(wù)器應(yīng)用

.http服務(wù)器程序

httpd? apache

nginx

lighttpd

.應(yīng)用程序服務(wù)器

IIS .asp:支持動態(tài)的程序

tomcat .jsp,tomcat屬于中間件的程序

jetty開源的servlet容器幼苛,基于Java的web容器窒篱,相對tomcat而言是輕量級的,適合云的環(huán)境

Resin CAUCHO公司舶沿,支持servlets和jsp的引擎

webshpere(IBM), weblogic(BEA),jboss,oc4j(Oracle)

.市場占有率統(tǒng)計墙杯,查看網(wǎng)站www.netcraft.com

5 HTTP相關(guān)術(shù)語

.http:

Hyper Text Transfer Protocol,80/tcp,超文本傳輸協(xié)議括荡。

.html:

Hyper Text Markup Language超文本標(biāo)記語言高镐,編程語言

html是一種文本語言,帶標(biāo)簽畸冲,

http協(xié)議是網(wǎng)絡(luò)協(xié)議嫉髓,網(wǎng)絡(luò)中傳輸可以是a.html,a.txt,a.mp3格式的文件。其中html格式比文本格式顯示會更漂亮邑闲。html是帶格式的文本算行。瀏覽器根據(jù)html的標(biāo)簽來顯示不同的字體或顏色,使得顯示更漂亮

.示例:

html語言

標(biāo)題1

sunny home歡迎你

標(biāo)題2

.MIME:MultipurposeInternet Mail Extensions

多用途互聯(lián)網(wǎng)郵件擴(kuò)展/etc/mime.types苫耸。

MIME(Multipurpose Internet Mail Extensions)多用途互聯(lián)網(wǎng)郵件擴(kuò)展類型州邢。是設(shè)定某種擴(kuò)展名文件用一種應(yīng)用程序來打開的方式類型,當(dāng)該擴(kuò)展名文件被訪問的時候褪子,瀏覽器會自動使用指定應(yīng)用程序來打開量淌。多用于指定一些客戶端自定義文件名,以及一些媒體文件打開方式嫌褪。

它是一個互聯(lián)網(wǎng)標(biāo)準(zhǔn)呀枢,擴(kuò)展了電子郵件標(biāo)準(zhǔn),使其能夠支持:

非ASCII字符文本笼痛;非文本格式附件(二進(jìn)制裙秋、聲音、圖像等);由多部分(multipleparts)組成的消息體残吩;包含非ASCII字符的頭信息(Header information)财忽。

這個標(biāo)準(zhǔn)被定義在RFC 2045、RFC 2046泣侮、RFC 2047即彪、RFC 2048、RFC 2049等RFC中活尊。MIME改善了由RFC 822轉(zhuǎn)變而來的RFC 2822隶校,這些舊標(biāo)準(zhǔn)規(guī)定電子郵件標(biāo)準(zhǔn)并不允許在郵件消息中使用7位ASCII字符集以外的字符。正因如此蛹锰,一些非英語字符消息和二進(jìn)制文件深胳,圖像,聲音等非文字消息原本都不能在電子郵件中傳輸(MIME可以)铜犬。MIME規(guī)定了用于表示各種各樣的數(shù)據(jù)類型的符號化方法氛谜。此外播聪,在萬維網(wǎng)中使用的HTTP協(xié)議中也使用了MIME的框架般又,標(biāo)準(zhǔn)被擴(kuò)展為互聯(lián)網(wǎng)媒體類型适秩。

多用途互聯(lián)網(wǎng)郵件擴(kuò)展,它是一個互聯(lián)網(wǎng)標(biāo)準(zhǔn)纷宇,在1992年最早應(yīng)用于電子郵件系統(tǒng)夸盟,但后來也應(yīng)用到瀏覽器服務(wù)器會將它們發(fā)送的多媒體數(shù)據(jù)的類型告訴瀏覽器像捶,而通知手段就是說明該多媒體數(shù)據(jù)的MIME類型上陕,從而讓瀏覽器知道接收到的信息哪些是MP3文件,哪些是Shockwave文件等等拓春。服務(wù)器將MIME標(biāo)志符放入傳送的數(shù)據(jù)中來告訴瀏覽器使用哪種插件讀取相關(guān)文件释簿。

.格式:major/minor(大類別/細(xì)分類別)

text/plain

text/html

text/css

image/jpeg

image/png

video/mp4

application/javascript

URI

.URI: Uniform Resource Identifier統(tǒng)一資源標(biāo)識,分為URL和URN

.URN: Uniform Resource Naming痘儡,統(tǒng)一資源命名

示例:P2P下載使用的磁力鏈接是URN的一種實現(xiàn)

magnet:?xt=urn:btih:660557A6890EF888666辕万,URN下載的資源是不確定在哪里的,即下載的位置不固定沉删。

.URL: Uniform ResorceLocator,統(tǒng)一資源定位符醉途,用于描述某服務(wù)器某特定資源位置

.兩者區(qū)別:URN如同一個人的名稱矾瑰,而URL代表一個人的住址。換言之隘擎,URN定義某事物的身份殴穴,而URL提供查找該事物的方法。URN僅用于命名,而不指定地址

URL組成

URL組成可以用以下截圖來說明

URL不一定是http協(xié)議采幌,可以是ftp或郵件協(xié)議等

.://:@:/;?#

.schame:方案劲够,訪問服務(wù)器以獲取資源時要使用哪種協(xié)議

.user:用戶,某些方案訪問資源時需要的用戶名

.password:密碼休傍,用戶對應(yīng)的密碼征绎,中間用:分隔

.Host:主機(jī),資源宿主服務(wù)器的主機(jī)名或IP地址

.port:端口,資源宿主服務(wù)器正在監(jiān)聽的端口號磨取,很多方案有默認(rèn)端口號

.path:路徑,服務(wù)器資源的本地名人柿,由一個/將其與前面的URL組件分隔

路徑可以不是服務(wù)器的的實際路徑,比如該url被重定向到其他位置

.params:參數(shù),指定輸入的參數(shù)忙厌,參數(shù)為名/值對凫岖,多個參數(shù),用;分隔

.query:查詢逢净,傳遞參數(shù)給程序哥放,如數(shù)據(jù)庫,用爹土?分隔,多個查詢用&分隔

.frag:片段,一小片或一部分資源的名字婶芭,此組件在客戶端使用,用#分隔

#用于定位着饥,文檔的內(nèi)容地址定位

URL示例

.http://www.magedu.com:8080/images/logo.jpg

.ftp://mage:password@172.16.0.1/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

網(wǎng)站訪問量

.IP(獨立IP):即Internet Protocol,指獨立IP數(shù)犀农。一天內(nèi)來自相同客戶機(jī)IP地址只計算一次,記錄遠(yuǎn)程客戶機(jī)IP地址的計算機(jī)訪問網(wǎng)站的次數(shù)宰掉,是衡量網(wǎng)站流量的重要指標(biāo)呵哨。

用ip138.com就可以查看到主機(jī)對外的端口

如局域網(wǎng)對外就一個ip,所以通過ip來統(tǒng)計可能不準(zhǔn)確

.PV(訪問量):即Page View,頁面瀏覽量或點擊量轨奄,用戶每次刷新即被計算一次孟害,PV反映的是瀏覽某網(wǎng)站的頁面數(shù),PV與來訪者的數(shù)量成正比挪拟,PV并不是頁面的來訪者數(shù)量挨务,而是網(wǎng)站被訪問的頁面數(shù)量

.UV(獨立訪客):即Unique Visitor,訪問網(wǎng)站的一臺電腦為一個訪客。一天內(nèi)相同的客戶端只被計算一次玉组』驯可以理解成訪問某網(wǎng)站的電腦的數(shù)量。網(wǎng)站判斷來訪電腦的身份是通過來訪電腦的cookies實現(xiàn)的惯雳。如果更換了IP后但不清除cookies朝巫,再訪問相同網(wǎng)站,該網(wǎng)站的統(tǒng)計中UV數(shù)是不變的

.網(wǎng)站統(tǒng)計:http://www.alexa.cn/rank/

網(wǎng)站訪問統(tǒng)計示例

.示例:

.甲乙丙三人在同一臺通過ADSL上網(wǎng)的電腦上(中間沒有斷網(wǎng))石景,分別訪問www.magedu.com網(wǎng)站劈猿,并且每人各瀏覽了2個頁面拙吉,那么網(wǎng)站的流量統(tǒng)計是:

IP:1?? PV:6??UV:1

.若三人都是ADSL重新?lián)芴柡?各瀏覽了2個頁面,則

IP:3?? PV:6??UV:1

6 HTTP工作機(jī)制

.工作機(jī)制:

http請求:httprequest

客戶端發(fā)過來的請求

http響應(yīng):httpresponse

一次http事務(wù):請求<-->響應(yīng)

.Web資源:webresource

一個網(wǎng)頁由多個資源構(gòu)成揪荣,打開一個頁面筷黔,會有多個資源展示出來,但是每個資源都要單獨請求仗颈。因此佛舱,一個“Web頁面”通常并不是單個資源,而是一組資源的集合

每個資源都有對應(yīng)的地址

.靜態(tài)文件:無需服務(wù)端做出額外處理揽乱,在客戶端生成

文件后綴:.jpg,.html, .txt, .js, .css, .mp3, .avi

.動態(tài)文件:服務(wù)端執(zhí)行程序名眉,返回執(zhí)行的結(jié)果,在服務(wù)器端生成凰棉。

文件后綴:.asp,.php, .jsp

.提高HTTP連接性能

.并行連接:通過多條TCP連接發(fā)起并發(fā)的HTTP請求损拢,瀏覽器是并行連接

.持久連接:keep-alive,長連接,重用TCP連接撒犀,以消除連接和關(guān)閉的時延,以事務(wù)個數(shù)和時間來決定是否關(guān)閉連接

一個tcp連接可以下載多個資源福压,叫持久連接

.管道化連接:通過共享TCP連接發(fā)起并發(fā)的HTTP請求

一個連接里可以發(fā)起多個鏈接

.復(fù)用的連接:交替?zhèn)魉驼埱蠛晚憫?yīng)報文(實驗階段)

交替?zhèn)鬏斦埱蠛晚憫?yīng)報文,目前還是實驗階段

7 HTTP服務(wù)通信過程

http的端口是80.基于socket通信或舞,是應(yīng)用層的協(xié)議荆姆。服務(wù)通信過程見以下兩張截圖

串行,并行映凳,持久連接胆筒,管道連接 圖形說明

串行是一次連接只能下載一個資源

并行是第一次建立一個連接,連接成功后诈豌,并發(fā)創(chuàng)建多個連接

持久連接是建立第一次連接后仆救,之后的下載是利用第一次的連接來下載,不需要重新創(chuàng)建連接矫渔。

管道化連接彤蔽,即創(chuàng)建一個連接后,可以并行發(fā)起多個請求

?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末庙洼,一起剝皮案震驚了整個濱河市顿痪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌油够,老刑警劉巖蚁袭,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異叠聋,居然都是意外死亡撕阎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門碌补,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虏束,“玉大人,你說我怎么就攤上這事厦章≌蛟龋” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵袜啃,是天一觀的道長汗侵。 經(jīng)常有香客問我,道長群发,這世上最難降的妖魔是什么晰韵? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮熟妓,結(jié)果婚禮上雪猪,老公的妹妹穿的比我還像新娘。我一直安慰自己起愈,他們只是感情好只恨,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抬虽,像睡著了一般官觅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阐污,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天休涤,我揣著相機(jī)與錄音,去河邊找鬼笛辟。 笑死功氨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的隘膘。 我是一名探鬼主播疑故,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼弯菊!你這毒婦竟也來了纵势?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤管钳,失蹤者是張志新(化名)和其女友劉穎钦铁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體才漆,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡牛曹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了醇滥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黎比。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡超营,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出阅虫,到底是詐尸還是另有隱情演闭,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布颓帝,位于F島的核電站米碰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏购城。R本人自食惡果不足惜吕座,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瘪板。 院中可真熱鬧吴趴,春花似錦、人聲如沸篷帅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽魏身。三九已至惊橱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間箭昵,已是汗流浹背税朴。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留家制,地道東北人正林。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像颤殴,于是被迫代替她去往敵國和親觅廓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容