面試-關於Http協議你瞭解多少,有多少說多少

sun_xin發表於2018-10-24

Http協議

超文字傳輸協議,構建與TCP/IP協議之上,預設埠號為80,處於網路體系結構的最頂層應用層上,Http協議採用的是請求/響應的工作方式。Http是無連線無狀態的。

Q1:怎麼理解Http是無連線無狀態的

無連線是指限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。

無狀態是指協議對於事務處理沒有記憶能力,伺服器不知道客戶端是什麼狀態。即我們給伺服器傳送 HTTP 請求之後,伺服器根據請求,會給我們傳送資料過來,但是,傳送完,不會記錄任何資訊。這就表明每個請求都是獨立的。

Http的這兩個特性的優缺點:

優點在於解放了伺服器,每一次請求“點到為止”不會造成不必要連線佔用。

缺點在於每次請求會傳輸大量重複的內容資訊。

CookieSession是用來保持Http連線的兩種技術。

Http報文

Http在應用層通過報文的方式來交換資料,分為請求報文響應報文

請求報文

Http的請求報文由請求行,請求頭,請求體組成

  • 請求行:宣告瞭請求方法,主機域名,資源路徑和協議版本

  • 請求頭:包括一些訪問的域名、使用者代理、Cookie等資訊

  • 請求體:Http請求的資料

請求行詳解

請求方法

  • Get:從伺服器讀取資料

  • Post:為伺服器新增資訊

  • Put:為指定的URL下新增一個文件

  • Delete:刪除指定URL所標誌的資訊

Q2:Http的Get和Post請求方式有什麼區別

  1. Get可提交的資料量收到URL長度的限制,URL的長度最多是2048個字元。Post請求是沒有長度的限制的。

  2. Get請求的資料型別只允許Ascll字元,Post可以是任何型別

  3. Get請求的安全性較差,因為資料引數是直接拼接在URL後面的,可見。Post資料封裝在Http的請求體中,瀏覽器中沒有快取。

  4. Get請求適用於資料量較小,並且資料不敏感的情況。Post正好相反

請求頭詳解

採用heade : value的方式

請求體詳解

存放需要傳送給伺服器的資料資訊

請求體有三種使用方式:

  1. 資料交換:請求體可以任意型別,比如json串,不過伺服器需要解析

  2. 鍵值對:Get請求資料每個鍵值對通過&拼接在URL後面,鍵與值之間用=連線

  3. 分部分形式:


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升級瞭如下地方

  1. 引入了持久連線,意思就是在一個TCP連線中可以傳送多個Http的請求和響應。在請求頭中新增Connection: Keep-Alive開啟

  2. 多個請求和響應可以同時進行

  3. 引入更加多的請求頭和響應頭

Q4:Http和Https的區別

  1. Http處在應用層,Https處在傳輸層

  2. Http明文傳輸,Https通過ssl加密和身份認證

  3. Http預設80埠,Https預設443埠

相關文章