HTTP協議經典面試題整理及答案詳解

不管你是Java、PHP開發者,仍是運維人員,只要從事互聯網行業,面試時均可能被問到HTTP協議相關知識。歷時多天的嘔心瀝血,爲你總結了HTTP協議的經典面試題。因爲涉及內容比較繁雜不方便記憶,建議收藏起來,時不時看一遍或者面試前突擊複習。html

什麼是HTTP報文?

HTTP報文是HTTP協議在客戶端和服務端之間傳送的數據塊。面試

HTTP報文由哪三部分組成?

HTTP報文由起始行(start line)、頭部(header)和主體(body)三部分組成,起始行是對報文進行的描述,頭部包含報文的一些屬性,主體包含報文的數據(可選,非必選)。緩存

歡迎關注微信公衆號:萬貓學社,每週一分享Java技術乾貨。服務器

HTTP報文分爲哪兩類?

HTTP報文能夠分爲:請求報文(request message)和響應報文(response message)。當客戶端向服務端發送請求時,就是發送請求報文;當服務端向客戶端返回數據時,就是返回響應報文。好比,獲取一個文本須要的請求報文和響應報文:微信

HTTP常見的請求方法有哪些?

方法 描述 是否包含主體
GET 從服務端獲取指定信息
POST 向服務端發送待處理的數據
HEAD 從服務端獲取指定信息的頭部
PUT 向服務端發送數據並替換服務端上指定的數據
OPTIONS 查詢針對請求URL指定的資源支持
DELETE 從服務端刪除指定數據
TRACE 沿着目標資源的路徑執行消息環回測試

HTTP的狀態碼分爲哪幾類?

總體範圍 已定義範圍 分類
100~199 100~101 信息提示
200~299 100~206 成功
300~399 300~305 重定向
400~499 400~415 客戶端錯誤
500~599 500~505 服務端錯誤

歡迎關注微信公衆號:萬貓學社,每週一分享Java技術乾貨。cookie

HTTP常見的狀態碼有哪些?

狀態碼 緣由短語 含義
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技術乾貨。併發

HTTP常見的頭部信息有哪些?

請求報文的頭部信息

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技術乾貨測試

相關文章
相關標籤/搜索