不管你是Java、PHP開發者,仍是運維人員,只要從事互聯網行業,面試時均可能被問到HTTP協議相關知識。歷時多天的嘔心瀝血,爲你總結了HTTP協議的經典面試題。因爲涉及內容比較繁雜不方便記憶,建議收藏起來,時不時看一遍或者面試前突擊複習。html
HTTP報文是HTTP協議在客戶端和服務端之間傳送的數據塊。面試
HTTP報文由起始行(start line)、頭部(header)和主體(body)三部分組成,起始行是對報文進行的描述,頭部包含報文的一些屬性,主體包含報文的數據(可選,非必選)。緩存
歡迎關注微信公衆號:萬貓學社,每週一分享Java技術乾貨。服務器
HTTP報文能夠分爲:請求報文(request message)和響應報文(response message)。當客戶端向服務端發送請求時,就是發送請求報文;當服務端向客戶端返回數據時,就是返回響應報文。好比,獲取一個文本須要的請求報文和響應報文:微信
方法 | 描述 | 是否包含主體 |
---|---|---|
GET | 從服務端獲取指定信息 | 否 |
POST | 向服務端發送待處理的數據 | 是 |
HEAD | 從服務端獲取指定信息的頭部 | 否 |
PUT | 向服務端發送數據並替換服務端上指定的數據 | 是 |
OPTIONS | 查詢針對請求URL指定的資源支持 | 否 |
DELETE | 從服務端刪除指定數據 | 否 |
TRACE | 沿着目標資源的路徑執行消息環回測試 | 否 |
總體範圍 | 已定義範圍 | 分類 |
---|---|---|
100~199 | 100~101 | 信息提示 |
200~299 | 100~206 | 成功 |
300~399 | 300~305 | 重定向 |
400~499 | 400~415 | 客戶端錯誤 |
500~599 | 500~505 | 服務端錯誤 |
歡迎關注微信公衆號:萬貓學社,每週一分享Java技術乾貨。cookie
狀態碼 | 緣由短語 | 含義 |
---|---|---|
100 | Continue | 說明收到了請求的初始部分,請客戶端繼續。 |
101 | Switching Protocols | 說明服務端正在根據客戶端的指定,將協議切換成Update頭部所列的協議。 |
200 | OK | 請求沒有問題,主體包含了所請求的數據。 |
201 | Created | 用於在服務端建立數據的請求(好比PUT),Location頭部給出了建立數據的URL。 |
202 | Accepted | 請求已經被接受,但服務端尚未對其執行任何動做。 |
203 | Non-Authoritative Information | 數據已經正常地返回,但一些響應報文頭部可能不正確。 |
204 | No Content | 響應報文中包含起始行和頭部,沒有主體部位。客戶端應該繼續顯示原來的數據。 |
205 | Reset Content | 仍然沒有主體部分,但客戶端應該清除它所顯示的數據。 |
206 | Partial Content | 成功執行了一部分或者一個範圍內的請求。 |
300 | Multiple Choices | 客戶端請求了一個實際指向多個資源的URL,服務端能夠在Location頭部包含首選URL。 |
301 | Moved Permanently | 請求的URL已經被移除,響應報文中的Location頭部包含如今資源的URL。 |
302 | Found | 相似於301,但新的URL應該被視爲臨時性的,未來的請求仍應是老的URL。 |
303 | See Other | 相似於301,但主要目的是容許POST請求的響應將客戶端定向到某個資源上。 |
304 | Not Modified | 客戶端有緩衝的文檔併發出了一個條件性的請求時,服務端告知客戶端,原來緩衝的數據還能夠繼續使用。 |
305 | Use Proxy | 用來講明必須經過代理進行訪問,代理的位置在Location頭部給出。 |
306 | - | 未使用 |
307 | Temporary Redirect | 相似於301,但客戶端應該使用Location頭部給出的URL臨時請求,未來的請求仍應是老的URL。 |
400 | Bad Request | 客戶端發出的是錯誤請求,服務器沒法理解。 |
401 | Unauthorized | 請求要求客戶端的身份認證 |
402 | Payment Required | 保留,以做未來使用 |
403 | Forbidden | 服務端理解客戶端的請求,可是拒絕執行此請求。 |
404 | Not Found | 服務端沒法找到客戶端所請求的URL。 |
405 | Method Not Allowed | 服務端不支持客戶端請求的方法。 |
406 | Not Acceptable | 服務端沒法根據客戶端請求的類型完成請求。 |
407 | Proxy Authentication Required | 相似於401,但用於要求對資源進行認證的代理服務器。 |
408 | Request Timeout | 服務端等待客戶端發送的請求時間過長,服務端能夠響應此狀態碼,並關閉鏈接。 |
409 | Conflict | 客戶端的請求能夠在資源上引起一些衝突,服務端能夠發送此狀態碼。 |
410 | Gone | 相似於404,可是服務端曾經擁有過此資源。 |
411 | Length Required | 服務端要求客戶端的請求報文中包含Content-Length頭部時,使用此狀態碼。 |
412 | Precondition Failed | 客戶端發起了條件請求,而且其中一個條件失敗時,使用此狀態碼。 |
413 | Request Entity Too Large | 客戶端發送的主體部分比服務端可以或者指望處理的要大時,使用此狀態碼。 |
414 | Request URI Too Large | 客戶端發送的請求URI比服務端可以或者指望處理的要長時,使用此狀態碼。 |
415 | Unsupported Media Type | 服務端沒法理解或沒法支持客戶端所發的內容類型是,使用此狀態碼。 |
416 | Requested Range Not Satisfiable | 客戶端請求指定資源的範圍無效或沒法知足。 |
417 | Expectation Failed | 服務端沒法知足客戶端的Expect頭部。 |
500 | Internal Server Error | 服務端發生內部錯誤,沒法完成請求。 |
501 | Not Implemented | 服務端不支持客戶端的請求,沒法完成請求。 |
502 | Bad Gateway | 做爲網關或代理的服務器,從遠端服務端接收到了一個無效的請求。 |
503 | Service Unavailable | 用來講明服務端如今沒法爲請求提供服務,可是未來能夠。何時資源會變爲可用可包含在服務端的Retry-After頭部中。 |
504 | Gateway Timeout | 相似於408,只是做爲網關或代理的服務器,未及時從遠端服務端獲取請求。 |
505 | HTTP Version Not Supported | 服務端不支持請求的HTTP協議的版本,沒法完成處理。 |
歡迎關注微信公衆號:萬貓學社,每週一分享Java技術乾貨。併發
Header | 含義 | 示例 |
---|---|---|
Accept | 指定客戶端可以接收的內容類型。 | Accept: text/html,application/xhtml+xml |
Accept-Charset | 客戶端能夠接受的字符編碼集。 | Accept-Charset: GBK |
Accept-Encoding | 客戶端能夠支持的服務端返回內容壓縮編碼類型。 | Accept-Encoding: gzip, deflate |
Accept-Language | 客戶端可接受的語言 | Accept-Language: zh-CN,zh |
Authorization | HTTP受權的受權證書 | Authorization: Basic b25lbW9yZSUzQSV1NEUwNyV1NzMyQiV1NUI2NiV1NzkzRQ== |
Cache-Control | 指定請求和響應遵循的緩存機制 | Cache-Control: no-cache |
Connection | 表示是否須要持久鏈接。 | Connection: keep-alive |
Cookie | HTTP請求發送時,會把保存在該請求域名下的全部cookie值一塊兒發送給服務端。 | Cookie: onemore=萬貓學社; |
Content-Length | 請求的內容長度 | Content-Length: 1024 |
Content-Type | 請求的與實體對應的MIME信息 | Content-Type: application/x-www-form-urlencoded |
Date | 請求發送的日期和時間 | Date: Mon, 16 Mar 2020 11:11:11 GMT |
Expect | 請求的特定的服務端行爲 | Expect: 100-continue |
Host | 指定請求的服務端的域名和端口號 | Host: onemore.study |
If-Match | 只有請求內容與實體相匹配才獲取該數據 | If-Match: "306073f04224cbd114f14693c272f6a0" |
If-Modified-Since | 若是請求的部分在指定時間以後被修改則請求成功。 | If-Modified-Since: Mon, 16 Mar 2020 11:11:11 GMT |
If-None-Match | 只有請求內容與實體不匹配才獲取該數據。 | If-None-Match: "306073f04224cbd114f14693c272f6a0" |
If-Range | 容許對數據的某個範圍進行條件請求。 | If-Range: "306073f04224cbd114f14693c272f6a0" |
If-Unmodified-Since | 只有在指定時間以後未被修改才請求成功。 | If-Unmodified-Since: Mon, 16 Mar 2020 11:11:11 GMT |
Max-Forwards | 將請求轉發給其餘代理或網關的最大次數。 | Max-Forwards: 10 |
Pragma | 用來包含實現特定的指令 | Pragma: no-cache |
Proxy-Authorization | 鏈接到代理的受權證書 | Proxy-Authorization: Basic b25lbW9yZSUzQSV1NEUwNyV1NzMyQiV1NUI2NiV1NzkzRQ== |
Range | 只請求數據的一部分,指定範圍 | Range: bytes=512-1024 |
Referer | 先前資源的URL | Referer: http://onemore.study |
TE | 客戶端願意接受的傳輸編碼 | TE: trailers,deflate;q=0.5 |
User-Agent | 包含發出請求的客戶端信息 | User-Agent: Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:65.0) |
Header | 含義 | 示例 |
---|---|---|
Age | 從原始服務端到代理緩存造成的估算時間(以秒計,非負) | Age: 12 |
Allow | 對某資源的有效的請求行爲 | Allow: GET, POST |
Cache-Control | 告訴全部的緩存機制是否能夠緩存及哪一種類型。 | Cache-Control: no-cache |
Content-Encoding | 服務端支持的返回內容壓縮編碼類型。 | Content-Encoding: gzip |
Content-Language | 響應體的語言 | Content-Language: zh-CN,zh |
Content-Length | 響應體的長度 | Content-Length: 1024 |
Content-Location | 請求資源實際所處位置 | Content-Location: /index.do |
Content-MD5 | 返回資源的MD5校驗值 | Content-MD5: 306073f04224cbd114f14693c272f6a0 |
Content-Range | 在整個返回資源中本部分的字節位置 | Content-Range: bytes 512-1024 |
Content-Type | 返回資源的對象類型 | Content-Type: text/html; charset=GBK |
Date | 原始服務端消息發出的時間 | Date: Mon, 16 Mar 2020 11:11:11 GMT |
ETag | 請求變量的實體標籤的當前值 | ETag: "306073f04224cbd114f14693c272f6a0" |
Expires | 響應過時的日期和時間 | Expires: Mon, 16 Mar 2020 11:11:11 GMT |
Last-Modified | 請求資源的最後修改時間 | Last-Modified: Mon, 16 Mar 2020 11:11:11 GMT |
Location | 告知客戶端資源的實際URL | Location: http://onemore.study |
Pragma | 包括實現特定的指令 | Pragma: no-cache |
Proxy-Authenticate | 它指出認證方案和可應用到代理的該URL上的參數 | Proxy-Authenticate: Basic |
Retry-After | 若是實體暫時不可取,通知客戶端在指定時間以後再次嘗試 | Retry-After: 60 |
Server | 服務端軟件名稱 | Server: Microsoft-IIS/8.5 |
Set-Cookie | 設置Http Cookie | Set-Cookie: onemore=萬貓學社; |
Transfer-Encoding | 文件傳輸編碼 | Transfer-Encoding:chunked |
Vary | 告知下游代理是使用緩存響應仍是從原始服務端請求 | Vary: * |
Via | 告知代理客戶端響應是經過哪裏發送的 | Via: HTTP/1.1 GWA |
WWW-Authenticate | 代表客戶端請求實體應該使用的受權方案 | WWW-Authenticate: Basic |
微信公衆號:萬貓學社app
微信掃描二維碼運維
得到更多Java技術乾貨測試