面試-關於Http協議你瞭解多少,有多少說多少
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請求方式有什麼區別
1. Get可提交的資料量收到URL長度的限制,URL的長度最多是2048個字元。Post請求是沒有長度的限制的。
2. Get請求的資料型別只允許Ascll字元,Post可以是任何型別
3. Get請求的安全性較差,因為資料引數是直接拼接在URL後面的,可見。Post資料封裝在Http的請求體中,瀏覽器中沒有快取。
4. Get請求適用於資料量較小,並且資料不敏感的情況。Post正好相反
請求頭詳解
採用heade : value
的方式
[圖片上傳失敗...(image-d684c9-1540289631351)]
請求體詳解
存放需要傳送給伺服器的資料資訊
請求體有三種使用方式:
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` 伺服器當前不能夠處理客戶端的請求,在一段時間之後,伺服器可能會恢復正常。
相關知識
[TOC]
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埠
1