之所以把專題叫做Mock Interview 是因?yàn)樽罱约阂苍跍?zhǔn)備面試,在復(fù)習(xí)的時(shí)候感覺光自己看知識(shí)點(diǎn)很容易看完就忘,因此我想通過給自己做一個(gè)模擬面試的形式把面試官可能問到的問題都記錄下來的烁,并附上解答,最終達(dá)到文章寫完就好像經(jīng)歷了一次面試的效果神妹。
今天的主題是HTTP鞋仍。從網(wǎng)上的面經(jīng)來看,HTTP協(xié)議在Android面試中出現(xiàn)頻率還是挺高的磕洪,下面就來開始我們的Mock Interview吭练。
1. 說一下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īng)首部字段
- 響應(yīng)內(nèi)容實(shí)體
2. 說幾個(gè)HTTP方法
(這里我覺得不能只是答GET,POST等等方法名谷异,最好把各個(gè)方法的作用或使用場(chǎng)景說一下)
- GET:用于請(qǐng)求訪問已經(jīng)被URI標(biāo)識(shí)的資源分尸,可以通過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ù)是通過URL請(qǐng)求,以field(字段) = value的形式,置于URL后河绽,并用“己单?”連接,多個(gè)請(qǐng)求數(shù)據(jù)間用“&”連接耙饰,如http://127.0.0.1/Test/login.action?name=admin&password=admin纹笼,這個(gè)過程用戶是可見的。
- post傳輸數(shù)據(jù)是通過HTTP的post機(jī)制苟跪。將字段和對(duì)應(yīng)值封存在請(qǐng)求實(shí)體中發(fā)送給服務(wù)器廷痘。這個(gè)過程用戶是不可見的。
區(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. 說一下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)求返回搓幌。通過這兩點(diǎn)縮短請(qǐng)求的時(shí)間,節(jié)約資源開銷迅箩。
5. 說說HTTP狀態(tài)碼
狀態(tài)碼的分類:
1** 信息溉愁,服務(wù)器收到請(qǐng)求,需要請(qǐng)求者繼續(xù)執(zhí)行操作
2** 成功饲趋,操作被成功接收并處理
3** 重定向拐揭,需要進(jìn)一步的操作以完成請(qǐng)求
4** 客戶端錯(cuò)誤撤蟆,請(qǐng)求包含語法錯(cuò)誤或無法完成請(qǐng)求
5** 服務(wù)器錯(cuò)誤,服務(wù)器在處理請(qǐng)求的過程中發(fā)生了錯(cuò)誤
常見的狀態(tài)碼有:
200:請(qǐng)求被正常處理
204:請(qǐng)求被受理但沒有資源可以返回
206:客戶端只是請(qǐng)求資源的一部分堂污,服務(wù)器只對(duì)請(qǐng)求的部分資源執(zhí)行GET方法家肯,相應(yīng)報(bào)文中通過Content-Range指定范圍的資源。
301:永久性重定向盟猖。表示請(qǐng)求的資源已經(jīng)被分配了新的URI讨衣。
302:臨時(shí)重定向
303:與302狀態(tài)碼有相似功能,只是它希望客戶端在請(qǐng)求一個(gè)URI的時(shí)候式镐,能通過GET方法重定向到另一個(gè)URI上
304:發(fā)送附帶條件的請(qǐng)求時(shí)反镇,條件不滿足時(shí)返回,與重定向無關(guān)娘汞。
307:臨時(shí)重定向歹茶,與302類似,只是強(qiáng)制要求使用POST方法
400:請(qǐng)求報(bào)文語法有誤你弦,服務(wù)器無法識(shí)別
401:請(qǐng)求需要認(rèn)證
403:請(qǐng)求的對(duì)應(yīng)資源禁止被訪問
404:服務(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:可接受的自然語言
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í)體主體的自然語言
Content-Length:實(shí)體主體的的字節(jié)數(shù)
Content-Range:實(shí)體主體的位置范圍,一般用于發(fā)出部分請(qǐng)求時(shí)使用
7. 在瀏覽器中輸入baidu.com后都經(jīng)歷了哪些協(xié)議领迈?
- DNS — 解析出域名對(duì)應(yīng)的IP地址
- HTTP — 生成針對(duì)目標(biāo)web服務(wù)器的請(qǐng)求報(bào)文
- TCP — 將HTTP請(qǐng)求報(bào)文分割成報(bào)文段彻磁,把每個(gè)報(bào)文段可靠地傳給對(duì)方(三次握手建立連接)
- IP — 搜索對(duì)方的地址,一邊中轉(zhuǎn)一邊傳送
(我知道的就這幾個(gè)了狸捅,歡迎大神補(bǔ)充)
以上是一部分HTTP協(xié)議相關(guān)的考點(diǎn)衷蜓,歡迎各位指正。
Reference
[1] 《圖解HTTP》 -- 【日】上野宣