Http協議
超文字傳輸協議,構建與
TCP/IP
協議之上,預設埠號為80,處於網路體系結構的最頂層應用層上,Http協議採用的是請求/響應
的工作方式。Http是無連線無狀態的。
Q1:怎麼理解Http是無連線無狀態的
無連線
是指限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。
無狀態
是指協議對於事務處理沒有記憶能力,伺服器不知道客戶端是什麼狀態。即我們給伺服器傳送 HTTP 請求之後,伺服器根據請求,會給我們傳送資料過來,但是,傳送完,不會記錄任何資訊。這就表明每個請求都是獨立的。
Http的這兩個特性的優缺點:
優點在於解放了伺服器,每一次請求“點到為止”不會造成不必要連線佔用。
缺點在於每次請求會傳輸大量重複的內容資訊。
Cookie
和Session
是用來保持Http連線的兩種技術。
Http報文
Http在應用層通過報文的方式來交換資料,分為
請求報文
和響應報文
請求報文
Http的請求報文由請求行,請求頭,請求體
組成
-
請求行:宣告瞭請求方法,主機域名,資源路徑和協議版本
-
請求頭:包括一些訪問的域名、使用者代理、Cookie等資訊
-
請求體:Http請求的資料
請求行詳解
請求方法
-
Get:從伺服器讀取資料
-
Post:為伺服器新增資訊
-
Put:為指定的URL下新增一個文件
-
Delete:刪除指定URL所標誌的資訊
Q2:Http的Get和Post請求方式有什麼區別
-
Get可提交的資料量收到URL長度的限制,URL的長度最多是2048個字元。Post請求是沒有長度的限制的。
-
Get請求的資料型別只允許Ascll字元,Post可以是任何型別
-
Get請求的安全性較差,因為資料引數是直接拼接在URL後面的,可見。Post資料封裝在Http的請求體中,瀏覽器中沒有快取。
-
Get請求適用於資料量較小,並且資料不敏感的情況。Post正好相反
請求頭詳解
採用
heade : value
的方式
請求體詳解
存放需要傳送給伺服器的資料資訊
請求體有三種使用方式:
-
資料交換:請求體可以任意型別,比如json串,不過伺服器需要解析
-
鍵值對:Get請求資料每個鍵值對通過
&
拼接在URL後面,鍵與值之間用=
連線 -
分部分形式:
POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
複製程式碼
請求體被分為多個部分,boundary 用於分割不同的欄位,為了避免與正文內容重複。然後接著一個空行 接 內容,最後以
--boundary-- 結束
boundary:分割線
響應報文
包括狀態行,響應頭和響應體
-
狀態行:包括協議版本Version、狀態碼Status Code、狀態碼描述
-
響應頭:包括搭建伺服器的軟體,傳送響應的時間,迴應資料的格式等資訊
-
響應體:響應的具體資料
常見的響應碼
200 OK 客戶端請求成功
301 Moved Permanently 請求永久重定向
302 Moved Temporarily 請求臨時重定向
304 Not Modified 檔案未修改,可以直接使用快取的檔案。
400 Bad Request 由於客戶端請求有語法錯誤,不能被伺服器所理解。
401 Unauthorized 請求未經授權。這個狀態程式碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden 伺服器收到請求,但是拒絕提供服務。伺服器通常會在響應正文中給出不提供服務的原因
404 Not Found 請求的資源不存在,例如,輸入了錯誤的URL
500 Internal Server Error 伺服器發生不可預期的錯誤,導致無法完成客戶端的請求。
503 Service Unavailable 伺服器當前不能夠處理客戶端的請求,在一段時間之後,伺服器可能會恢復正常。
複製程式碼
相關知識
Q3:Http1.0和Http1.1的區別有哪些
Http1.1比Http1.0升級瞭如下地方
-
引入了持久連線,意思就是在一個TCP連線中可以傳送多個Http的請求和響應。在請求頭中新增
Connection: Keep-Alive
開啟 -
多個請求和響應可以同時進行
-
引入更加多的請求頭和響應頭
Q4:Http和Https的區別
-
Http處在應用層,Https處在傳輸層
-
Http明文傳輸,Https通過ssl加密和身份認證
-
Http預設80埠,Https預設443埠