HTTP 協議知識點總結(一)

在許多大公司的面試中,經常會重點考察面試者的計算機基礎知識。所以對于在計算機網絡、數據結構、操作系統上花費更多的時間和精力,是完全值得的。HTTP 作為應用最為廣泛的網絡協議,不論前端和后端都需要經常接觸。最近決定對 HTTP 進行了一些學習,所以整理一份筆記并分享給大家。

HTTP (HyperText Transfer Protocol) 通常被我們稱為超文本傳輸協議,又譯為超文本轉移協議。它的命名如何,不需要過于糾結,我們更應該重視它的內容。

HTTP 與 TCP/IP

OSI 模型與 TCP/IP 模型對比
OSITCP/IP
應用層
表示層
會話層
應用層
傳輸層傳輸層
網絡層網絡層
數據鏈路層
物理層
鏈路層
TCP/IP 四層模型分析

HTTP 是 TCP/IP 協議內部的一個子集,在了解它之前我們需要先了解一下 TCP/IP 相關的知識。TCP/IP(Transmission Control Protocol/Internet Protocol)協議分為應用層、傳輸層、網絡層、鏈路層四層,我簡單的來總結舉例一下。

應用層

應用層向用戶提供一系列的應用服務。
比如我們熟悉的 DNS(Domain Name Service,域名解析)、FTP(File Transfer Protocol,文件傳輸協議),當然還有我們要講的 HTTP 協議。
有時在 App Store 無法下載應用時,就經常會把 DNS 設置為谷歌的 8.8.8.8 或者國內的 114.114.114.114,這些都是比較常見的服務。

傳輸層

傳輸層提供連接兩臺計算機之間的數據傳輸。
傳輸層有兩種協議: TCP(Transmission Control Protocol,傳輸控制協議) UDP(User Datagram protocol,用戶數據報協議)

網絡層

網絡層規定了通過什么樣的方式將數據包傳遞給對方。 網絡層協議的代表包括: IP(Internet Protocol,互聯網協議)
ICMP(Internet Control Message Protocol,互聯網消息控制協議)

因為 IP 并不是完全可靠,無法保證數據被送達。所以需要 ICMP 傳輸出錯報告控制信息。ICMP 最著名的應用應該就是 ping 了,比如我們上不去某個網站,就可以在終端輸入測試一下。

ping www.baidu.com
// 然后就可以看到一些返回值
PING www.a.shifen.com (180.149.132.151): 56 data bytes
64 bytes from 180.149.132.151: icmp_seq=0 ttl=55 time=31.431 ms
Request timeout for icmp_seq 1
64 bytes from 180.149.132.151: icmp_seq=2 ttl=55 time=30.530 ms
64 bytes from 180.149.132.151: icmp_seq=3 ttl=55 time=30.233 ms    
復制代碼

鏈路層

鏈路層用來鏈接網絡的硬件部分。
網絡層傳過來的數據在這里被加工成了可被物理層傳輸的結構包——幀。幀中包括 MAC 地址(Media Access Control)和一些其他信息。放一幅在網上找的圖給大家展示一下。

一個訪問百度網站的例子
  1. 在瀏覽器輸入 http://www.baidu.com。
  2. DNS 通過你輸入的地址,找到百度的 IP 地址 14.215.177.38。
  3. 通過 ARP 協議尋找 MAC 地址,建立 TCP 連接。
  4. 三次握手
    • 發送端:發送帶有 SYN 的數據包
    • 接收端:應答,發送帶有 SYN/ACK 的數據包
    • 發送端:應答,發送帶有 ACK 的數據包
  5. 通過返回的數據包顯示網頁

這個例子簡單總結一下,深入的話也寫不完(攤手)。

常見的 HTTP 方法

方法說明
GET獲取資源
POST傳輸實體主體
PUT傳輸替換目標資源
DELETE刪除目標資源
HEAD獲取報文首部
OPTIONS獲取支持的方法
常見方法分析

GET 與 POST 的區別

這也算是面試比較常問的問題了,這里放上一個表格。

GETPOST
后退按鈕/刷新無害數據會被重新提交(瀏覽器會提示)
書簽/緩存/歷史X
編碼類型application/x-www-form-urlencodedapplication/x-www-form-urlencoded 或 multipart/form-data。為二進制數據使用多重編碼
數據長度限制URL 的最大長度是 2048 個字符無限制
數據類型限制只允許 ASCII 字符無限制
可見性數據在 URL 中對所有人可見、請求會保存在歷史記錄數據保存在主體中、請求不會保存在歷史記錄

PUT 請求

PUT?與?POST 方法的區別在于,PUT方法是冪等的:調用一次與連續調用多次是等價的(即沒有副作用),而連續調用多次POST方法可能會有副作用,比如將一個訂單重復提交多次。

DELETE 請求

如果?DELETE方法成功執行,那么可能會有以下幾種狀態碼:

  • 狀態碼 ?202?(Accepted) 表示請求的操作可能會成功執行,但是尚未開始執行。
  • 狀態碼?204?(No Content) 表示操作已執行,但是無進一步的相關信息。
  • 狀態碼 ?200?(OK) 表示操作已執行,并且響應中提供了相關狀態的描述信息。

HEAD 請求

HEAD 請求就如同前面表格所說的是獲取報文首部,該請求方法的一個使用場景是在下載一個大文件前先獲取其大小再決定是否要下載, 以此可以節約帶寬資源。

OPTIONS 請求

OPTIONS 請求就是用于獲取目的資源所支持的通信選項,平時在做 ionic、Angular 的時候,它就經常會在請求前自動調用一個 OPTIONS 方法。

HTTP 狀態碼

簡單的說,HTTP 狀態碼就是描述返回的請求結果。 這里還是拿一個表格展示一下,由于種類比較多,所以只列舉種類,不進行完全列舉。

類別原因
1xxInformational(信息性狀態碼)接收的請求正在處理
2xxSuccess(成功狀態碼)請求正常處理完畢
3xxRedirection(重定向狀態碼)需要進行附加操作以完成請求
4xxClient Error(客戶端錯誤狀態碼)服務器無法處理請求
5xxServer Error(服務端錯誤狀態碼)服務器處理請求出錯

HTTP 報文首部字段

HTTP 報文的首部字段,主要是用來傳遞額外的重要信息

一個簡單的請求例子

前面講了這么多,這里結合請求方法、狀態碼等舉一個例子。

發起請求:

GET / HTTP/1.1
Request URL: https://www.baidu.com/favicon.ico
Host: www.baidu.com
Accept-Language: zh-CN
復制代碼

服務端返回:

HTTP/1.1 200 OK
Date: Sat, 07 Apr 2018 02:17:48 GMT
Server: Apache
Last-Modified: Mon, 02 Apr 2018 09:39:34 GMT
Accept-Ranges: bytes
Content-Length: 984
Content-Type: image/x-icon
復制代碼

現在我們分析一下這個例子。

發起請求

// 請求方法 / HTTP 版本號
GET / HTTP/1.1
// 請求地址
Request URL: https://www.baidu.com/favicon.ico
// 請求資源所在服務器
Host: www.baidu.com
// 優先選擇的語言(自然語言)
Accept-Language: zh-CN
復制代碼

服務端返回

// HTTP 版本、HTTP 狀態碼 200
HTTP/1.1 200 OK
// 創建報文的日期
Date: Sat, 07 Apr 2018 02:17:48 GMT
// HTTP 服務器的安裝信息
Server: Apache
// 資源的最后修改時間
Last-Modified: Mon, 02 Apr 2018 09:39:34 GMT
// 支持字節范圍請求
Accept-Ranges: bytes
// 實體主體的大小
Content-Length: 984
// 實體主體的類型
Content-Type: image/x-icon
復制代碼

HTTP 首部字段種類非常多,該例子舉例了常用的一部分,想了解更多可以研究 MDN HTTP Headers 文檔 。

目前里面中文翻譯不夠完整,翻譯水平高的朋友可以點擊幫忙完善一下,為開源事業出一份力:)

這次就總結到這里了,由于水平有限,難免有些許紕漏。有什么錯誤請指出,不勝感激。

參考文章

為何HTTP被翻譯為“超文本傳輸協議”是一次歷史上的重大翻譯錯誤? HTTP 協議入門-阮一峰 TCP/IP 協議 百度百科 ping 原理與ICMP協議 漫談網絡通信——從OSI網絡模型到TCP/IP協議族 HTTP 方法-w3school HTTP 請求方法-MDN 《圖解HTTP》

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452124.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452124.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452124.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

階乘的精確值 大數問題

輸入不超過1000的正整數n,輸出n的階乘的精確結果 樣例輸入:30 樣例輸出:265252859812191058636308480000000 分析: 為了保存結果,需要分析1000!有多大。用計算器算一算不難知道,1000&#x…

Diango博客--22.Django Haystack 全文檢索與關鍵詞高亮

文章目錄1. Django Haystack 簡介2. 安裝 django-haystack和elasticsearch 23. 構建容器來運行 elasticsearch 服務4. 配置 Haystack5. 處理數據6. 配置 URL7. 修改搜索表單8. 創建搜索結果頁面9. 高亮關鍵詞10. 建立索引文件11. 修改搜索引擎為中文分詞12. 防止標題被截斷13. …

Vim和Vi的常用命令

Vim 文本編輯器 1、Vim 和 Vi: 兩者都是多模式編輯器; Vim 是 Vi 升級版,再兼容 Vi 所有指令的同時增加了一些新功能支持; 特點: 語法加亮:使用不同的顏色加亮代碼; 多級撤銷:Vi 只能撤銷一次操…

oracle中 sql語句:start with .. connect by prior.. 用法

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 我們經常會將一個比較復雜的目錄樹存儲到一個表中。或者將一些部門存儲到一個表中,而這些部門互相有隸屬關系。這個時候你就…

多重繼承和單重繼承

多重繼承(Multiple Inheritance, MI)指的是一個類別可以同時從多于一個父類繼承行為與特征的功能。與單一繼承相對,單一繼承指一個類別只可以繼承自一個父類。

3分鐘學會SVN:SVN快速上手

選擇SVN客戶端 Windows平臺 TortoiseSVN:也叫烏龜SVN,Windows上最流行的SVN客戶端,安裝后你的右鍵就會多了幾個SVN相關的菜單,非常方便Eclipse插件:在Eclipse中集成SVN插件,適合使用Eclipse開發的用戶&…

flask框架(三):flask配置文件

flask中的配置文件是一個flask.config.Config對象(繼承字典),默認配置為:{DEBUG: get_debug_flag(defaultFalse), 是否開啟Debug模式TESTING: False, …

C語言可變參數全解

cstdarg(stdarg.h)可變參數的處理 這個頭文件定義了一些宏,可以通過這些宏來逐個訪問被調函數的沒有名字的參數列表,這些參數的個數 和類型都是不知道的。 一個函數可以通過包含一個逗號和三個點(,...)接收可變數量的額外參數,而不需…

Diango博客--23.單元測試:測試 blog 應用

文章目錄1. 前言2. 搭建測試環境3. 測試模型4. 測試視圖5. 測試模板標簽6. 測試輔助方法和類1. 前言 我們博客功能越來越來完善了,但這也帶來了一個問題,我們不敢輕易地修改已有功能的代碼了! 我們怎么知道代碼修改后帶來了預期的效果&…

一般與特殊結構關系 整體與部分結構關系

一般與特殊結構關系又稱為分類結構關系,是“is a”關系。 例如:飛機與交通工具都是類,飛機是一種特殊的交通工具。他們之間是“is a”關系。 上層類體現一般性和共性,下層類體現特殊性和具體性。 用這種結構關系來描述現實世界…

簡單版:帶干擾線的圖形驗證碼生成

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1.生成工具類; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; im…

圖片格式轉換工具與方法

2019獨角獸企業重金招聘Python工程師標準>>> 使用ffmpeg進行格式轉換 1.jpg 轉 I420 ffmpeg -i 001.jpg -pix_fmt yuv420p 001_I420_fromJPG.yuv 2.png 轉 I420 ffmpeg -i 222.png -pix_fmt yuv420p 222_I420_fromPNG.yuv 3.bmp 轉 I420 ffmpeg -i xxx.bmp -pix_fmt…

Diango博客--24.單元測試:測試評論應用

文章目錄1. 前言2. 數據基類3.測試 Comment Model4. 測試視圖函數5. 測試模板標簽1. 前言 comments應用的測試和blog應用測試的套路是一樣的。 先來建立測試文件的目錄結構。首先在 comments 應用的目錄下建立一個名為 tests 的 Python 包,然后刪除 comments 應用…

面向對象設計使用語言選擇

面向對象設計的結果既可以用面向對象語言、也可以用非面向對象語言實現。 使用面向對象語言時,由于語言本身充分支持面向對象概念的實現,因此,編譯程序可以自動把面向對象概念映射到目標程序中。 使用非面向對象語言編寫面向對象程序&#xf…

結合shiro 的圖形驗證碼生成

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 在做用戶登錄功能時,很多時候都需要驗證碼支持,驗證碼的目的是為了防止機器人模擬真實用戶登錄而惡意訪問&#…

利用C語言實現計算機圖像處理的方法

1.圖像平移 圖像平移只是改變圖像在屏幕上的位置,圖像本身并不發生變化。假設原圖像區域左上角坐標為(x0, y0),右下角坐標為(x1, y1),將圖像分別沿x和y軸平移dx和dy,則新圖像的左上角坐標為(x0 + dx, y0 &a…

E24- please install the following Perl modules before executing ./mysql_install_db

2019獨角獸企業重金招聘Python工程師標準>>> [roott-cet7 scripts]# ./mysql_install_db --basedir/usr/local/mysql/ --datadir/app/data/ --usermysql FATAL ERROR: please install the following Perl modules before executing ./mysql_install_db: Data::Dumpe…

SpringMVC異常報406 (Not Acceptable)的解決辦法

使用SpsringMVC&#xff0c;使用restEasy調試&#xff0c;controller請求設置如下&#xff1a; Java代碼 RequestMapping(value"/list",methodRequestMethod.GET,producesMediaType.APPLICATION_JSON_VALUE) ResponseBody public List<EditTimeout> list()…

Diango博客--25.使用Coverage統計測試覆蓋率

文章目錄1. 前言2. 安裝 Coverage3. 簡單配置 Coverage4. 運行 Coverage5. 完善 Coverage 配置6. 生成 HTML 報告7. 完善單元測試1. 前言 我們完成了對 blog 應用和 comment 應用這兩個核心 app 的測試。現在我們想知道的是究竟測試效果怎么樣呢&#xff1f;測試充分嗎&#x…

面向對象語言的優點

1.一致的表達方法 從前面章節的講述中可以知道&#xff0c;面向對象開發基于不隨時間變化的、一致的表示方法。這種表示方法應該從問題域到OOA&#xff0c;從OOA到OOD&#xff0c;最后從OOD到面向對象編程(OOP)&#xff0c;始終穩定不變。 一致的表示方法&#xff1a; 既有利…