Android Mock Interview (1) -- HTTP

之所以把專題叫做Mock Interview 是因?yàn)樽罱约阂苍跍?zhǔn)備面試,在復(fù)習(xí)的時(shí)候感覺光自己看知識(shí)點(diǎn)很容易看完就忘,因此我想通過(guò)給自己做一個(gè)模擬面試的形式把面試官可能問到的問題都記錄下來(lái),并附上解答,最終達(dá)到文章寫完就好像經(jīng)歷了一次面試的效果。

今天的主題是HTTP。從網(wǎng)上的面經(jīng)來(lái)看,HTTP協(xié)議在Android面試中出現(xiàn)頻率還是挺高的,下面就來(lái)開始我們的Mock Interview。

1. 說(shuō)一下HTTP協(xié)議的格式

HTTP 報(bào)文分為請(qǐng)求和響應(yīng)報(bào)文。
請(qǐng)求報(bào)文由3部分組成:

  • 請(qǐng)求行:包括請(qǐng)求方法,URI和HTTP版本號(hào)
  • 請(qǐng)求首部字段
  • 請(qǐng)求內(nèi)容實(shí)體

響應(yīng)報(bào)文也是3部分:

  • 狀態(tài)行:包括HTTP版本號(hào),狀態(tài)碼和原因短語(yǔ)
  • 響應(yīng)首部字段
  • 響應(yīng)內(nèi)容實(shí)體

2. 說(shuō)幾個(gè)HTTP方法

(這里我覺得不能只是答GET,POST等等方法名,最好把各個(gè)方法的作用或使用場(chǎng)景說(shuō)一下)

  • GET:用于請(qǐng)求訪問已經(jīng)被URI標(biāo)識(shí)的資源,可以通過(guò)URL傳參給服務(wù)器
  • POST:主要功能與GET方法類似,但是比GET方法安全,因?yàn)閿?shù)據(jù)是放在請(qǐng)求實(shí)體中傳遞給服務(wù)器的,用戶不可見。一般推薦用POST方法
  • PUT:用于傳輸文件,報(bào)文主題中包含文件內(nèi)容,保存到對(duì)應(yīng)的URI位置
  • HEAD:獲得響應(yīng)報(bào)文首部。與GET方法類似,但是不返回報(bào)文實(shí)體,一般用于驗(yàn)證URI是否有效
  • DELETE:與PUT方法相反,刪除對(duì)應(yīng)URI位置的文件
  • OPTIONS:查詢相應(yīng)URI支持的HTTP方法

3. GET方法和POST方法有什么區(qū)別?

區(qū)別一:

  • get重點(diǎn)是從服務(wù)器上獲取資源
  • post重點(diǎn)是向服務(wù)器發(fā)送數(shù)據(jù)。

區(qū)別二:

  • get傳輸數(shù)據(jù)是通過(guò)URL請(qǐng)求,以field(字段) = value的形式,置于URL后,并用“?”連接,多個(gè)請(qǐng)求數(shù)據(jù)間用“&”連接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,這個(gè)過(guò)程用戶是可見的。
  • post傳輸數(shù)據(jù)是通過(guò)HTTP的post機(jī)制。將字段和對(duì)應(yīng)值封存在請(qǐng)求實(shí)體中發(fā)送給服務(wù)器。這個(gè)過(guò)程用戶是不可見的。

區(qū)別三:

  • get傳輸數(shù)據(jù)量小,因?yàn)槭躑RL長(zhǎng)度限制,但是效率高。
  • post可以傳輸大量數(shù)據(jù),所以上傳文件時(shí)只能用post

區(qū)別四:

  • get是不安全的,因?yàn)閁RL是可見的,可能會(huì)泄漏私密信息。
  • post 較get安全性高

區(qū)別五:

  • get方式只能支持ASCII字符,向服務(wù)器傳的中文字符可能會(huì)亂碼。
  • post支持標(biāo)準(zhǔn)字符集,可以正確傳遞中文字符。

4. 說(shuō)一下HTTP 1.0 和 1.1 的區(qū)別

  • 在HTTP1.0中,當(dāng)連接建立后,客戶端發(fā)送一個(gè)請(qǐng)求,服務(wù)器端返回一個(gè)信息后就關(guān)閉了連接,當(dāng)瀏覽器下次要請(qǐng)求時(shí)又要重新建立連接。這種不斷建立連接的方式會(huì)給服務(wù)器造成很大負(fù)擔(dān),也會(huì)延長(zhǎng)響應(yīng)時(shí)間。
  • 在HTTP1.1中節(jié)省了2點(diǎn)開銷。1. 引入了持續(xù)連接的概念,建立這種連接后,客戶端可以向服務(wù)端發(fā)送多條請(qǐng)求,而不必每次請(qǐng)求都重新連接。2. 請(qǐng)求管線化,客戶端可以連續(xù)發(fā)送多條請(qǐng)求而不必等待之前請(qǐng)求返回。通過(guò)這兩點(diǎn)縮短請(qǐng)求的時(shí)間,節(jié)約資源開銷。

5. 說(shuō)說(shuō)HTTP狀態(tài)碼

狀態(tài)碼的分類:
1** 信息,服務(wù)器收到請(qǐng)求,需要請(qǐng)求者繼續(xù)執(zhí)行操作
2** 成功,操作被成功接收并處理
3** 重定向,需要進(jìn)一步的操作以完成請(qǐng)求
4** 客戶端錯(cuò)誤,請(qǐng)求包含語(yǔ)法錯(cuò)誤或無(wú)法完成請(qǐng)求
5** 服務(wù)器錯(cuò)誤,服務(wù)器在處理請(qǐng)求的過(guò)程中發(fā)生了錯(cuò)誤

常見的狀態(tài)碼有:
200:請(qǐng)求被正常處理
204:請(qǐng)求被受理但沒有資源可以返回
206:客戶端只是請(qǐng)求資源的一部分,服務(wù)器只對(duì)請(qǐng)求的部分資源執(zhí)行GET方法,相應(yīng)報(bào)文中通過(guò)Content-Range指定范圍的資源。
301:永久性重定向。表示請(qǐng)求的資源已經(jīng)被分配了新的URI。
302:臨時(shí)重定向
303:與302狀態(tài)碼有相似功能,只是它希望客戶端在請(qǐng)求一個(gè)URI的時(shí)候,能通過(guò)GET方法重定向到另一個(gè)URI上
304:發(fā)送附帶條件的請(qǐng)求時(shí),條件不滿足時(shí)返回,與重定向無(wú)關(guān)。
307:臨時(shí)重定向,與302類似,只是強(qiáng)制要求使用POST方法
400:請(qǐng)求報(bào)文語(yǔ)法有誤,服務(wù)器無(wú)法識(shí)別
401:請(qǐng)求需要認(rèn)證
403:請(qǐng)求的對(duì)應(yīng)資源禁止被訪問
404:服務(wù)器無(wú)法找到對(duì)應(yīng)資源
500:服務(wù)器內(nèi)部錯(cuò)誤
503:服務(wù)器正忙

6. HTTP 協(xié)議首部字段有哪幾種?

首部字段大致分為以下4中:
(1) 通用首部字段(請(qǐng)求報(bào)文與響應(yīng)報(bào)文都會(huì)使用的首部字段)
Date:創(chuàng)建報(bào)文時(shí)間
Connection:連接的管理
Cache-Control:緩存的控制
Transfer-Encoding:報(bào)文主體的傳輸編碼方式

(2) 請(qǐng)求首部字段(請(qǐng)求報(bào)文會(huì)使用的首部字段)
Host:請(qǐng)求資源所在服務(wù)器
Accept:可處理的媒體類型
Accept-Charset:可接收的字符集
Accept-Encoding:可接受的內(nèi)容編碼
Accept-Language:可接受的自然語(yǔ)言
If-Modified-Since: 確認(rèn)代理或客戶端擁有的本地資源的有效性。

(3) 響應(yīng)首部字段(響應(yīng)報(bào)文會(huì)使用的首部字段)
Accept-Ranges:可接受的字節(jié)范圍
Location:令客戶端重新定向到的URI
Server:HTTP服務(wù)器的安裝信息
Retry-After: 告知客戶端應(yīng)該在多久之后再次發(fā)送請(qǐng)求。主要配合狀態(tài)碼503 Service Unavailable響應(yīng),或3xx redirect響應(yīng)一起使用

(4) 實(shí)體首部字段(請(qǐng)求報(bào)文與響應(yīng)報(bào)文的的實(shí)體部分使用的首部字段)
Allow:資源可支持的HTTP方法
Content-Type:實(shí)體主類的類型
Content-Encoding:實(shí)體主體適用的編碼方式
Content-Language:實(shí)體主體的自然語(yǔ)言
Content-Length:實(shí)體主體的的字節(jié)數(shù)
Content-Range:實(shí)體主體的位置范圍,一般用于發(fā)出部分請(qǐng)求時(shí)使用

7. 在瀏覽器中輸入baidu.com后都經(jīng)歷了哪些協(xié)議?

  1. DNS — 解析出域名對(duì)應(yīng)的IP地址
  2. HTTP — 生成針對(duì)目標(biāo)web服務(wù)器的請(qǐng)求報(bào)文
  3. TCP — 將HTTP請(qǐng)求報(bào)文分割成報(bào)文段,把每個(gè)報(bào)文段可靠地傳給對(duì)方(三次握手建立連接)
  4. IP — 搜索對(duì)方的地址,一邊中轉(zhuǎn)一邊傳送

(我知道的就這幾個(gè)了,歡迎大神補(bǔ)充)

以上是一部分HTTP協(xié)議相關(guān)的考點(diǎn),歡迎各位指正。

Reference

[1] 《圖解HTTP》 -- 【日】上野宣

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容