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