【Java核心面試寶典】Day18、GET和POST請求都有哪些常見面試題?
Hello,你好呀,我是灰小猿!一個超會寫bug的程序猿!
用堅持締造技術、用指尖敲動未來!
和很多小伙伴們一樣,我也是一名奔波在Java道路上的“創造者”。也想靠技術來改未來,改變世界!因為我們堅信每一次敲動鍵盤都能讓生活變得更智能、世界變得更有趣!
在此專欄《Java核心面試寶典》記錄我們備戰夢想的【day 18】!
今天來和小伙伴們分享一下關于HTTP中常見的幾種方法以及他們可能被出到的面試題。
一、HTTP頭部主要包含哪些信息?
HTTP頭部本質上作為一個傳遞額外重要信息的鍵值對,主要分為:通用頭部、請求頭部、響應頭部和實體頭部。
下面是這四種頭部信息中主要包括的內容:
通用頭部包括有:
協議頭
說明
舉例
Cache-Control
用來指定當前的請求/回復中是否使用緩存機制
Cache-Control: no-store
Connection
客戶端(瀏覽器)想要優先使用的連接類型
Connection: keep-alive (Upgrade)
Date
報文創建時間
Date: Dec, 26 Dec 2015 17: 30: 00 GMT
Trailer
會實現說明在報文主體后記錄哪些首部字段,該首部字段可以使用在 HTTP/1.1 版本分塊傳輸編碼時
Trailer: Expiress
Transfer-Encoding
用來改變報文格式
Transfer-Encoding: chunked
Upgrade
要求服務器升級到一個高版本協議
Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
Via
告訴服務器,這個請求是由哪些代理發出的
Via: 1.0 fred, 1.1 itbilu.com.com?(Apache/1.1)
Warning
一個一般性的警告,表示在實體內容中可能存在錯誤
Warning: 199 Miscellaneous warning
請求頭部包括有:
協議頭
說明
舉例
Accept
告訴服務器自己允許哪些媒體類型
Accept: text/plain
Accept-Charset
瀏覽器申明可接受的字符集
Accept-Charset: utf-8
Accept-Encoding
瀏覽器申明自己接收的編碼方法
Accept-Encoding: gzip, deflate
Accept-Language
瀏覽器可接受的響應內容語言列表
Accept-Language: en-US
Authorization
用于表示 HTTP 協議中需要認證資源的認證信息
Authorization: Basic OSdjJGRpbjpvcGVul ANIc2SdDE==
Expect
表示客戶端要求服務器做出特定的行為
Expect: 100-continue
From
發起此請求的用戶的郵件地址
From: user@itbilu.com
Host
表示服務器的域名以及服務器所監聽的端口號
Host: www.itbilu.com:80
If-XXX
條件請求
If-Modified-Since: Dec, 26 Dec 2015 17:30:00 GMT
Max-Forwards
限制該消息可被代理及網關轉發的次數
Max-Forwards: 10
Range
表示請求某個實體的一部分,字節偏移以 0 開始
Range: bytes=500-999
Referer
表示瀏覽器所訪問的前一個頁面,可以認為是之前訪問頁面的鏈接將瀏覽器帶到了當前頁面
Referer: http://itbilu.com/nodejs
User-Agent
瀏覽器的身份標識字符串
User-Agent: Mozilla/……
響應頭部包括有:
協議頭
說明
舉例
Accept-Ranges
字段的值表示可用于定義范圍的單位
Accept-Ranges: bytes
Age
創建響應的時間
Age:5744337
ETag
唯一標識分配的資源
Etag:W/"585cd998-7c0f"
Location
表示重定向后的 URL
Location: http://www.zcmhi.com/archives/94.html
Retry-After
告知客戶端多久后再發送請求
Retry-After: 120
Server
告知客戶端服務器信息
Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
Vary
緩存控制
Vary: Origin
實體頭部包括有:
協議頭
說明
舉例
Allow
對某網絡資源的有效的請求行為,不允許則返回405
Allow: GET, HEAD
Content-encoding
返回內容的編碼方式
Content-Encoding: gzip
Content-Length
返回內容的字節長度
Content-Length: 348
Content-Language
響應體的語言
Content-Language: en,zh
Content-Location
請求資源可替代的備用的另一地址
Content-Location: /index.htm
Content-MD5
返回資源的MD5校驗值
Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
Content-Range
在整個返回體中本部分的字節位置
Content-Range: bytes 21010-47021/47022
Content-Type
返回內容的MIME類型
Content-Type: text/html; charset=utf-8
Expires
響應過期的日期和時間
Expires: Thu, 01 Dec 2010 16:00:00 GMT
Last-Modified
請求資源的最后修改時間
Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT
二、如何知道HTTP的報文長度?
當相應消息中存在content-length的時候,我們可以直接根據這個值來判斷數據是否接收完成,例如客戶端向服務器請求一個靜態頁面或者一張圖片的時候,服務器能夠很清楚的知道請求內容的大小,因此可以通過消息首部字段content-length來告訴客戶端需要接收多少的數據。但是如果服務器預先不知道請求內容的大小,例如加載動態頁面的時候,就需要使用Transfer-Encoding: chunked 的方式來代替 Content-Length。
分塊傳輸編碼(Chunked transfer encoding)是 HTTP/1.1 中引入的一種數據傳輸機制,其允許 HTTP 由服務器發送給客戶端的數據可以分成多個部分,當數據分解成一系列數據塊發送時,服務器就可以發送數據而不需要預先知道發送內容的總大小,每一個分塊包含十六進制的長度值和數據,最后一個分塊長度值為0,表示實體結束,客戶機可以以此為標志確認數據已經接收完畢。
三、HTTP方法了解哪些?
HTTP/1.0定義了三種請求方法:GET、POST和HEAD方法
HTTP/1.1增加了六種請求方法:OPTIONS、PUT、PATCH、DELETE、TRACE和CONNECT方法
所以現在一共有九種HTTP方法,他們的作用分別如下:
方法
描述
GET
請求指定的頁面信息,并返回具體內容,通常只用于讀取數據。
HEAD
類似于 GET 請求,只不過返回的響應中沒有具體的內容,用于獲取報頭。
POST
向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST 請求可能會導致新的資源的建立或已有資源的更改。
PUT
替換指定的資源,沒有的話就新增。
DELETE
請求服務器刪除 URL 標識的資源數據。
CONNECT
將服務器作為代理,讓服務器代替用戶進行訪問。
OPTIONS
向服務器發送該方法,會返回對指定資源所支持的 HTTP 請求方法。
TRACE
回顯服務器收到的請求數據,即服務器返回自己收到的數據,主要用于測試和診斷。
PATCH
是對 PUT 方法的補充,用來對已知資源進行局部更新。
四、GET請求和POST請求的區別?
Get提交的數據會被放置在URL之后,并且請求參數會被完整的保留在瀏覽器的記錄里,由于參數直接暴露在URL中,可能存在安全問題,因此往往用于獲取資源信息。而post參數放置在請求主體中,并且參數不會被保留。因此相比于get方法,post方法更安全,主要用于修改服務器上的資源。
Get請求只支持URL編碼,post請求支持多種編碼格式。
Get請求只支持ASCII字符格式的參數,而post請求沒有限制。
Get請求提交的數據大小有限制(這里所說的限制是針對瀏覽器而言的)。而post提交的數據沒有限制。
Get方式需要使用Request QueryString來獲取變量的值,而post方式通過Request Form來獲取
Get方法產生一個tcp數據包,post方法產生兩個(并不是所有的瀏覽器中都產生兩個)
對于GET方式的請求,瀏覽器會把http header和data一并發送出去,服務端響應200,請求成功。
對于POST方式的請求,瀏覽器會先發送http header給服務端,告訴服務端等一下會有數據過來,服務端響應100 continue,告訴瀏覽器我已經準備接收數據,瀏覽器再post發送一個data給服務端,服務端響應200,請求成功。
五、追問:既然GET請求提交的數據大小有限制,那么他的長度限制是多少?
HTTP 中的 GET 方法是通過 URL 傳遞數據的,而 URL 本身并沒有對數據的長度進行限制,真正限制 GET 長度的是瀏覽器,
例如 IE 瀏覽器對 URL 的最大限制為 2000多個字符,大概 2KB左右,像 Chrome, FireFox 等瀏覽器能支持的 URL 字符數更多,其中 FireFox 中 URL 最大長度限制為 65536 個字符,Chrome 瀏覽器中 URL 最大長度限制為 8182 個字符。
并且這個長度不是只針對數據部分,而是針對整個 URL 而言,在這之中,不同的服務器同樣影響 URL 的最大長度限制。因此對于特定的瀏覽器,GET的長度限制不同。
由于 POST 方法請求參數在請求主體中,理論上講,post 方法是沒有大小限制的,而真正起限制作用的是服務器處理程序的處理能力。
今日總結
今天最主要其實是HTTP協議中的多種方法的使用和理解,我們需要掌握get和post請求的原理、他們的區別、各自的請求方式、適用于什么場景等等。
如果小伙伴們有遇到其他相關的面試題,歡迎在評論區留言提出,我會把大家提出的總結到文章內, 歡迎小伙伴們一起評論區打卡學習!小伙伴們可也在左方加我好友一起探討學習!
我是 灰小猿 ,我們下期見!
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。