HTTP協(xié)議歷史演變
Hypertext Transfer Protocol征炼,超文本傳輸協(xié)議蟆湖。
規(guī)定了瀏覽器和萬維網(wǎng)服務(wù)器之間相互通信的規(guī)則。
是客戶端和服務(wù)器之間請求和應(yīng)答的標(biāo)準(zhǔn)。
HTTP是基于TCP/IP協(xié)議的應(yīng)用層協(xié)議,無狀態(tài)陌兑,默認(rèn)使用80端口。
HTTP/0.9
這是最早的版本由捎。
- 只有一個 GET 命令。
- 服務(wù)器只能回應(yīng)HTML格式的字符串饿凛,不能回應(yīng)別的格式狞玛。
請求格式:
GET /index.html
表示TCP連接建立后,客戶端向服務(wù)器請求網(wǎng)頁index.html涧窒。
HTTP/1.0
- 命令增加了 POST 和 HEAD心肪。
- 可以傳輸任何形式的內(nèi)容,包括圖像纠吴、視頻等硬鞍。
- 新增狀態(tài)碼、緩存戴已、內(nèi)容編碼等功能固该。
請求格式:
GET /HTTP/1.0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
Accept: */*
第一行是請求命令,必須在尾部添加協(xié)議版本
響應(yīng)格式:
協(xié)議版本 狀態(tài)碼 狀態(tài)描述
頭信息
數(shù)據(jù)
頭信息與數(shù)據(jù)中間的空行是本身就有的糖儡。
HTTP/1.1
- 引入了持久連接伐坏。TCP連接默認(rèn)不關(guān)閉,可被多個請求復(fù)用握联,不需要聲明
Connection:keep-alive
桦沉;客戶端與服務(wù)器發(fā)現(xiàn)對方一段時間無活動,就可以主動關(guān)閉連接金闽;最好在客戶端最后一個請求時纯露,發(fā)送Connection:close
,明確要求服務(wù)器關(guān)閉TCP連接代芜。 - 引入了管道機(jī)制埠褪。在同一個TCP連接中,客戶端可以同時發(fā)送多個請求,而不需要等待上一個請求被回應(yīng)之后再發(fā)送新的請求组橄。但是服務(wù)器還是按請求的先后順序回應(yīng)請求荞膘。
- 增加了動詞方法
PUT
、PATH
玉工、HEAD
羽资、OPTIONS
、DELETE
遵班。 - 客戶端請求頭增加了
Host
字段屠升,制定服務(wù)器的域名。 - 頭信息是文本(ASCII編碼)狭郑,數(shù)據(jù)體既可以是文本也可以是二進(jìn)制腹暖。
這個版本的目前還是很流行的。
HTTP/2
頭信息和數(shù)據(jù)體都是二進(jìn)制翰萨,統(tǒng)稱為“幀”脏答。
-
多工
數(shù)據(jù)包不按順序發(fā)送,同一個連接里連續(xù)的數(shù)據(jù)包可能屬于不同的響應(yīng)亩鬼。每個請求或響應(yīng)的所有數(shù)據(jù)包稱為一個數(shù)據(jù)流
HTTP/2通過發(fā)送信號
RST_STREAM幀
取消數(shù)據(jù)流殖告,不需要關(guān)閉TCP連接。將頭信息使用
gzip
或compress
壓縮后發(fā)送雳锋,客戶端與服務(wù)器同時維護(hù)一張頭信息表黄绩,通過發(fā)送索引號,來提高請求速度玷过。
URL
Universal Resource Locator爽丹,統(tǒng)一資源定位符,即網(wǎng)頁地址辛蚊、因特網(wǎng)上標(biāo)注的資源的地址粤蝎。
一般形式:
<URL訪問形式>://<主機(jī)>:<端口>/<路徑>
例如: http://asdf.com:80/index.html
URL訪問方式: ftp、http嚼隘、news
主機(jī): 網(wǎng)站的域名诽里、IP地址(必須有)
端口: http固定端口為80(可省)
路徑: 資源的位置(可史捎肌)
請求
一般格式:
請求行
請求方法:
GET:
讀取由URL所標(biāo)識的信息谤狡;
POST:
給服務(wù)器添加信息;
OPTION:
請求一些選項的信息卧檐;
HEAD:
請求讀取URL所標(biāo)識信息的首部墓懂;
PUT:
在指明的URL下存儲一個文檔;
DELETE:
刪除指名的URL所標(biāo)志的資源霉囚;
TRACE:
用來進(jìn)行環(huán)回測試的請求報文捕仔;
CONNECT:
用于代理服務(wù)器。
URL字段: 路徑,若URL中未給出路徑榜跌,則當(dāng)它作為請求URL時闪唆,必須以“/”的形式給出,通常這個工作瀏覽器自動完成钓葫。
版本: 目前HTTP協(xié)議用得最多的是1.1版本悄蕾。
請求頭部
由關(guān)鍵字/值對組成,每行一對础浮,關(guān)鍵字和值用英文冒號分割帆调。請求頭部通知服務(wù)器有關(guān)客戶端請求的信息。
空行: 發(fā)送回車符和換行符豆同,通知服務(wù)器一下不再有請求頭番刊。
常用請求頭 | 含義 |
---|---|
Accept | 指定客戶端接受哪些類型的信息 |
Accept-Encoding | 指定可接受的內(nèi)容編碼 |
Accept-Language | 指定一種自然語言 |
Host | 指定被請求資源的Internet主機(jī)和端口號 |
User-Agent | 允許客戶端將它的操作系統(tǒng)、瀏覽器和其它屬性告訴服務(wù)器 |
Referer | 上一個網(wǎng)頁的URL |
示例:
請求數(shù)據(jù)
不在GET方法中使用影锈,在POST方法中使用芹务。POST方法適用于需要客戶填寫表單的場合。與請求數(shù)據(jù)相關(guān)的最常使用的請求頭是Content-Type和Content-Length鸭廷。
響應(yīng)
一般格式:
狀態(tài)行
版本: 常用HTTP/1.1版本
狀態(tài)碼: 由三位數(shù)字組成
五種可能取值:
取值 | 含義 |
---|---|
1xx | 保留 |
2xx | 表示請求成功地接受 |
3xx | 要完成請求必須進(jìn)一步細(xì)化請求 |
4xx | 客戶錯誤 |
5xx | 服務(wù)器錯誤 |
常見狀態(tài)描述短語 | 含義 |
---|---|
200 OK | 客戶端請求成功 |
400 Bad Request | 客戶端請求有語法錯誤锄禽,不能被服務(wù)器所理解 |
401 Unauthorized | 請求未經(jīng)授權(quán) |
403 Forbidden | 服務(wù)器收到請求,但是拒絕提供服務(wù) |
404 Not Found | 請求資源不存在 |
500 Internal Server Error | 服務(wù)器發(fā)生不可預(yù)期的錯誤 |
503 Sever Unavailable | 服務(wù)器當(dāng)前不能處理客戶端的請求 |
首部行
包含了服務(wù)器和報文主題的信息靴姿。
空行
最后一個響應(yīng)頭之后是一個空行,發(fā)送回車符和換行符磁滚,通知客戶端以下是報文實(shí)體佛吓。
響應(yīng)數(shù)據(jù)
包含了用戶要得到的數(shù)據(jù)或是錯誤信息。
常用響應(yīng)頭 | 含義 |
---|---|
Location | 重定向接收者到一個新的位置 |
Server | 包含服務(wù)器用于處理請求的軟件信息 |
WWW-Authenticate | 必須被包含在401(未授權(quán)的)響應(yīng)消息中垂攘,請求服務(wù)器對收到401響應(yīng)的客戶端進(jìn)行驗證 |
示例:
HTTP代理服務(wù)器
可以代表瀏覽器發(fā)出HTTP請求维雇。
將最近的一些請求和響應(yīng)暫存在本地磁盤中,當(dāng)與暫存的請求相同的新請求到達(dá)時晒他,代理服務(wù)器就將暫存的響應(yīng)發(fā)出去吱型,不需要按URL的地址再去因特網(wǎng)訪問該資源。
HTTP協(xié)議與HTTPS協(xié)議的區(qū)別
HTTPS為HTTP的升級版,比HTTP協(xié)議更加安全灼伤。安全基礎(chǔ)為SSL触徐,即在HTTP下加入SSL層。HTTPS通過安全傳輸機(jī)制進(jìn)行傳送數(shù)據(jù)狐赡。保證傳送的數(shù)據(jù)的隱秘性撞鹉、完整性,降低非侵入性攔截攻擊的可能性。
HTTP | HTTPS | |
---|---|---|
傳輸方式 | 明文傳輸 | SSL加密傳輸 |
連接方式 | 80端口連接 | 443端口連接 |
所需證書 | 不需要 | 到ca申請證書鸟雏,免費(fèi)很少享郊,需要交費(fèi),優(yōu)秀而由Web容器提供孝鹊,如TOMCAT |
連接特點(diǎn) | 相對簡單炊琉、無狀態(tài) | 由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議 |
其他需要了解的
Cookie
瀏覽器第一次訪問服務(wù)器時惶室,服務(wù)器發(fā)送到瀏覽器并保存在本地的一小塊數(shù)據(jù)温自,在瀏覽器下一次向同一服務(wù)器發(fā)起請求時被攜帶并發(fā)送到服務(wù)器上。
用于告訴服務(wù)端皇钞,兩個請求是否來自同一瀏覽器悼泌。
- 敏感信息不應(yīng)通過Cookie傳輸
- Cookie的Secure標(biāo)記,只應(yīng)用過被HTTPS協(xié)議加密過的請求發(fā)送給服務(wù)端
- 使用HttpOnly標(biāo)記夹界,可以一定程度上避免XSS攻擊
Session
會話信息馆里,保存在Web服務(wù)器上。比Cookie更安全可柿。
Token
服務(wù)端生成的一串字符串鸠踪,作為客戶端進(jìn)行請求的標(biāo)識。
用于身份認(rèn)證复斥。
X-Frame-Options
在HTTP響應(yīng)頭中出現(xiàn)营密,用于給瀏覽器指示是否可在<frame>
, <iframe>
或者 <object>
中展現(xiàn)的標(biāo)記。
網(wǎng)站可以使用此功能目锭,來確保自己網(wǎng)站的內(nèi)容沒有被嵌到別人的網(wǎng)站中去评汰,也從而避免了點(diǎn)擊劫持攻擊。
X-Content-Type-Options
在HTTP響應(yīng)頭中出現(xiàn)痢虹。
用于規(guī)定客戶端必須要遵循Content-Type首部中對MIME類型的設(shè)定被去,不能修改。
禁用了客戶端的MIME類型嗅探行為奖唯。
MIME類型舉例:img/gif