[天下無難試之HTTP協議面試刁難大全(上)](https://juejin.im/post/5ab308e9f265da238e0da39b)
[圖解HTTP 京東](http://item.jd.com/11449491.html)
[http mdn](https://developer.mozilla.org/zh-CN/docs/Web/HTTP)
# HTTP協議
## 請求報文的構成
請求報文是由請求方法、請求 URI、協議版本、可選的請求首部字段和內容實體構成的。

## 響應報文的構成
響應報文基本上由協議版本、狀態碼(表示請求成功或失敗的數字代碼)、用以解釋狀態碼的原因短語、可選的響應首部字段以及實體主體構成

## HTTP 是不保存狀態的協議
HTTP協議是無狀態協議,HTTP 協議自身不對請求和響應之間的通信狀態進行保存.這是為了更快地處理大量事務,確保協議的可伸縮性,而特意把 HTTP 協議設計成如此簡單的。
HTTP/1.1 雖然是無狀態協議,但為了實現期望的保持狀態功能,于是引入了 Cookie 技術。有了 Cookie 再用 HTTP 協議通信,就可以管理狀態了。
## 請求 URI 定位資源
HTTP 協議使用 URI 定位互聯網上的資源。正是因為 URI 的特定功能,在互聯網上任意位置的資源都能訪問到
## 告知服務器意圖的 HTTP 方法
**方法名區分大小寫,注意要用大寫字母。
**
GET :獲取資源
GET 方法用來請求訪問已被 URI 識別的資源,restful 中可用來查詢
POST:傳輸實體主體
雖然用 GET 方法也可以傳輸實體的主體,但一般不用 GET 方法進行傳輸,而是用 POST 方法,restful 中可用來新增
PUT:傳輸文件
PUT 方法用來傳輸文件。就像 FTP 協議的文件上傳一樣,要求在請求報文的主體中包含文件內容,然后保存到請求 URI 指定的位置,鑒于 HTTP/1.1 的 PUT 方法自身不帶驗證機制,任何人都可以上傳文件 , 存在安全性問題因此一般的不使用該方法。restful 中可用來更新一個資源。或新增一個含 id 資源(如果 id 不存在)
DELETE:刪除文件
刪除一個資源
HEAD:獲得報文首部
OPTIONS:詢問支持的方法
TRACE:追蹤路徑
## 持久連接節省通信量
HTTP 協議的初始版本中,每進行一次 HTTP 通信就要斷開一次 TCP連接。

容量很小的文本傳輸,這樣做也沒有多大問題,但使用瀏覽器瀏覽一個包含多張圖片的 HTML頁面時,在發送請求訪問 HTML頁面資源的同時,也會請求該 HTML頁面里包含的其他資源。因此,每次的請求都會造成無謂的 TCP 連接建立和斷開,增加通信量的開銷。
## 使用 Cookie 的狀態管理
Cookie 會根據從服務器端發送的響應報文內的一個叫做 Set-Cookie 的首部字段信息,通知客戶端保存 Cookie。當下次客戶端再往該服務器發送請求時,客戶端會自動在請求報文中加入 Cookie 值后發送出去。
服務器端發現客戶端發送過來的 Cookie 后,會去檢查究竟是從哪一個客戶端發來的連接請求,然后對比服務器上的記錄,最后得到之前的狀態信息。
# http狀態碼
狀態碼告知從服務器端返回的請求結果

## 狀態碼的類別
||類別|原因|
|---|---|---|
|1XX|Informational(信息性狀態碼)|接收的請求正在處理|
|2XX|Success(成功狀態碼)|請求正常處理完畢|
|3XX|Redirection(重定向狀態碼)|需要進行附加操作以完成請求|
|4XX|Client Error(客戶端錯誤狀態碼)|服務器無法處理請求|
|5XX|Server Error(服務器錯誤狀態碼)|服務器處理請求出錯|
## 常用狀態碼
### 2XX 成功
2XX 的響應結果表明請求被正常處理了。
#### 200 OK
表示從客戶端發來的請求在服務器端被正常處理了。
#### 204 No Content
該狀態碼代表服務器接收的請求已成功處理,但在返回的響應報文中不含實體的主體部分。另外,也不允許返回任何實體的主體
#### 206 Partial Content
該狀態碼表示客戶端進行了范圍請求,而服務器成功執行了這部分的
GET 請求。響應報文中包含由 Content-Range 指定范圍的實體內容。
### 3XX 重定向
3XX 響應結果表明瀏覽器需要執行某些特殊的處理以正確處理請求。
#### 301 Moved Permanently
永久性重定向。該狀態碼表示請求的資源已被分配了新的 URI,以后應使用資源現在所指的 URI
#### 302 Found
臨時性重定向。該狀態碼表示請求的資源已被分配了新的 URI,希望用戶(本次)能使用新的 URI 訪問。
#### 303 See Other
該狀態碼表示由于請求對應的資源存在著另一個 URI,應使用 GET方法定向獲取請求的資源。
#### 304 Not Modified
未改動 無需再次傳輸請求的內容,也就是說可以使用緩存的內容
### 4XX 客戶端錯誤
4XX 的響應結果表明客戶端是發生錯誤的原因所在。
#### 400 Bad Request
該狀態碼表示請求報文中存在語法錯誤。當錯誤發生時,需修改請求的內容后再次發送請求
#### 401 Unauthorized
該狀態碼表示發送的請求需要有通過 HTTP 認證(BASIC 認證、DIGEST 認證)的認證信息。另外若之前已進行過 1 次請求,則表示用戶認證失敗。
#### 403 Forbidden
該狀態碼表明對請求資源的訪問被服務器拒絕了
#### 404 Not Found
該狀態碼表明服務器上無法找到請求的資源
### 5XX 服務器錯誤
5XX 的響應結果表明服務器本身發生錯誤。
#### 500 Internal Server Error
該狀態碼表明服務器端在執行請求時發生了錯誤。也有可能是 Web應用存在的 bug 或某些臨時的故障。
#### 503 Service Unavailable
該狀態碼表明服務器暫時處于超負載或正在進行停機維護,現在無法處理請求。
#### 504 Gateway Timeout
超時 是一種HTTP協議的服務器端錯誤狀態代碼,表示扮演網關或者代理的服務器無法在規定的時間內獲得想要的響應。
- 筆記內容來源
- 你不知道的JavaScript上
- vue
- 環境搭建
- node和npm安裝配置
- 安裝vue-cli并初始化vue項目
- 安裝配置elementUI
- vuex安裝配置
- axios安裝配置
- main.js
- vue基礎入門
- vue-router介紹
- vuex
- vue 原理學習源碼學習
- js正則處理v-bind和語法
- 雙向綁定
- 虛擬dom
- mvvm和render函數
- vue工作項目筆記
- elementUI 表格分頁多選記憶功能
- elementUI表格展開一行
- keepAlive
- vue整合ckeditor5
- this.$router.push 內打開新窗口
- java修改上傳圖片的權限
- 兼容ie11
- 生成二維碼
- base64圖片下載(兼容IE10)
- vue新手引導程序intro.js
- vue插件 devtools
- vue刷新當前頁面
- vue 錨點導航
- axios
- axios與springmvc
- vue-cli 3搭建vue
- git
- git常用命令
- 正則表達式
- 實例demo
- 1
- 新手引導頁
- 純css3從左顯示下劃線動畫導航菜單
- 純css3從中間顯示下劃線動畫導航菜單
- css顯示密碼
- 倒計時時鐘
- 星星評分
- 按鈕懸停效果
- 步驟條
- css動畫按鈕
- input標題獲得焦點上移
- css圖片放大
- css鏡像導航欄
- js
- 通信
- for in 和 for of
- 前端安全問題
- Promise
- 掘金冴羽學習筆記
- 模擬call
- 模擬bind
- 閉包
- 1 作用域
- 2 執行上下文棧
- 3 變量對象
- 4 作用域鏈
- 5 this
- 面向對象
- 基礎知識點
- 渲染機制
- 其他
- 判斷是否為數組
- http
- css
- 基礎知識
- css陰影