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


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

什么是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技術干貨。

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

微信公眾號:萬貓學社

微信掃描二維碼

獲得更多Java技術干貨


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM