HTTP
超文本傳輸協(xié)議 Hyper Text
Transfer Protocol,是符合TCP標(biāo)準(zhǔn)的應(yīng)用層,以明文方式發(fā)送內(nèi)容,不提供任何方式的數(shù)據(jù)加密。
請(qǐng)求方法
GET POST PUT HEAD OPTIONS DELETE TRACE CONNECT
請(qǐng)求頭
通用頭 請(qǐng)求頭 響應(yīng)頭 實(shí)體頭
連接
- 短連接: 1.0默認(rèn)使用短連接,即每次請(qǐng)求都要重新發(fā)起連接,數(shù)據(jù)交換結(jié)束即關(guān)閉連接
- 長(zhǎng)連接:1.1起默認(rèn)使用長(zhǎng)連接,連接建立后不斷開(kāi)。
各版本
1.0
- 默認(rèn)使用短連接
- 使用if-modified-since expires來(lái)做緩存判斷標(biāo)準(zhǔn)
- 存在帶寬浪費(fèi)現(xiàn)象,比如客戶端僅需要對(duì)象的一部分,服務(wù)端將整個(gè)對(duì)象送來(lái)
1.1
- 默認(rèn)使用長(zhǎng)連接
- 引入更多緩存判斷標(biāo)準(zhǔn)Etag if-None-Match
- 允許請(qǐng)求資源的某個(gè)部分
- 新增了24個(gè)狀態(tài)碼
2.0
- 允許多路復(fù)用,做到同一個(gè)連接并發(fā)處理多個(gè)請(qǐng)求
- 支持二進(jìn)制編碼
- 將相同的首部進(jìn)行壓縮,不重復(fù)傳輸
- 流量控制
- 支持服務(wù)器推送(CSS和JS一起發(fā)送),不僅只是客戶端發(fā)起請(qǐng)求,服務(wù)端可以自己發(fā)送一些數(shù)據(jù)。
3.0
1、QUIC (Quick UDP Internet Connections)是基于UDP協(xié)議的。
2、解決了 TCP 的隊(duì)頭阻塞問(wèn)題(某一個(gè)流的數(shù)據(jù)有丟包,則同樣會(huì)阻塞在它之后傳輸?shù)牧鲾?shù)據(jù)傳輸)。而 http3.0 中不同的流之間真正的實(shí)現(xiàn)相互獨(dú)立傳輸,互不干擾。
3、在切換網(wǎng)絡(luò)時(shí)的依舊保持連接。
狀態(tài)碼
| 狀態(tài)碼 | 解釋 |
|---|---|
| 100 | 服務(wù)器收到了請(qǐng)求,請(qǐng)客戶端繼續(xù)發(fā)送 1XX是1.1版本新定義的,可以優(yōu)化某些場(chǎng)景,比如:客戶端有一個(gè)較大的文件需要上傳并保存,但是客戶端并不知道服務(wù)端是否愿意接受這個(gè)文件,所以希望在消耗網(wǎng)絡(luò)資源進(jìn)行傳輸之前,先詢問(wèn)服務(wù)器的意愿,實(shí)際操作為,請(qǐng)求頭加上Expect: 100-coninue, 若服務(wù)器接受,返回100,否則417 |
| 200 | 請(qǐng)求成功 |
| 201 | 成功請(qǐng)求并創(chuàng)建了新資源 |
| 202 | 已接受請(qǐng)求,但未處理完成 |
| 203 | 非授權(quán)信息 |
| 204 | 服務(wù)器成功處理,但未返回內(nèi)容 |
| 301 | 請(qǐng)求的資源已被永久的移動(dòng)到新URL,返回信息會(huì)包括新的URL |
| 302 | 資源臨時(shí)被移動(dòng),客戶端應(yīng)繼續(xù)使用原有URL |
| 303 | 使用GET和POST請(qǐng)求查看其他地址 |
| 304 | 請(qǐng)求已被允許,但文檔的內(nèi)容并沒(méi)有改變(緩存) |
| 305 | 所請(qǐng)求的資源必須通過(guò)代理訪問(wèn) |
| 307 | 使用GET請(qǐng)求重定向 |
| 400 | 請(qǐng)求無(wú)效,前端數(shù)據(jù)與后端數(shù)據(jù)不一致,請(qǐng)求格式不對(duì) |
| 401 | 當(dāng)前請(qǐng)求需要用戶驗(yàn)證 |
| 403 | 服務(wù)器已經(jīng)得到請(qǐng)求,但是拒絕執(zhí)行,比如身份驗(yàn)證不通過(guò) |
| 404 | 服務(wù)器無(wú)法根據(jù)客戶端的請(qǐng)求找到資源 |
| 405 | 客戶端請(qǐng)求中的方法被禁止 |
| 408 | 服務(wù)器等待客戶端發(fā)送的請(qǐng)求時(shí)間過(guò)長(zhǎng),請(qǐng)求超時(shí) |
| 410 | 客戶端請(qǐng)求的資源已經(jīng)不存在 |
| 413 | 由于請(qǐng)求的實(shí)體過(guò)大,服務(wù)器無(wú)法處理,因此拒絕 |
| 414 | 請(qǐng)求的URL過(guò)長(zhǎng) |
| 415 | 服務(wù)器無(wú)法處理請(qǐng)求附帶的媒體格式 |
| 416 | 客戶端請(qǐng)求的范圍無(wú)效 |
| 500 | 服務(wù)器內(nèi)部錯(cuò)誤,無(wú)法完成請(qǐng)求 |
| 501 | 這個(gè)狀態(tài)碼不常見(jiàn),意思是未實(shí)現(xiàn),這個(gè)解釋會(huì)給人誤導(dǎo),并不是意味著我們?cè)L問(wèn)了一個(gè)未實(shí)現(xiàn)的api,而是服務(wù)器目前不具備滿足您對(duì)該內(nèi)容請(qǐng)求的功能, 比如服務(wù)器脫機(jī)了 |
| 503 | 由于超載或系統(tǒng)維護(hù),服務(wù)器暫時(shí)無(wú)法處理客戶端的請(qǐng)求 |
| 505 | 服務(wù)器不支持請(qǐng)求的http協(xié)議的版本 |
HTTPS
HTTPS在HTTP的基礎(chǔ)上加入了SSL協(xié)議,SSL依靠證書(shū)來(lái)驗(yàn)證服務(wù)器的身份,并未瀏覽器和服務(wù)器之間的通信加密。簡(jiǎn)單來(lái)說(shuō)是HTTP的安全版。
SSL(Secure Sockets Layer)最初由網(wǎng)景公司設(shè)計(jì)(1994),用來(lái)加密HTTP協(xié)議傳輸?shù)臄?shù)據(jù).
主要區(qū)別
- HTTPS需要到CA申請(qǐng)證書(shū),一般需要一定費(fèi)用
- HTTPS安全性更高
- HTTP的默認(rèn)端口是80,HTTPS是443
- HTTP本身是無(wú)狀態(tài)的,非常簡(jiǎn)單的協(xié)議;HTTPS是由SSL+HTTP構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,它是有狀態(tài)的。
- https更消耗時(shí)間和資源(ssl部分需額外花費(fèi)三倍時(shí)間)
- https在SEO方面,谷歌搜索引擎算法中給了https加密的網(wǎng)站更高的排名。
HTTPS的工作原理
- 用戶在瀏覽器輸入一個(gè)https網(wǎng)址,連接到對(duì)應(yīng)server的443端口
- 采用HTTPS協(xié)議的服務(wù)器必須要有一套數(shù)字證書(shū),可以自己制作,也可以向組織申請(qǐng),自己制作的證書(shū)需要客戶端驗(yàn)證通過(guò)才可以繼續(xù)訪問(wèn)。
這個(gè)證書(shū)就是一對(duì)公鑰和私鑰。私鑰相當(dāng)于鑰匙,公鑰相當(dāng)于鎖, - 服務(wù)端傳送證書(shū)給客戶端(公鑰,相當(dāng)于把鎖給別人,別人可以用這把鎖把重要的東西鎖起來(lái),然后發(fā)給你,因?yàn)橹挥心阋粋€(gè)人有鑰匙,所以只有你才能看到)
- 客戶端解析證書(shū),由客戶端的TLS來(lái)完成。
TLS/SSL 安全傳輸層協(xié)議,用于在兩個(gè)通信應(yīng)用程序之間提供保密性和數(shù)據(jù)完整性。TLS是SSL的升級(jí)版,二者經(jīng)?;煊茫【幰舱f(shuō)不清楚,總之是先有了SSL1.0 2.0,但各種bug,后來(lái)直接推出了TLS1.0,又有了SSL3.0。
那么TLS確認(rèn)保證公鑰不是被篡改的。TLS會(huì)確認(rèn)證書(shū)中的頒發(fā)機(jī)構(gòu)和過(guò)期時(shí)間,只要證書(shū)是可信的,那么公鑰就是可信的。
如果證書(shū)沒(méi)有問(wèn)題,就會(huì)生成一個(gè)隨機(jī)值,然后用公鑰對(duì)該隨機(jī)值進(jìn)行加密。 - 客戶端傳送隨機(jī)值給服務(wù)端
- 客戶端用私鑰解密公鑰(鎖)之后,得到隨機(jī)值,然后之后的傳輸都用該隨機(jī)值所謂私鑰進(jìn)行對(duì)稱加密傳遞信息。
對(duì)稱加密和非對(duì)稱加密方法列舉
- 非對(duì)稱加密: RSA DSA
- 對(duì)稱加密: AES RC4
- HASH加密: MD5 SHA1
HTTPS的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
- 安全
缺點(diǎn)
- 握手階段費(fèi)時(shí)
- https 緩存不如 http 高效,增加數(shù)據(jù)開(kāi)銷。
- SSL 證書(shū)消耗成本,功能越強(qiáng)大的證書(shū)費(fèi)用越高。