前端面試題之HTTP請求(包括請求的方法型別、請求與響應、get和post的區別)
經歷了一波秋招,整理了一部分面試題,也是趁這個機會再鞏固一下知識點。(本來想把所有的知識點都寫在一篇部落格中,感覺太冗長了,不如一篇一篇的整潔。)
一、HTTP請求(主要從請求的方法型別、請求訊息和響應訊息、get和post的區別這幾部分來說)
1、請求的方法:HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
其中,Get指從指定的資源獲取資料(比如獲取列表中的資料)
Post指向指定的資源提交要被處理的資料(如提交表單資訊)
Head與 GET 相同,但只返回 HTTP 報頭,不返回文件主體。
Put指上傳指定的 URI 表示。
Delete指刪除指定資源。
Options返回伺服器支援的 HTTP 方法。
Connect把請求連線轉換到透明的 TCP/IP 通道。
2、請求與響應。
1)請求由請求行、請求頭、和請求資料組成。(請求頭是那些由客戶端發往服務端以便幫助服務端更好的滿足客戶端請求的頭。)
請求行寫法是固定的,由三部分組成,第一部分是請求方法,第二部分是請求網址,第三部分是HTTP版本。如
GET www.cnblogs.com HTTP/1.1。
Http請求可以包含3種HTTP頭:1.請求頭(request header) 2.普通頭(general header) 3.實體頭(entity header)
通常來說,由於Get請求往往不包含內容實體,因此也不會有實體頭。
請求資料只在POST請求中存在,因為GET請求並不包含任何實體。
2)響應由狀態行、響應頭、響應正文組成。( HTTP響應頭是那些描述HTTP響應本身的頭)
狀態行由三部分組成,第一部分是HTTP版本,第二部分是響應狀態碼,第三部分是狀態碼的描述 。如
HTTP/1.1 200 OK。
HTTP響應中包含的頭包括1.響應頭(response header) 2.普通頭(general header) 3.實體頭(entity header)。
HTTP響應內容就是HTTP請求所請求的資訊。這個資訊可以是一個HTML,也可以是一個圖片。
3)請求頭和響應頭:
a.請求頭例項:(來自百度首頁)
其中,Accept是客戶端能接受的資源型別。
Accept-Encoding:是支援的壓縮格式。資料在網路上傳遞時,可能伺服器會把資料壓縮後再發送。
Accept-Language:是客戶端能接受的語言型別。
Connection:是維護客戶端與服務端的連線方式。
Cookie:是客戶端暫存的服務端的資訊。因為不是第一次訪問這個地址,所以會在請求中把上一次伺服器響應中傳送過來 的Cookie在請求中一併傳送去過。
Host:是連線的目標主機與埠號。
Referer:表示瀏覽器所訪問的前一個頁面,可以認為是之前訪問頁面的連結將瀏覽器帶到了當前頁面。。
User-Agent:是客戶端版本號的名字,即瀏覽器的身份標識字串。
還有一些常用的請求頭(關於協商快取,會和強制快取一起在後邊介紹):
If-Modified-Since:允許在對應的資源未被修改的情況下返回304未修改。(協商快取,與Last-Modified對應)
If-None-Match:允許在對應的內容未被修改的情況下返回304未修改。(協商快取,與Etag對應)
If-Match:主要用於像 PUT 這樣的方法中,僅當從使用者上次更新某個資源後,該資源未被修改的情況下,才更新該資源。
If-Range:如果該實體未被修改過,則向返回所缺少的那一個或多個部分。否則,返回整個新的實體。
Origin:發起一個針對跨域資源共享的請求(該請求要求伺服器在響應中加入一個Access-Control-Allow-Origin
的訊息頭,表示訪問控制所允許的來源)。
b.響應頭例項:
其中,
Cache-Control(強制快取欄位):通知從伺服器到客戶端內的所有快取機制,表示它們是否可以快取這個物件及快取有效 時間。其單位為秒。
Connection:針對該連線所預期的選項。
Content-Encoding:響應資源所使用的編碼型別。
Content-Length:響應訊息體的長度,用8進位制位元組表示。
Content-Type:當前內容的MIME
型別
Date:此條訊息被髮送時的日期和時間。
Expires(強制快取欄位):指定一個日期/時間,超過該時間則認為此迴應已經過期。
Server:伺服器的名稱。
Vary:告知下游的代理伺服器,應當如何對以後的請求協議頭進行匹配,以決定是否可使用已快取的響應內容而不是重新從 原伺服器請求新的內容。
還有一些常用的響應頭:
WWW-Authenticate:表示在請求獲取這個實體時應當使用的認證模式。
Set-Cookie:設定HTTP cookie。
Last-Modified:所請求的物件的最後修改日期。
Access-Control-Allow-Origin:指定哪些網站可以跨域源資源共享。
Etag:
對於某個資源的某個特定版本的一個識別符號,通常是一個 訊息雜湊。
c.請求頭和響應頭通用頭部---General(通用頭即可以包含在HTTP請求中,也可以包含在HTTP響應中。通用頭的作用是描述HTTP協議本身。)
其中,Request URL是請求地址
Request Method是請求方法
Status Code是狀態碼
Remote Address是請求的遠端地址
Referrer Policy是策略
3、Get和Post的區別:
1)get把請求的資料放在url上,即HTTP協議頭上;post把資料放在HTTP的請求體內。
其中,get請求中以?分割URL和傳輸資料,引數之間以&相連。 (若傳送空格,則轉換為+;)
2)get提交的資料最大是2k;post理論上沒有限制。實際上IIS4中最大量為80KB,IIS5中為100KB。
其中,get傳送的資料在原則上url長度無限制,限制實際上取決於瀏覽器,瀏覽器會限制url的長度。
3)get產生一個TCP資料包,瀏覽器會把http header和data一併傳送出去,伺服器響應200(返回資料);
post產生兩個TCP資料包,瀏覽器先發送header,伺服器響應100 continue,瀏覽器再發送data,伺服器響應200 ok(返回資料)。
4)GET請求只能進行url編碼;POST支援多種編碼方式。
5)GET在瀏覽器回退時是無害的;POST會再次提交請求。(get請求中的回退操作實際上瀏覽器會從之前的快取中拿結果)