一、Http協(xié)議
網(wǎng)絡(luò)協(xié)議:客戶端與服務(wù)端之間的協(xié)議
主流協(xié)議:http弦聂、socket、ftp茅糜、pop3
-
http協(xié)議
1)多用與b/s架構(gòu)
2)問題
短連接:每次客戶端與服務(wù)端交互時,先建立連接素挽,交互完畢后蔑赘,關(guān)閉連接 無狀態(tài):服務(wù)端只能記得住當(dāng)次請求狀態(tài)
3)http:1.0 - 目前主流版本
http:1.1 - 較新版本(向下兼容)
http:2.0 - 最新版本
二、http請求協(xié)議
-
客戶端發(fā)送一個請求,應(yīng)該有如下三個部分:
請求行: 請求方法米死、請求url 狀態(tài)碼锌历、(http協(xié)議版本)
請求頭部: 說明服務(wù)器要使用的附加信息
請求主體: 提交給服務(wù)器的請求數(shù)據(jù)
-
HTTP客戶端請求內(nèi)容詳解
1)請求行 - 請求的信息
請求類型 - get、post峦筒、put等 請求地址 如果是get請求究西,參數(shù)應(yīng)該拼到url的后面url?key=value,但請求體為空 如果是post請求物喷,url后面不拼參數(shù)卤材,參數(shù)放在請求體中 狀態(tài)碼 - 服務(wù)器端的狀態(tài)
2)請求頭 - 反映給服務(wù)端的信息
格式為 key:value,key:value,... accept - 表示瀏覽器可接受的MIME類型 accept-Encoding - 瀏覽器能夠進(jìn)行解碼的數(shù)據(jù)編碼方式 accept-language - 表示服務(wù)端接受的語言 zh-cn:簡體中文 zh-tw:繁體中文 zh - 中文 us -英文 connection - 表示當(dāng)前鏈接狀態(tài) keep-alive - 保持連接 host - 請求的服務(wù)器網(wǎng)址峦失; referer - 表示當(dāng)前的請求來源 實(shí)現(xiàn)防盜鏈接 user-agent 獲取到用戶瀏覽器信息 cache-control -緩存控制 max-age 設(shè)置最大活動周期,設(shè)置緩存保存的最大時間的單位為秒扇丛,為0代表不緩存 cookie - 將cookie自動攜帶到請求頭 content-type:互聯(lián)網(wǎng)媒體類型;使用post請求必須設(shè)置這個屬性 也叫做MIME類型尉辑,在Http協(xié)議消息頭中帆精,使用Content-Type來表示具體請求中的媒體類型信息。 <form>元素提交時默認(rèn)的類型 一般文件上傳時默認(rèn)為application/x-www.form-urlencoded Content-Length:請求內(nèi)容的長度 對于POST請求來說Content-Length必須出現(xiàn)
3)請求體 - 存放請求參數(shù)
如果為post請求隧魄,有值卓练,如果為get請求為空
三、http響應(yīng)協(xié)議
-
服務(wù)端給客戶端響應(yīng)信息购啄,應(yīng)該有如下三部分
響應(yīng)行:協(xié)議版本 狀態(tài)碼 原因短語
響應(yīng)頭部:
響應(yīng)主題: 返回給客戶端的響應(yīng)數(shù)據(jù)襟企,可能是字符數(shù)據(jù),也可能是字節(jié)數(shù)據(jù)
-
HTTP服務(wù)端響應(yīng)內(nèi)容詳解
1)響應(yīng)行
狀態(tài)碼 協(xié)議版本
2)響應(yīng)頭
Allow:服務(wù)器支持哪些請求方法 GET狮含、POST Content-Encoding 文檔的編碼(Encode) Cache-Control: 告訴客戶端顽悼,服務(wù)端的緩存配置 Connection - 表示當(dāng)前的連接狀態(tài) keep-alive 表示保持連接 content-length 響應(yīng)數(shù)據(jù)的長度(大小) content-type - 響應(yīng)數(shù)據(jù)的mime類型 一般情況下:text/html Date - 當(dāng)前響應(yīng)的日期時間 keep-alive 設(shè)置保持連接的超時和最大存活時間 timeout=5 max=99 server - 服務(wù)器端的信息
3)響應(yīng)體
服務(wù)器返回給客戶端的數(shù)據(jù)主體
四几迄、擴(kuò)展內(nèi)容
1. 請求類型
get/post/head/put/delete/options/trace
2. 標(biāo)準(zhǔn)API - 標(biāo)準(zhǔn)的請求方式
get - 獲取數(shù)據(jù)
post - 修改數(shù)據(jù)
put - 新增數(shù)據(jù)
delete - 刪除數(shù)據(jù)
3. 狀態(tài)碼
1XX - 服務(wù)器的信息
2XX - 表示請求成功
200:請求成功
201:成功創(chuàng)建連接
202:接受請求
3XX - 表示重定向
302:表示重定向
304:表示服務(wù)端資源沒有變化蔚龙,訪問緩存
問題 - 這次請求沒有真正低訪問服務(wù)器端
305:使用代理
4XX - 客戶端錯誤
400:錯誤的請求
404:網(wǎng)頁找不到
403:拒絕訪問
405:請求類型不允許
5XX - 服務(wù)端錯誤
500:服務(wù)端錯誤
502:路徑錯誤
504:請求超時
505:http版本不支持
4. MIME類型 - 文件類型
MIME類型是如何定義的
//定義MIME類型
<mime-mapping>
//文件的擴(kuò)展名
<extension>jpg</extension>
//對應(yīng)的MIME類型
<mime-type>image/jpeg</mime-type>
</mime-mapping>
常見的MIME類型
html - text/html
htm - text/html
css - text/css
js - text/javascript
json - application/json
jpg - image/jpeg
text - text/plain
5. 請求參數(shù)
1)get請求類型
將請求數(shù)據(jù) - url?key=value(瀏覽器地址)
安全性低
請求地址的長度是有限制的
請求數(shù)據(jù)中包含中文的話,需要轉(zhuǎn)碼
2)post請求類型
瀏覽器地址欄url映胁,不包含請求類型
安全性相對比較高
對請求數(shù)據(jù)的長度沒有要求
請求數(shù)據(jù)中包含中文的話木羹,可以不轉(zhuǎn)碼,對中文的處理相對比較好
6. 控制HTTP頭部方法
可以配置每個HTML文件的HTTP-EQUIV標(biāo)簽控制緩存
<meta http-equiv="Cache-Control" content="no-cache">
在PHP頁面中控制響應(yīng)頭
header("Content-Type: image/jpeg");
五屿愚、緩存工作原理
客戶端可以自動保存已經(jīng)訪問過的文檔的副本,這些副本就成為“文檔緩存”
當(dāng)客戶端再次發(fā)送針對同一個URL的請求時务荆,如果本地有“已緩存的副本”妆距,就可以直接從本地存儲設(shè)備而不是遠(yuǎn)程服務(wù)器提取該文檔了。
-
數(shù)據(jù)緩存有下列優(yōu)點(diǎn)
減少了冗余的數(shù)據(jù)傳輸函匕,節(jié)省客戶端流量費(fèi)用
緩解服務(wù)器帶寬瓶頸的問題娱据,服務(wù)器可以節(jié)省出更多的帶寬
降低了對服務(wù)器的資源消耗和運(yùn)行要求
降低了由于遠(yuǎn)距離而造成的加載延時
緩存原理:發(fā)送請求->是否有緩存->
有緩存,判斷是否過期,如果過期不用中剩,如果不過期跟服務(wù)器進(jìn)行驗(yàn)證忌穿,判斷是否是最新的數(shù)據(jù);如果不是结啼,需要更新緩存掠剑,更新緩存后,從緩存中獲取郊愧。
沒有緩存朴译,從服務(wù)器中獲取
六、http基本優(yōu)化
網(wǎng)站性能優(yōu)化最主要的就是要減少HTTP請求及每次響應(yīng)中內(nèi)容的長度属铁∶呤伲可以從連接過程中的下列方面加以考慮:
1、域名解析
盡可能減少域名解析次數(shù)——減少跨站外部資源的引用
2焦蘑、創(chuàng)建連接
努力減少連接創(chuàng)建次數(shù)——使用Keep-Alive避免重復(fù)連接
3盯拱、發(fā)送請求
盡力減少請求次數(shù)——合理設(shè)置Expires時間、資源合并
4例嘱、等待響應(yīng)
提高服務(wù)器端運(yùn)行速度——提高數(shù)據(jù)運(yùn)算及查詢速度
5狡逢、接收響應(yīng)
盡可能減小響應(yīng)數(shù)據(jù)長度——啟用壓縮
七、安全的HTTP協(xié)議
HTTP協(xié)議本質(zhì)上屬于“明文傳輸”蝶防,可能被竊聽和篡改甚侣,政府、銀行等機(jī)密應(yīng)用需要需要“安全版本的HTTP”:http協(xié)議默認(rèn)端口80
HTTPS協(xié)議將消息發(fā)送給TCP層之前间学,先交給了一個安全層(由SSL或TLS協(xié)議實(shí)現(xiàn))殷费,安全層負(fù)責(zé)對消息進(jìn)行加密和解密操作。https協(xié)議默認(rèn)端口443