面試 -- 網絡 HTTP

現在面試門檻越來越高,很多開發者對于網絡知識這塊了解的不是很多,遇到這些面試題會手足無措。本篇文章知識主要集中在 HTTP 這塊。文中知識來自 《圖解 HTTP》與維基百科,若有錯誤請大家指出。文章會持續更新。

面試 -- 網絡 TCP/IP

了解 Web 及網絡基礎

對端傳輸

發送端在層與層間傳輸數據時,沒經過一層都會被加上首部信息,接收端每經過一層都會刪除一條首部

多種協議作用

IP 協議,TCP 協議和 DNS 服務在使用 HTTP 協議過程中發揮的作用

簡單的 HTTP 協議

請求報文和響應報文

客戶端像服務器發起請求時會生成一段請求報文,請求報文是由請求方法,URL,協議版本,可選的請求首部字段和內容實體構成。

請求報文

接收到請求的服務器,會將請求內容的處理結構以響應的形式返回。響應報文基本上由協議版本,狀態碼,用以解釋狀態的原因短語,可選的響應首部字段以及實體主體構成。

響應報文

HTTP 是不保存狀態的協議和 Cookie 的簡單介紹

HTTP 協議對于發送的請求和響應不做持久化處理。這時候引入了 Cookie 技術用于狀態管理。Cookie 對用與登錄的狀態管理,沒有 Cookie 這個技術的話,因為 HTTP 不保存狀態,每次打開新網頁都必須再次登錄。

Cookie 會根據響應報文中的 Set-Cookie 字段來通知客戶端自動保存 Cookie。下次請求時會自動發送 Cookie,服務器會比對數據得到狀態結果。

Cookie

Post 和 Get 的區別

先引入副作用和冪等的概念。

副作用指不對服務器上的資源做改變,搜索是無副作用的,注冊是副作用的。

冪等指發送 M 和 N 次請求(兩者不相同且都大于1),服務器上資源的狀態一致。注冊10個和11個帳號是不冪等的,對文章進行更改10次和11次是冪等的。

在規范的應用場景上說,Get 多用于無副作用,冪等的場景,例如搜索關鍵字。Post 多用于副作用,不冪等的場景,例如注冊。

在技術上說:

  • Get 請求能緩存,Post 不能
  • Post 相對 Get 安全一點點,因為Get 請求都包含在 URL 里,且會被瀏覽器保存歷史紀錄,Post 不會,但是在抓包的情況下都是一樣的。
  • Post 可以通過 request body來傳輸比 Get 更多的數據,Get 沒有這個技術
  • URL有長度限制,會影響 Get 請求,但是這個長度限制是瀏覽器規定的,不是 RFC 規定的
  • Post 支持更多的編碼類型且不對數據類型限制

常見狀態碼

常見狀態碼

2XX 成功

  • 200 OK,表示從客戶端發來的請求在服務器端被正確處理
  • 204 No content,表示請求成功,但響應報文不含實體的主體部分
  • 206 Partial Content,進行范圍請求

3XX 重定向

  • 301 moved permanently,永久性重定向,表示資源已被分配了新的 URL
  • 302 found,臨時性重定向,表示資源臨時被分配了新的 URL
  • 303 see other,表示資源存在著另一個 URL,應使用 GET 方法丁香獲取資源
  • 304 not modified,表示服務器允許訪問資源,但因發生請求未滿足條件的情況
  • 307 temporary redirect,臨時重定向,和302含義相同

4XX 客戶端錯誤

  • 400 bad request,請求報文存在語法錯誤
  • 401 unauthorized,表示發送的請求需要有通過 HTTP 認證的認證信息
  • 403 forbidden,表示對請求資源的訪問被服務器拒絕
  • 404 not found,表示在服務器上沒有找到請求的資源

5XX 服務器錯誤

  • 500 internal sever error,表示服務器端在執行請求時發生了錯誤
  • 503 service unavailable,表明服務器暫時處于超負載或正在停機維護,無法處理請求

HTTP 首部

通用首部

指請求報文和響應報文都可以使用的字段

  • Cache-Control
    • no-cache 指客戶端不緩存過期資源
    • no-store 指不進行緩存
    • max-age 指緩存資源的緩存時間比指定的值小,那么客戶端就接受緩存資源,且緩存服務器不對資源有效性進行再次確認
  • Connection 指控制不再轉發給代理的首部字段(Hop-by-hop),管理持久連接
    • close 指服務器像明確斷開連接
    • Keep-Alive 指保存持久連接,HTTP/1.1前默認連接是非持久性的,如需要保存持久連接,需要增加此字段
  • Upgrade 可以用來指定一個完全不同的通信協議,對于這個字段,服務器可以返回101狀態碼

請求首部字段

  • Accept 指用戶代理能夠處理的媒體類型及媒體類型的相對優先級
  • Accept-Encoding 指用來告知服務器用戶代理支持的內容編碼及內容編碼的優先級順序
  • Authorization 指用來告知服務器,用戶代理的認證信息
  • Host 當一個 IP 下存在多個域名時,幫助服務器知道要請求的具體主機
  • User-Agent 會講創建請求的瀏覽器和用戶代理名稱等信息傳達給服務器

HTTPS

HTTPS 是 HTTP 建立在 SSL/TLS 安全協議上的。

在 iOS 中,客戶端本地會存放著 CA 證書,在HTTPS 請求時,會首先像服務器索要公鑰,獲得公鑰后會使用本地 CA 證書驗證公鑰的正確性,然后通過正確的公鑰加密信息發送給服務器,服務器會使用私鑰解密信息。

SSL/TLS握手階段分為五步:
以下引自 阮一峰的網絡日志
第一步,愛麗絲給出協議版本號、一個客戶端生成的隨機數(Client random),以及客戶端支持的加密方法。
第二步,鮑勃確認雙方使用的加密方法,并給出數字證書、以及一個服務器生成的隨機數(Server random)。
第三步,愛麗絲確認數字證書有效,然后生成一個新的隨機數(Premaster secret),并使用數字證書中的公鑰,加密這個隨機數,發給鮑勃。
第四步,鮑勃使用自己的私鑰,獲取愛麗絲發來的隨機數(即Premaster secret)。
第五步,愛麗絲和鮑勃根據約定的加密方法,使用前面的三個隨機數,生成"對話密鑰"(session key),用來加密接下來的整個對話過程。

HTTPS 相對于 HTTP 性能上差點,因為多了 SSL/TLS 的幾次握手和加密解密的運算處理,但是加密解密的運算處理已經可以通過特有的硬件來加速處理。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,247評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,520評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,362評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,805評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,541評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,896評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,887評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,062評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,608評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,356評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,555評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,077評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,769評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,175評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,489評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,289評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,516評論 2 379

推薦閱讀更多精彩內容