一、典型的 HTTP Client-Server協(xié)議會(huì)話階段。
- 客戶端建立一條 TCP 連接(如果傳輸層不是 TCP,也可以是其他適合的連接)。
- 客戶端發(fā)送請(qǐng)求并等待應(yīng)答。
- 服務(wù)器處理請(qǐng)求并送回應(yīng)答,回應(yīng)包括一個(gè)狀態(tài)碼和對(duì)應(yīng)的數(shù)據(jù)。
ps:從 HTTP/1.1 開(kāi)始,連接在完成第三階段后不再關(guān)閉,客戶端可以再次發(fā)起新的請(qǐng)求。這意味著第二步和第三步可以連續(xù)進(jìn)行數(shù)次。
二、常見(jiàn)http headers。
1.request headers


2.response headers


三、http 狀態(tài)碼(response code)。
分類:
| code | 描述 |
|---|---|
| 1** | 信息,服務(wù)器收到請(qǐng)求,需要請(qǐng)求者繼續(xù)執(zhí)行操作 |
| 2** | 成功,操作被成功接收并處理 |
| 3** | 重定向,需要進(jìn)一步的操作以完成請(qǐng)求 |
| 4** | 客戶端錯(cuò)誤,請(qǐng)求包含語(yǔ)法錯(cuò)誤或無(wú)法完成請(qǐng)求 |
| 5** | 服務(wù)器錯(cuò)誤,服務(wù)器在處理請(qǐng)求的過(guò)程中發(fā)生了錯(cuò)誤 |
常見(jiàn)狀態(tài)碼描述:
| code | 英文名稱 | 描述 |
|---|---|---|
| 100 | Continue | 繼續(xù)。客戶端應(yīng)繼續(xù)其請(qǐng)求 |
| 101 | Switching Protocol | 該代碼是響應(yīng)客戶端的 Upgrade標(biāo)頭發(fā)送的,并且指示服務(wù)器也正在切換的協(xié)議。例如,切換到HTTP的新版本協(xié)議 |
| 200 | ok | 請(qǐng)求成功 |
| 201 | Created | 該請(qǐng)求已成功,并因此創(chuàng)建了一個(gè)新的資源。它通常是post或put請(qǐng)求后的響應(yīng) |
| 300 | Multiple Choice | 被請(qǐng)求的資源有一系列可供選擇的回饋信息 |
| 301 | Moved Permanently | 被請(qǐng)求的資源已永久移動(dòng)到新位置,并且將來(lái)任何對(duì)此資源的引用都應(yīng)該使用本響應(yīng)返回的若干個(gè) URI 之一。 |
| 400 | Bad Request | 1、語(yǔ)義有誤,當(dāng)前請(qǐng)求無(wú)法被服務(wù)器理解。除非進(jìn)行修改,否則客戶端不應(yīng)該重復(fù)提交這個(gè)請(qǐng)求。2、請(qǐng)求參數(shù)有誤。 |
| 401 | Unauthorized | 當(dāng)前請(qǐng)求需要用戶驗(yàn)證。 |
| 403 | Forbidden | 服務(wù)器已經(jīng)理解請(qǐng)求,但是拒絕執(zhí)行它。如:請(qǐng)求接口不存在、跨域等可能會(huì)出現(xiàn)此code |
| 404 | Not Found | 請(qǐng)求失敗,請(qǐng)求所希望得到的資源未被在服務(wù)器上發(fā)現(xiàn)。 |
| 500 | Internal Server Error | 服務(wù)器內(nèi)部錯(cuò)誤,無(wú)法完成請(qǐng)求 |
| 502 | Bad Gateway | 它表示作為網(wǎng)關(guān)或代理角色的服務(wù)器,從上游服務(wù)器(如tomcat、php-fpm)中接收到的響應(yīng)是無(wú)效的。 |
四、內(nèi)容安全策略( CSP )
主要威脅:跨站腳本攻擊、數(shù)據(jù)包嗅探攻擊。
防范:配置csp
五、HTTP cookies
首先我們要了解http是無(wú)狀態(tài)可會(huì)話的,而Cookie 使基于無(wú)狀態(tài)的HTTP協(xié)議記錄穩(wěn)定的狀態(tài)信息成為了可能。當(dāng)然Cookie也可以用于客戶端信息的存儲(chǔ),我們可以設(shè)置cookies的有效期來(lái)控制它的生命周期(這一有效期只與客戶端相關(guān))。
- ps
cookies安全:
通過(guò)設(shè)置Secure(確保是HTTPS )屬性和HttpOnly(使jsapi無(wú)法訪問(wèn)) 屬性可以確保cookies相對(duì)安全。
cookies作用域:
可以通過(guò)Domain 和 Path 標(biāo)識(shí)定義Cookie的作用域。
六、跨域資源共享(CORS)。
CORS是為了讓瀏覽器可以訪問(wèn)非同源的資源,所謂同源即:協(xié)議相同、域名(主機(jī))相同、端口相同。
有哪些實(shí)現(xiàn)跨域的方案?
使用JSONP。
JSONP不使用XMLHttpRequest 來(lái)請(qǐng)求json數(shù)據(jù),而是通過(guò)使用<script>標(biāo)簽來(lái)請(qǐng)求外部腳本,來(lái)實(shí)現(xiàn)跨域請(qǐng)求json數(shù)據(jù)。
缺點(diǎn):高耦合、不安全、只支持GET。CORS。
通過(guò)對(duì)http請(qǐng)求的首部字段判斷來(lái)實(shí)現(xiàn)訪問(wèn)控制。另外在瀏覽器端,發(fā)起實(shí)際請(qǐng)求前會(huì)發(fā)起一條OPTIONS預(yù)請(qǐng)求(并非所有請(qǐng)求都會(huì)OPTIONS),服務(wù)器通過(guò)對(duì)預(yù)請(qǐng)求的判斷(比如Origin)來(lái)決定其實(shí)際請(qǐng)求是否被允許。
ps:我們可以通過(guò)預(yù)請(qǐng)求的Access-Control-Allow-Methods返回字段來(lái)判斷可以使用的http請(qǐng)求方式,還可以通過(guò)Access-Control-Allow-Headers字段來(lái)得到允許攜帶的首部字段。代理。
同源策略是瀏覽器的規(guī)則,那我們繞開(kāi)就可以實(shí)現(xiàn)跨域。
例:瀏覽器要請(qǐng)求在非同源服務(wù)器的數(shù)據(jù),我們先在localhost上搭建一個(gè)請(qǐng)求外網(wǎng)服務(wù)器的代理服務(wù)器(可以通過(guò)node、nginx...實(shí)現(xiàn))做數(shù)據(jù)轉(zhuǎn)發(fā),然后瀏覽器直接請(qǐng)求localhost代理服務(wù)器,即實(shí)現(xiàn)了跨域。