個人總結,請勿轉載。
URL
- 統一資源定位符:就是標識網絡中資源的路徑。
HTTP
- 超文本傳輸協議。是一個基於TCP/IP通信協議來傳遞信息
HTTP原理
- HTTP協議工作與客戶端-服務端架構上,瀏覽器作爲HTTP客戶端通過URL向HTTP服務端即WEB服務器發送所有請求。根據接收到的請求後,向客戶端發送響應消息。HTTP默認端口是80,但是也可以進行更改。
HTTP注意事項
- HTTP是無連接的,含義是限制每次連接只處理一個請求。服務端處理完客戶的請求之後,並且受到回覆之後就斷開連接。
- HTTP是媒體獨立的。只要客戶端和服務端知道如何處理數據內容,任何類型的數據都可以通過HTTP發送
- HTTP是無狀態的,HTTP協議是無狀態協議,指的是對事務處理沒有記憶能力。缺少狀態意味着如果後續處理需要前面的數據就必須重傳。
請求結構
請求行,請求頭部,空行,請求數據四個部分
Get和post的區別
- Get把請求的數據放在url上,即HTTP的請求行中、格式是以?分割URL和傳輸數據,參數之間以&相連。數據如果是英文或者數字遠洋發送,如果是空格或者中文其他字符都轉換
- POST是把數據放在HTTP的請求數據部分
- GET提交的數據是2K,原則上url長度無限制,那麼提交的數據也是沒有限制的,但是限制實際上取決與瀏覽器,大多數瀏覽器通常都會限制url長度在2k個字節。瀏覽器也最多處理64k大小的url
POST理論上沒有限制,實際上IIS4中最大量爲80K,IIS5最多爲100KB - GET產生的是一個TCP數據包。
- POST產生的是兩個TCP數據包,第一個是發送header,瀏覽器再發送Data(並不是所有的瀏覽器都會發送兩次,比如firefox值發送一次)
- GET再瀏覽器回退時是無害的,POST會再次提交請求
- GET產生的URL地址可以被bookmark而POST不可以
- GET請求參數會被完整保留再瀏覽器中,但是POSt中的參數不會白保留。
- 對於參數類型。GET值接受ASCII字符,但是POST是沒有限制的。
- POST比 GET安全,因爲GET參數直接暴露再URL上。
常用請求頭以及含義
- Content-Type:數據類型(test/html)
- Content-Length:Body的長度
- Host:客戶端告知服務器,所請求的資源再那個主機的那個端口上
- User-Ahent:聲明用戶的操作系統和瀏覽器版本信息
- Referer:當前頁面是從那個頁面跳轉過來的
- Location:搭配3XX狀態碼使用,告知客戶端接下來要去哪裏訪問
- Cookie:用於再客戶端存儲少量信息,通常用於實現會話的功能。
響應
首行+響應頭+空行+響應的內容
首行包括了[版本號]+[狀態碼]+[狀態碼解釋]
HTTP狀態碼
- 1XX:接收的請求正在處理
- 2XX:請求正常處理完畢
- 3XX:需要進行附加的操作以完成請求
- 4XX:服務無法處理請求(客戶端錯誤)
- 5XX:服務器處理請求出錯(服務器端錯誤)
常見狀態碼
- 100:繼續,客戶端繼續其請求
- 101:切換協議,服務端根據客戶端的請求切換協議,只能切換更高級的協議
- 200:OK,請求成功,一般用於GET和POST
- 201:以創建,成功請求並創建了新的資源
- 202:已接受請求但是未處理完成
- 302:數據的轉發
- 303:和301一樣請求的資源被永久的移動到新的URL。返回的就是一個子女的URL
- 304:未修改,所請求的資源未修改,不返回任何資源,訪問緩存資源
- 404:未找到資源
- 403:服務器理解客戶端的請求,但是拒絕執行此請求
- 500:服務器內部錯誤
- 502:錯誤的網關
HTTP版本之間的區別:
HTTP1.0和HTTP1.1之間的區別:
- 長連接:HTTP1.0需要主動設置connection:keep-alive的連接方式才能開啓廠裏l連接,HTTP1.1默認支持長連接,再一個TCP連接上可以傳送多個HTTP請求和響應,減少了建立和關閉連接的消耗。
- 帶寬優化:HTTP1.1中header和body必須一起發送,有時會造成帶寬浪費現象。有時只需要一部分,卻將整個對象發送,HTTO1.1則再請求頭中引入了range頭部信息,允許值請求資源的某個部分。即返回碼爲206。
- 緩存處理:HTTP1.0主要使用header裏的IF_MODIFIED_SINCE來做緩存。
- HOST頭域:HTTP1.0中認爲沒太服務器都綁定一個唯一的iP地址,因此消息中URL沒有傳遞主機名。HTTP1.1的請求消息和響應消息中都應支持HOST頭域,沒有頭域的時候會報錯400.
- 新增錯誤狀態碼24個,例如409和410
HTTP2.0
- 多路複用:可以再一個連接並行的處理多個請求
- Header壓縮:使用encoder來壓縮需要傳輸的header大小。
- 服務器推送:客戶端對支持HTTP2.0的服務器請求某個資源時,服務器會順便把一些客戶端需要的別的資源一起推送過來,這樣只需要一次HTTP通信就可以得到全部資源,提高了性能。
- 基於二進制傳送
HTTP和HTTPS
HTTPS和HTTP的區別
- HTTPS協議需要到ca申請證書,一般免費證書少
- HTTP是超文本傳輸協議,信息是明文傳輸,HTTPS則是具有安全性的ssl加密傳輸協議
- HTTP和HTTPS使用的連接方式不同,用的端口也是不一樣的。HTTP默認是80,HTTPS是443
- HTTP連接簡單是無狀態的。HTTPS協議是有SSL+HTTP協議構架的可進行加密傳輸,身份認證的網絡協議。比HTTP協議安全。
HTTPS的工作原理: - Client使用HTTPS的URL訪問Web服務器,要求與web服務器建立SSL連接
- Web服務器受到客戶端請求之後,會將網站的證書信息傳送一份給客戶端
- 客戶的瀏覽器與web服務器開始協商ssl連接的安全等級
- 客戶端的瀏覽器根據雙方的同意的安全等級建立會話祕鑰。加密後傳輸
- 服務端解開祕鑰
- Web服務器利用會話的祕鑰加密和客戶端之間通信