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





