摘要:閱讀原文一個(gè)打趴面試者面試一年多,每當(dāng)我問(wèn)起面試者對(duì)的了解時(shí),個(gè)個(gè)回答令我瞠目結(jié)舌,這些開發(fā)者都有年的經(jīng)驗(yàn)。向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求例如提交表單或者上傳文件。
閱讀原文:一個(gè)HTTP打趴80%面試者
面試一年多,每當(dāng)我問(wèn)起面試者對(duì)HTTP的了解時(shí),個(gè)個(gè)回答令我瞠目結(jié)舌,這些開發(fā)者都有3-5年的經(jīng)驗(yàn)。請(qǐng)不要讓我叫你野生程序員,是時(shí)候了解HTTP了,讓我們當(dāng)個(gè)正規(guī)軍。
起因面試官:請(qǐng)問(wèn)你了解HTTP協(xié)議嗎?
前端開發(fā):這不是應(yīng)該后端清楚的嗎?
后端開發(fā):這不是前端知道的嗎?
面試官:……
我們先一本正經(jīng)的來(lái)了解下HTTP(不包含傳輸層TCP),然后總結(jié)其中的精華回復(fù)面試官。
HTTP協(xié)議簡(jiǎn)介HTTP(超文本傳輸協(xié)議)是應(yīng)用層上的一種客戶端/服務(wù)端模型的通信協(xié)議,它由請(qǐng)求和響應(yīng)構(gòu)成,且是無(wú)狀態(tài)的。(暫不介紹HTTP2)
協(xié)議
協(xié)議規(guī)定了通信雙方必須遵循的數(shù)據(jù)傳輸格式,這樣通信雙方按照約定的格式才能準(zhǔn)確的通信。
無(wú)狀態(tài)
無(wú)狀態(tài)是指兩次連接通信之間是沒(méi)有任何關(guān)系的,每次都是一個(gè)新的連接,服務(wù)端不會(huì)記錄前后的請(qǐng)求信息。
客戶端/服務(wù)端模型
五層網(wǎng)絡(luò)模型 URL構(gòu)成用了這么久,你注意過(guò)嗎?
協(xié)議內(nèi)容 請(qǐng)求(Request)客戶端發(fā)送一個(gè)HTTP請(qǐng)求到服務(wù)端的格式:
請(qǐng)求行
請(qǐng)求頭
請(qǐng)求體
響應(yīng)(Response)服務(wù)端響應(yīng)客戶端格式:
狀態(tài)行
響應(yīng)頭
響應(yīng)體
狀態(tài)碼HTTP狀態(tài)碼由三個(gè)十進(jìn)制數(shù)字組成,第一個(gè)十進(jìn)制數(shù)字定義了狀態(tài)碼的類型,后兩個(gè)數(shù)字沒(méi)有分類的作用。HTTP狀態(tài)碼共分為5種類型:
分類 | 分類描述 |
---|---|
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ò)誤 |
更詳細(xì)的狀態(tài)碼可查看 HTTP狀態(tài)碼
但一般我們只需要知道幾個(gè)常見的就行,比如 200,400,401,403,404,500,502.
請(qǐng)求方法截止到HTTP1.1共有下面幾種方法:
方法 | 描述 |
---|---|
GET | GET請(qǐng)求會(huì)顯示請(qǐng)求指定的資源。一般來(lái)說(shuō)GET方法應(yīng)該只用于數(shù)據(jù)的讀取,而不應(yīng)當(dāng)用于會(huì)產(chǎn)生副作用的非冪等的操作中。它期望的應(yīng)該是而且應(yīng)該是安全的和冪等的。這里的安全指的是,請(qǐng)求不會(huì)影響到資源的狀態(tài)。 |
POST | 向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請(qǐng)求體中。POST請(qǐng)求可能會(huì)導(dǎo)致新的資源的建立和/或已有資源的修改。 |
PUT | PUT請(qǐng)求會(huì)身向指定資源位置上傳其最新內(nèi)容,PUT方法是冪等的方法。通過(guò)該方法客戶端可以將指定資源的最新數(shù)據(jù)傳送給服務(wù)器取代指定的資源的內(nèi)容。 |
PATCH | PATCH方法出現(xiàn)的較晚,它在2010年的RFC 5789標(biāo)準(zhǔn)中被定義。PATCH請(qǐng)求與PUT請(qǐng)求類似,同樣用于資源的更新。二者有以下兩點(diǎn)不同:1.PATCH一般用于資源的部分更新,而PUT一般用于資源的整體更新。2.當(dāng)資源不存在時(shí),PATCH會(huì)創(chuàng)建一個(gè)新的資源,而PUT只會(huì)對(duì)已在資源進(jìn)行更新。 |
DELETE | DELETE請(qǐng)求用于請(qǐng)求服務(wù)器刪除所請(qǐng)求URI(統(tǒng)一資源標(biāo)識(shí)符,Uniform Resource Identifier)所標(biāo)識(shí)的資源。DELETE請(qǐng)求后指定資源會(huì)被刪除,DELETE方法也是冪等的。 |
OPTIONS | 允許客戶端查看服務(wù)器的性能。 |
CONNECT | HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。 |
HEAD | 類似于get請(qǐng)求,只不過(guò)返回的響應(yīng)中沒(méi)有具體的內(nèi)容,用于獲取報(bào)頭 |
TRACE | 回顯服務(wù)器收到的請(qǐng)求,主要用于測(cè)試或診斷。 |
名稱 | 作用 |
---|---|
Content-Type | 請(qǐng)求體/響應(yīng)體的類型,如:text/plain、application/json |
Accept | 說(shuō)明接收的類型,可以多個(gè)值,用,(半角逗號(hào))分開 |
Content-Length | 請(qǐng)求體/響應(yīng)體的長(zhǎng)度,單位字節(jié) |
Content-Encoding | 請(qǐng)求體/響應(yīng)體的編碼格式,如gzip,deflate |
Accept-Encoding | 告知對(duì)方我方接受的Content-Encoding |
ETag | 給當(dāng)前資源的標(biāo)識(shí),和Last-Modified、If-None-Match、If-Modified-Since配合,用于緩存控制 |
Cache-Control | 取值為一般為no-cache或max-age=XX,XX為個(gè)整數(shù),表示該資源緩存有效期(秒) |
Content-Type,內(nèi)容類型,一般是指網(wǎng)頁(yè)中存在的Content-Type,用于定義網(wǎng)絡(luò)文件的類型和網(wǎng)頁(yè)的編碼,決定瀏覽器將以什么形式、什么編碼讀取這個(gè)文件。
常見的媒體格式類型如下:
Content-Type(Mime-Type) | 描述 |
---|---|
text/html | HTML格式 |
text/plain | 純文本格式 |
text/xml | XML格式 |
image/gif | gif圖片格式 |
image/jpeg | jpg圖片格式 |
image/png | png圖片格式 |
以application開頭的媒體格式類型:
Content-Type(Mime-Type) | 描述 |
---|---|
application/xml | XML數(shù)據(jù)格式 |
application/json | JSON數(shù)據(jù)格式 |
application/pdf | pdf格式 |
application/msword | Word文檔格式 |
application/octet-stream | 二進(jìn)制流數(shù)據(jù)(如常見的文件下載) |
application/x-www-form-urlencoded | form表單數(shù)據(jù)被編碼為key/value格式發(fā)送到服務(wù)器(表單默認(rèn)的提交數(shù)據(jù)的格式) |
multipart/form-data | 需要在表單中進(jìn)行文件上傳時(shí),就需要使用該格式 |
名稱 | 作用 |
---|---|
Authorization | 用于設(shè)置身份認(rèn)證信息 |
User-Agent | 用戶標(biāo)識(shí),如:OS和瀏覽器的類型和版本 |
If-Modified-Since | 值為上一次服務(wù)器返回的 Last-Modified 值,用于確認(rèn)某個(gè)資源是否被更改過(guò),沒(méi)有更改過(guò)(304)就從緩存中讀取 |
If-None-Match | 值為上一次服務(wù)器返回的 ETag 值,一般會(huì)和If-Modified-Since一起出現(xiàn) |
Cookie | 已有的Cookie |
Referer | 表示請(qǐng)求引用自哪個(gè)地址,比如你從頁(yè)面A跳轉(zhuǎn)到頁(yè)面B時(shí),值為頁(yè)面A的地址 |
Host | 請(qǐng)求的主機(jī)和端口號(hào) |
名稱 | 作用 |
---|---|
Date | 服務(wù)器的日期 |
Last-Modified | 該資源最后被修改時(shí)間 |
Transfer-Encoding | 取值為一般為chunked,出現(xiàn)在Content-Length不能確定的情況下,表示服務(wù)器不知道響應(yīng)版體的數(shù)據(jù)大小,一般同時(shí)還會(huì)出現(xiàn)Content-Encoding響應(yīng)頭 |
Set-Cookie | 設(shè)置Cookie |
Location | 重定向到另一個(gè)URL,如輸入瀏覽器就輸入baidu.com回車,會(huì)自動(dòng)跳到 https://www.baidu.com ,就是通過(guò)這個(gè)響應(yīng)頭控制的 |
Server | 后臺(tái)服務(wù)器 |
清楚的知道這些內(nèi)容,不僅僅是為了應(yīng)對(duì)面試官,而是能實(shí)實(shí)在在的提高自己的效率,這一點(diǎn)在前后端聯(lián)調(diào)接口最明顯,當(dāng)你在應(yīng)用中去請(qǐng)求其他接口或轉(zhuǎn)發(fā)請(qǐng)求時(shí)這些也是要知道的。不然出現(xiàn)問(wèn)題的概率會(huì)大大提高。
歡迎關(guān)注公眾號(hào)交流!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73789.html
摘要:函數(shù)式編程前端掘金引言面向?qū)ο缶幊桃恢币詠?lái)都是中的主導(dǎo)范式。函數(shù)式編程是一種強(qiáng)調(diào)減少對(duì)程序外部狀態(tài)產(chǎn)生改變的方式。 JavaScript 函數(shù)式編程 - 前端 - 掘金引言 面向?qū)ο缶幊桃恢币詠?lái)都是JavaScript中的主導(dǎo)范式。JavaScript作為一門多范式編程語(yǔ)言,然而,近幾年,函數(shù)式編程越來(lái)越多得受到開發(fā)者的青睞。函數(shù)式編程是一種強(qiáng)調(diào)減少對(duì)程序外部狀態(tài)產(chǎn)生改變的方式。因此,...
摘要:消息隊(duì)列技術(shù)介紹后端掘金一消息隊(duì)列概述消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合異步消息流量削鋒等問(wèn)題。的內(nèi)存優(yōu)化后端掘金聲明本文內(nèi)容來(lái)自開發(fā)與運(yùn)維一書第八章,如轉(zhuǎn)載請(qǐng)聲明。 消息隊(duì)列技術(shù)介紹 - 后端 - 掘金一、 消息隊(duì)列概述 消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合、異步消息、流量削鋒等問(wèn)題。實(shí)現(xiàn)高性能、高可用、可伸縮和最終一致性架構(gòu)。是大型分布式系...
摘要:再者,現(xiàn)在互聯(lián)網(wǎng)的面試中上點(diǎn)的都會(huì)涉及一下或者的問(wèn)題個(gè)高級(jí)多線程面試題及回答后端掘金在任何面試當(dāng)中多線程和并發(fā)方面的問(wèn)題都是必不可少的一部分。假如源碼分析之掘金概念是中集合的一種實(shí)現(xiàn)。 攻破 JAVA NIO 技術(shù)壁壘 - 后端 - 掘金現(xiàn)在使用NIO的場(chǎng)景越來(lái)越多,很多網(wǎng)上的技術(shù)框架或多或少的使用NIO技術(shù),譬如Tomcat,Jetty。學(xué)習(xí)和掌握NIO技術(shù)已經(jīng)不是一個(gè)JAVA攻城獅...
摘要:探討判斷橫豎屏的最佳實(shí)現(xiàn)前端掘金在移動(dòng)端,判斷橫豎屏的場(chǎng)景并不少見,比如根據(jù)橫豎屏以不同的樣式來(lái)適配,抑或是提醒用戶切換為豎屏以保持良好的用戶體驗(yàn)。 探討判斷橫豎屏的最佳實(shí)現(xiàn) - 前端 - 掘金在移動(dòng)端,判斷橫豎屏的場(chǎng)景并不少見,比如根據(jù)橫豎屏以不同的樣式來(lái)適配,抑或是提醒用戶切換為豎屏以保持良好的用戶體驗(yàn)。 判斷橫豎屏的實(shí)現(xiàn)方法多種多樣,本文就此來(lái)探討下目前有哪些實(shí)現(xiàn)方法以及其中的優(yōu)...
摘要:閉包有多重前端知識(shí)點(diǎn)大百科全書前端掘金,,技巧使你的更加專業(yè)前端掘金一個(gè)幫你提升技巧的收藏集。 Vue全家桶實(shí)現(xiàn)還原豆瓣電影wap版 - 掘金用vue全家桶仿寫豆瓣電影wap版。 最近在公司項(xiàng)目中嘗試使用vue,但奈何自己初學(xué)水平有限,上了vue沒(méi)有上vuex,開發(fā)過(guò)程特別難受。 于是玩一玩本項(xiàng)目,算是對(duì)相關(guān)技術(shù)更加熟悉了。 原計(jì)劃仿寫完所有頁(yè)面,礙于豆瓣的接口API有限,實(shí)現(xiàn)頁(yè)面也有...
閱讀 1695·2023-04-25 20:16
閱讀 3882·2021-10-09 09:54
閱讀 2713·2021-09-04 16:40
閱讀 2527·2019-08-30 15:55
閱讀 843·2019-08-29 12:37
閱讀 2749·2019-08-26 13:55
閱讀 2918·2019-08-26 11:42
閱讀 3164·2019-08-23 18:26