OSI 七層模型與 TCP/IP 五層模型
- OSI 七層模型:物理層狸驳、數(shù)據(jù)鏈路層预明、網(wǎng)絡(luò)層、傳輸層耙箍、會話層撰糠、展示層、應(yīng)用層
- TCP/IP 五層模型:物理層辩昆、數(shù)據(jù)鏈路層阅酪、網(wǎng)絡(luò)層、傳輸層汁针、應(yīng)用層
HTTP/ HTTPS 協(xié)議
HTTP 0.9
- 只有
GET
命令 - 響應(yīng)后就馬上關(guān)閉連接
HTTP 1.0
- 增加了
HEAD
术辐、POST
方法 - 增加了
HTTP Headers
和響應(yīng)狀態(tài)碼
HTTP 1.1(普遍使用)
- 持久連接(Keep-Alive),通道復(fù)用
- 增加了
PUT
施无、DELETE
辉词,OPTIONS
等方法 - 新增斷點續(xù)傳,身份認(rèn)證猾骡,狀態(tài)管理瑞躺,緩存等特性
HTTP 2.0
- 數(shù)據(jù)以二進制分幀進行傳輸
- 頭信息壓縮
- 服務(wù)端推送
HTTPS
- 使用
SSL
加密傳輸?shù)?code>HTTP安全版本
URL 和 URI 的區(qū)別
URI = URL + URN
-
URI
:統(tǒng)一資源標(biāo)識符,用來唯一標(biāo)識互聯(lián)網(wǎng)上的信息資源兴想,就像身份證號可以獨一無二的標(biāo)識出來 -
URL
:統(tǒng)一資源定位符幢哨,通過資源位置來標(biāo)識資源,就像是身份證上的地址
常見狀態(tài)碼
-
1xx
:請求正在處理 -
200 OK
:請求成功 -
201 Created
:已創(chuàng)建襟企,POST
或PUT
請求成功的響應(yīng) -
202 Accepted
:已接受嘱么,但未響應(yīng) -
204 No Content
:請求成功,但無內(nèi)容 -
206 Partial Content
:請求部分內(nèi)容顽悼,如斷點續(xù)傳 -
301 Moved Permanently
:永久性重定向曼振,比如請求路徑忘記添加最后的斜杠 -
302 Found
:臨時性重定向 -
304 Not Modified
:資源未修改,使用緩存 -
400 Bad Request
:請求語法錯誤 -
401 Unauthorized
:要求身份認(rèn)證 -
403 Forbidden
:請求資源被拒絕 -
404 Not Found
:資源不存在 -
405 Method Not Allowed
:請求的方法不支持 -
500 Internal Server Error
:服務(wù)器錯誤 -
502 Bad Gateway
:代理服務(wù)器錯誤 -
504 Gateway Timeout
:請求超時
GET 和 POST
GET
:語義上是指請求獲取指定的資源蔚龙,使用URL
進行傳參冰评,數(shù)據(jù)長度有限制,資源可以被緩存
POST
:語義上是指對請求資源做出處理木羹,請求數(shù)據(jù)放在body
中甲雅,數(shù)據(jù)長度無限制,相對GET
更安全坑填,支持更多的編碼類型抛人,不能被緩存
本質(zhì)區(qū)別:GET
是冪等的,而POST
不是冪等的脐瑰。就是說對于相同的請求妖枚,GET
請求返回相同的結(jié)果,而POST
會有副作用苍在。所以不應(yīng)該使用GET
請求做增刪改操作绝页,也不應(yīng)該使用POST
請求做查詢操作
常用請求/相應(yīng)頭
通用頭
-
Cache-Control
:控制緩存行為-
no-cache
:向服務(wù)器驗證后,再決定緩存獲取或還是請求 -
no-store
:不進行緩存寂恬,直接從服務(wù)器獲取 -
max-age
:設(shè)置緩存最大有效時間续誉,單位是秒
-
-
Connection
:連接管理-
keep-alive
:持久連接 -
close
:每次請求都會重新創(chuàng)建TCP
連接
-
-
Date
:服務(wù)端發(fā)送資源時的時間 -
Via
:代理服務(wù)器相關(guān)信息
請求頭
-
Accept
:可接受的響應(yīng)內(nèi)容類型 -
Accept-Language
:可接受的響應(yīng)內(nèi)容語言列表 -
Cookie
:客戶端存儲的Cookie
字符串 -
Host
:請求資源所在的服務(wù)器 -
If-Modified-Since
:上次訪問時的更改時間,資源未修改的情況下返回304 Not Modified
-
If-None-Match
:此次訪問使用的E-Tag
-
Range
:請求實體的字節(jié)范圍初肉,用于斷點續(xù)傳 -
Referer
:請求資源的原始URI
-
User-Agent
:客戶端相關(guān)信息
響應(yīng)頭
-
Content-Type
:資源資源的內(nèi)容類型 -
Etag
:資源標(biāo)識信息酷鸦,標(biāo)識資源是否更新,用于緩存驗證 -
Last-Modified
:資源最后修改日期 -
Server
:服務(wù)器軟件信息 -
Set-Cookie
:設(shè)置Cookie
-
Access-Control-Allow-Origin
:跨域設(shè)置
TCP三次握手和四次揮手
三次握手
- 客戶端發(fā)送
SYN
標(biāo)志牙咏,等待服務(wù)器確認(rèn) - 服務(wù)器確認(rèn)
SYN
標(biāo)志后井佑,發(fā)送SYN+ACK
包給客戶端 - 客戶端接收到
SYN+ACK
包后,發(fā)送ACK
包眠寿,雙方建立連接
四次揮手
- 客戶端 --
FIN
--> 服務(wù)端躬翁,關(guān)閉數(shù)據(jù)傳送,客戶端進入FIN_WAIT_1
狀態(tài) - 服務(wù)端 --
ACK
-> 客戶端盯拱,服務(wù)端進入CLOSE_WAIT
狀態(tài) - 服務(wù)端 --
ACK + FIN
--> 客戶端盒发,服務(wù)端進入LAST_ACK
狀態(tài) - 客戶端 --
ACK
-> 服務(wù)端,服務(wù)端進入CLOSED
狀態(tài)
跨域
同源策略限制:如果兩個URL
的協(xié)議狡逢,域名和端口相同則表示它們同源宁舰,否則被當(dāng)做跨域
跨域解決方法:
-
JSONP
:利用<script>
標(biāo)簽不受跨域限制,缺點是只支持GET
請求 -
CORS
:設(shè)置Access-Control-Allow-Origin
頭允許跨域
HTTP 緩存策略
強緩存
根據(jù)Cache-Control
和Expires
頭來判斷是否強緩存奢浑,如果命中強緩存蛮艰,則直接從緩存讀取資源,不會發(fā)請求到服務(wù)器雀彼,在Chrome
瀏覽器下如下所示:
協(xié)商緩存
通過Last-Modified
和Etag
來驗證資源是否命中協(xié)商緩存壤蚜,如果命中則服務(wù)器會返回這個請求即寡,但不會返回這個資源的數(shù)據(jù),依然是從緩存中讀取數(shù)據(jù)袜刷,在Chrome
瀏覽器下如下所示:
緩存策略
安全
-
XSS
:跨站腳本攻擊聪富,瀏覽器內(nèi)運行非法的HTML
標(biāo)簽或JS
進行的一種攻擊- 將
Cookie
設(shè)置為HttpOnly
- 轉(zhuǎn)義頁面上的輸入內(nèi)容和輸出內(nèi)容
- 將
-
CSRF
:跨域請求偽造,攻擊者盜用了你的身份著蟹,以你的名義發(fā)送惡意請求
RESTful
URL 設(shè)計
- 動詞(HTTP Methods) + 賓語墩蔓,注意方法要語義明確
- 賓語必須是名詞,如
/articles
萧豆,而不是/getArticles
- 復(fù)數(shù)
URL
奸披,如GET /articles/2
,而不是GET /article/2
- 避免多級
URL
涮雷,除了第一級其余級別都用查詢字符串阵面,如GET /authors/12?categories=2
,而不是GET /authors/12/categories/2
狀態(tài)碼
按照不同的場景份殿,返回對應(yīng)合適的狀態(tài)碼
服務(wù)器響應(yīng)
-
API
返回的數(shù)據(jù)格式應(yīng)該是一個JSON
對象膜钓,而不是純文本,需要將服務(wù)器的響應(yīng)頭Content-Type
設(shè)置為application/json