HTTP相關(guān)知識(shí)
1.HTTP的概念
超文本傳輸協(xié)議(
HTTP
)是用于傳輸諸如HTML
的超媒體文檔的應(yīng)用層協(xié)議攀痊。它被設(shè)計(jì)用于Web
瀏覽器和Web
服務(wù)器之間的通信,但它也可以用于其他目的。HTTP
遵循經(jīng)典的客戶端-服務(wù)端模型,客戶端打開一個(gè)連接以發(fā)出請(qǐng)求谷朝,然后等待它收到服務(wù)器端響應(yīng)。HTTP
是無狀態(tài)協(xié)議设塔,意味著服務(wù)器不會(huì)在兩個(gè)請(qǐng)求之間保留任何數(shù)據(jù)(狀態(tài))。雖然通吃毒耍基于TCP / IP
層闰蛔,但可以在任何可靠的傳輸層上使用
2.URL和URI
-
URI
:uniform resource identifier 統(tǒng)一資源標(biāo)識(shí)符,一種資源的標(biāo)識(shí)图柏,它是一種抽象的資源標(biāo)識(shí)序六,即可以是相對(duì)的,也可以是絕對(duì)的蚤吹。 -
URL
:uniform resource location 統(tǒng)一資源定位符例诀,一用來標(biāo)識(shí)抽象或物理資源的一個(gè)緊湊字符串随抠。
3.HTTP報(bào)文
HTTP
報(bào)文由報(bào)文首部、空行繁涂、報(bào)文主體構(gòu)成:
其中的空行用于區(qū)分報(bào)文首部和報(bào)文主體內(nèi)容拱她,是由一個(gè)回車符和一個(gè)換行符組成的。
無論是請(qǐng)求報(bào)文還是響應(yīng)報(bào)文都需要有報(bào)文首部扔罪,而報(bào)文主體有些請(qǐng)求報(bào)文是沒有的秉沼。而請(qǐng)求報(bào)文的一般格式如下:
而響應(yīng)報(bào)文的格式是這樣的:
其中最常見的屬性如下:
-
URL
, 即http
訪問的地址 -
request method
, 報(bào)文的請(qǐng)求方式 -
status code
, 狀態(tài)碼以及狀態(tài)短語 -
Accept Encoding
, 內(nèi)容編碼 -
Connection
, 連接方式 -
Cookie
, 添加的cookie
內(nèi)容 -
Host
, 目標(biāo)主機(jī) -
User-Agent
, 客戶端瀏覽器的相關(guān)信息 -
Set-Cookie
, 指定想要在Cookie
中保存的內(nèi)容
請(qǐng)求方式(request method
)——常見GET
和POST
GET
方法可以用來請(qǐng)求訪問已經(jīng)被URL
識(shí)別的資源。指定的資源經(jīng)過服務(wù)端解析后返回響應(yīng)的內(nèi)容步势。簡單來說氧猬,就是請(qǐng)求的資源是文本的話背犯,那么就保持原樣返回坏瘩。
POST
方法可以用來傳輸實(shí)體的主體。
兩者區(qū)別:
1.使用目標(biāo)不同
POST
與GET
都用于獲取信息漠魏,但是GET
方式僅僅是查詢倔矾,并不對(duì)服務(wù)器上的內(nèi)容產(chǎn)生任何作用結(jié)果;每次GET
的內(nèi)容都是相同的柱锹。POST
則常用于發(fā)送一定的內(nèi)容進(jìn)行某些修改操作哪自。
2.大小不同
由于不同的瀏覽器對(duì)
URL
的長度大小有一定的字符限制,因此由于GET
方式放在URL
的首部中禁熏,具體的大小要依瀏覽器而定壤巷。POST
方式則是把內(nèi)容放在報(bào)文內(nèi)容中,因此只要報(bào)文的內(nèi)容沒有限制瞧毙,它的大小就沒有限制胧华。
3.安全性不同
上面也說了
GET
是直接添加到URL
后面的,直接就可以在URL
中看到內(nèi)容宙彪。而POST
是放在報(bào)文內(nèi)部的矩动,用戶無法直接看到。
總的來說释漆,GET
用于獲取某個(gè)內(nèi)容悲没,POST
用于提交某種數(shù)據(jù)請(qǐng)求,從使用場景來看男图,一般用戶注冊(cè)的內(nèi)容是私密的示姿,應(yīng)該使用POST
方式來保持私密,而當(dāng)需要查詢某個(gè)內(nèi)容時(shí)逊笆,需要快速響應(yīng)栈戳,則使用GET
。
常見status code狀態(tài)碼
200
通常的成功 OK
GET
:請(qǐng)求的對(duì)應(yīng)資源會(huì)作為響應(yīng)返回览露。響應(yīng)將包含描述或操作的結(jié)果荧琼。
POST
:返回處理對(duì)應(yīng)請(qǐng)求的結(jié)果
204
成功處理請(qǐng)求,沒有返回任何內(nèi)容 No Content
表示服務(wù)器接收到的請(qǐng)求已經(jīng)處理完畢,但是服務(wù)器不需要返回響應(yīng)命锄。比如堰乔,客戶端是瀏覽器的話,那么瀏覽器顯示的頁面不會(huì)發(fā)生更新脐恩。
206
Partial Content
成功處理了部分GET請(qǐng)求
301
Moved Permanently
請(qǐng)求的網(wǎng)頁已永久移動(dòng)到新位置镐侯,永久性重定向
302
Found
網(wǎng)站臨時(shí)性重定向,暫時(shí)不能訪問(備案驶冒、被查)
303
See Other
該狀態(tài)碼表示由于請(qǐng)求對(duì)應(yīng)的資源存在另一個(gè)URI
苟翻,并指定必須使用GET
方法定向獲取請(qǐng)求的資源。和302
不同的是骗污,302
是不會(huì)改變上次的請(qǐng)求方法
304
Not Modified
訪問不了崇猫,并返回和上次一樣的話,表示資源未被修改過,還是和上次訪問時(shí)一樣需忿。
307
Temporary Redirect
臨時(shí)重定向诅炉,和302
、303
類似屋厘,不同的是涕烧,不會(huì)指定客戶端要用什么樣的方法請(qǐng)求,
400
Bad Request
表示客戶端中存在語法錯(cuò)誤汗洒,導(dǎo)致服務(wù)器無法理解該請(qǐng)求议纯。客戶端需要修改請(qǐng)求的內(nèi)容后再次發(fā)送請(qǐng)求溢谤。
401
Unauthorized
即用戶沒有必要的憑據(jù)瞻凤。該狀態(tài)碼表示當(dāng)前請(qǐng)求需要用戶驗(yàn)證。
403
Forbidden
服務(wù)器已經(jīng)理解請(qǐng)求溯香,但是拒絕執(zhí)行它鲫构。
404
Not Found
服務(wù)器找不到請(qǐng)求的網(wǎng)頁。
500
Internal Server Error
服務(wù)器遇到錯(cuò)誤玫坛,無法完成請(qǐng)求结笨。
503
Service Unavailable
由于臨時(shí)的服務(wù)器維護(hù)或者過載,服務(wù)器當(dāng)前無法處理請(qǐng)求湿镀。這個(gè)狀況是暫時(shí)的.
內(nèi)容編碼 Accept Encoding
由于有些報(bào)文的內(nèi)容會(huì)過大炕吸,為了減少傳輸時(shí)間,HTTP
會(huì)采取一些壓縮的措施勉痴,例如上面的報(bào)文信息中赫模,Accept-Encoding
就定義了內(nèi)容編碼的格式gzip
。
總的來說內(nèi)容編碼的格式有以下幾種:
gzip
:GNU
壓縮格式
compress
:UNIX
系統(tǒng)的標(biāo)準(zhǔn)壓縮格式
deflate
:是一種同時(shí)使用了LZ77
和哈夫曼編碼的無損失壓縮格式
identity
:不進(jìn)行壓縮
持久化connection
正常發(fā)送HTTP
時(shí)蒸矛,我們需要建立TCP
的連接瀑罗,然后再發(fā)送報(bào)文:
如果每次都要發(fā)送HTTP
報(bào)文都需要經(jīng)歷上面的拿過過程胸嘴,無疑將會(huì)耗費(fèi)很多時(shí)間在建立和斷開連接的過程中,因此HTTP
使用了connection
屬性斩祭,用于指定連接的方式劣像,當(dāng)當(dāng)設(shè)置成keep-alive
時(shí),就會(huì)建立一條持久化的連接摧玫。這樣就不需要每次都建立連接在中斷連接:
(HTTP1.1
中connection
默認(rèn)開啟keep-alive
)
報(bào)文首部總結(jié)
4.HTTP方法
HTTP
支持幾種不同的請(qǐng)求命令耳奕,這些命令被稱為HTTP
方法(HTTP method
)。每 條HTTP
請(qǐng)求報(bào)文都包含一個(gè)方法诬像。這個(gè)方法會(huì)告訴服務(wù)器要執(zhí)行什么動(dòng)作(獲取 一個(gè)Web
頁面屋群、運(yùn)行一個(gè)網(wǎng)關(guān)程序、刪除一個(gè)文件等)坏挠。
下表是一些常見的HTTP
方法:
PUT傳輸文件
PUT
方法用于傳輸文件芍躏,就像FTP
協(xié)議的上傳一樣,要求在請(qǐng)求報(bào)文的主題中包含文件內(nèi)容癞揉,然后保存到請(qǐng)求URI
指定的位置纸肉。由于PUT
方法不帶驗(yàn)證機(jī)制溺欧,任何人都可以任何人都可以上傳文件喊熟,存在安全性問題,因此一般的web
網(wǎng)站不適用該方法姐刁。
DELETE刪除文件
DELETE
方法用來刪除文件芥牌,是與put
相反的方法,DELETE
方法按照請(qǐng)求url
刪除指定的資源聂使。其本質(zhì)和PUT
方法一樣不帶驗(yàn)證機(jī)制壁拉,所以建議少用DELETE
方法。
HEAD獲取報(bào)文首部
HEAD
和GET
方法一樣柏靶,只是不返回報(bào)文主體部分弃理,通常用于確認(rèn)url
的有效性及資源更新的日期時(shí)間等。
5.HTTPS的概念
HTTPS
(全稱:Hyper Text Transfer Protocol over Secure Socket Layer
)屎蜓,是以安全為目標(biāo)的HTTP
通道痘昌,簡單來說就是是HTTP
的安全版本,即在HTTP
下加入SSL
層炬转,HTTPS
的安全基石是SSL
辆苔,因此加密的詳細(xì)內(nèi)容就需要SSL
。
由于HTTP
有以下幾個(gè)缺點(diǎn):
傳輸?shù)臅r(shí)候使用明文扼劈,這顯然會(huì)被不法者截取干一些見不得人的勾當(dāng)驻啤。
沒有認(rèn)證機(jī)制,這樣我們就可以偽造一些HTTP
訪問荐吵,這顯然會(huì)造成一些困擾骑冗。比如Jmeter
就是典型的例子赊瞬,偽造一大堆的HTTP URL
然后壓力測試,這也就是DOS
攻擊的一種贼涩。
無法驗(yàn)證報(bào)文的完整性森逮,比如一個(gè)HTTP
的報(bào)文已經(jīng)被不法者截取并且篡改,而服務(wù)器端卻無法驗(yàn)證磁携。
HTTP與HTTPS的區(qū)別
正是由于以上這些缺點(diǎn)褒侧,HTTPS
作出了以下一些改變:
-
HTTP
是明文傳輸,HTTPS
通過SSL\TLS
進(jìn)行了加密谊迄; -
HTTP
的端口號(hào)是80
闷供,HTTPS
是443
; -
HTTPS
需要到CA
申請(qǐng)證書统诺,一般免費(fèi)證書很少歪脏,需要交費(fèi); -
HTTP
的連接很簡單粮呢,是無狀態(tài)的婿失。而HTTPS
協(xié)議則是由SSL+HTTP
; 協(xié)議構(gòu)建的可進(jìn)行加密傳輸啄寡、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議豪硅,比HTTP
協(xié)議安全;
HTTPS
的缺點(diǎn):
通信的速度變慢,由于需要加密挺物,一個(gè)握手就多了好幾個(gè)往返懒浮;
對(duì)用戶的機(jī)器負(fù)載的增加。
補(bǔ)充:HTTP協(xié)議與TCP協(xié)議
TCP
協(xié)議對(duì)應(yīng)于傳輸層识藤,而HTTP
協(xié)議對(duì)應(yīng)于應(yīng)用層砚著,從本質(zhì)上來說,二者沒有可比性痴昧。Http
協(xié)議是建立在TCP
協(xié)議基礎(chǔ)之上的稽穆,當(dāng)瀏覽器需要從服務(wù)器獲取網(wǎng)頁數(shù)據(jù)的時(shí)候,會(huì)發(fā)出一次Http
請(qǐng)求赶撰。Http
會(huì)通過TCP
建立起一個(gè)到服務(wù)器的連接通道舌镶,當(dāng)本次請(qǐng)求需要的數(shù)據(jù)完畢后,Http
會(huì)立即將TCP
連接斷開扣囊,這個(gè)過程是很短的乎折。所以Http
連接是一種短連接,是一種無狀態(tài)的連接侵歇。所謂的無狀態(tài)骂澄,是指瀏覽器每次向服務(wù)器發(fā)起請(qǐng)求的時(shí)候,不是通過一個(gè)連接惕虑,而是每次都建立一個(gè)新的連接坟冲。如果是一個(gè)連接的話磨镶,服務(wù)器進(jìn)程中就能保持住這個(gè)連接并且在內(nèi)存中記住一些信息狀態(tài)。而每次請(qǐng)求結(jié)束后健提,連接就關(guān)閉琳猫,相關(guān)的內(nèi)容就釋放了,所以記不住任何狀態(tài)私痹,成為無狀態(tài)連接脐嫂。
6.TCP與UDP的區(qū)別
-
TCP
面向連接(如撥打電話要先撥號(hào)建立連接);UDP
是無連接的紊遵,即發(fā)送數(shù)據(jù)之前不需要建立連接; -
TCP
提供可靠的服務(wù)账千。即通過TCP連接傳送的數(shù)據(jù),無差錯(cuò)暗膜,不重復(fù)匀奏,且按序到達(dá);UDP
盡最大努力交付学搜,即不保證可靠交付; -
TCP
面向字節(jié)流娃善,實(shí)際上是把TCP
數(shù)據(jù)看成一連串無結(jié)構(gòu)的字節(jié)流;UDP
是面向報(bào)文的瑞佩,UDP
沒有擁塞控制聚磺,因此網(wǎng)絡(luò)上出現(xiàn)擁塞不會(huì)使源主機(jī)的發(fā)送效率降低(對(duì)實(shí)時(shí)應(yīng)用很有用,如IP電話钉凌,實(shí)時(shí)視頻會(huì)議等); - 每一條
TCP
連接只能是點(diǎn)到點(diǎn)咧最;UDP
支持一對(duì)一,一對(duì)多御雕,多對(duì)一,多對(duì)多的交互通信; -
TCP
的首部開銷20
字節(jié)滥搭;UDP
的首部開銷小酸纲,只有8
個(gè)字節(jié); -
TCP
的邏輯通信信道是全雙工的可靠信道;UDP
則是不可靠信道;
7.流媒體協(xié)議:
RTP瑟匆、RTCP闽坡、RTSP、MMS愁溜、HLS疾嗅、HTTP progressive streaming
當(dāng)前在internet
上傳送音頻和視頻等信息主要有兩種方式:
下載,完整下載一個(gè)視頻冕象,再去播放
流式傳輸代承,如優(yōu)酷、愛奇藝等視頻網(wǎng)址
作用:
RTP
位于傳輸層(通常是UDP
)之上渐扮,應(yīng)用程序之下论悴,實(shí)時(shí)語音掖棉、視頻數(shù)據(jù)經(jīng)過模數(shù)轉(zhuǎn)換和壓縮編碼處理后,先送給RTP
封裝成為RTP
數(shù)據(jù)單元膀估,RTP
數(shù)據(jù)單元被封裝為UDP
數(shù)據(jù)報(bào)幔亥,然后再向下遞交給IP
封裝為IP
數(shù)據(jù)包。這么說RTP
是沒有保證傳輸成功的察纯,要保證成功帕棉,就要用到RTCP
,RTCP
消息含有已發(fā)送數(shù)據(jù)的丟包統(tǒng)計(jì)和網(wǎng)絡(luò)擁塞等信息饼记,服務(wù)器可以利用這些信息動(dòng)態(tài)的改變傳輸速率笤昨,甚至改變凈荷的類型。RTCP
消息也被封裝為UDP
數(shù)據(jù)報(bào)進(jìn)行傳輸握恳。
部分參考:
https://juejin.im/post/5afad7f16fb9a07abf72ac30?utm_medium=fe&utm_source=weixinqun