【WEB基礎入門】HTTP(S)協議概述


HTTP(S)協議概述

HTTP協議

HTTP(HyperText Transfer Protocol)超文本傳輸協議

定義:

​ -規定了瀏覽器和服務器之間相互通信的規則

​ -萬維網交換信息的基礎

​ -允許將HTML文檔從Web服務器傳送到Web瀏覽器

特點:

​ -HTTP協議建立在TCP協議的基礎之上

​ -HTTP協議是無狀態的

URL與URI

統一資源定位符(Uniform Resource Locator,URL),統一資源名稱(Uniform Resource Name,URN)是URI的子集

Web上地址的基本形式是URI,它有兩種形式:

  • 一種是URL,這是目前URI的最普遍形式

  • 另一種就是URN,這是URL的一種更新形式,URN不依賴於位置,並且有可能減少失效連接的個數。但是其流行還需假以時日,因為它需要更精密軟件的支持。


    易混區分
URL URI
具體名稱 Uniform Resource Lacator,
統一資源定位符
Uniform Resource Identifier,
統一資源標識符
含義 WWW上,每一信息資源都有統一的且唯一的地址
該地址就是URL
廣義上的資源標識,既包括網絡也可涵蓋本地等
凡是標識資源的均可稱為URI
組成 三部分:
【協議/服務方式】
【該資源的主機IP地址(時含端口號)】
【主機資源的具體地址】
e.g. [協議]😕/[主機地址]:(端口)/[路徑]
兩段:
【特定協議】
及【協議內容的語法和語義】
e.g. [協議名]😕/[用戶名]:[密碼]@[服務器地址]:[服務器端口號]/[路徑]?[查詢字符串]#[片段ID]

HTTP方法

常見:

GET:獲取資源

​ -獲取請求頁面的指定消息

​ -請求參數在請求頭

​ -請求長度有限制


POST:傳輸實體主體

​ -獲取請求頁面的指定消息

​ -請求參數在請求正文


HEAD:(只)返回報文首部


OPTIONS:詢問支持的方法


PUT:傳輸文件

*但是實際上大多使用POST方式上傳


DELETE:刪除文件


TRACE:類比ping形式的請求


支持版本:

方法 說明 支持的HTTP協議版本
GET 獲取資源 1.0、1.1
POST 傳輸實體主體 1.0、1.1
PUT 傳輸文件 1.0、1.1
HEAD 獲得報文首部 1.0、1.1
DELETE 刪除文件 1.0、1.1
OPTIONS 詢問支持的方法 1.1
TRACE 追蹤路徑 1.1

HTTP狀態碼

常見狀態碼:

2XX-成功 表示正常請求處理完畢✅

​ 200:OK,客戶端請求成功

​ 204:No Content,請求處理成功,但是沒有資源返回(頁面不更新)

​ 206:Partial Content,客戶端進行了范圍請求(資源一部分請求)


3XX-重定向 需要進行附加操作以完成請求🚧

​ 301:Move Permanently,永久性重定向,表示資源已經被分配新的URL,以后應使用資源現在所指的URL

*注意:對於某些使用 HTTP/1.0 協議的瀏覽器,當它們發送的 POST 請求得到了一個301響應的話,接下來的重定向請求將會變成 GET 方式。

​ 302:Move Temporarily,臨時重定向,表示資源已經被分配了新的URI,希望用戶(本次)使用新的URI

​ 304,Not Modified,服務器資源未改變,可直接使用未過期的緩存(無關)


4XX-客戶端錯誤 服務器無法處理請求❌

​ 400:Bad Request,請求語法中存在報文錯誤,需要修改再次發送

​ 401:Unauthorized,該狀態碼表示需要通過HTTP認證

​ 403:Forbidden,請求訪問的資源服務拒絕

​ 404:Not Found,服務器上沒有找到資源


5XX-服務器錯誤 服務器處理請求錯誤🚫

​ 500:Internal Sever Error,服務器內部錯誤(PHP.INI關閉了display_errors,一般在服務器端源代碼出現錯誤時出現)

​ 502:Bad Gateway,作為網關或者代理工作的服務器嘗試執行請求時,從上游服務器接收到無效響應

​ 503:Service Unavailable,服務器當前不能處理客戶端的請求(超載或停機維護)


​ 600:源站沒有返回響應頭,只能返回實體內容


狀態碼總結:

狀態碼 類別 原因
1XX 信息性 請求正在處理
2XX 成功 請求正常處理完畢
3XX 重定向 需要進行附加操作以完成請求
4XX 客戶端錯誤 服務器無法處理請求
5XX 服務器錯誤 服務器處理請求錯誤

HTTP 首部

通用字段

​ Cache-Con:控制緩存

​ connection:連接的管理

​ Date:創建報文的日期時間


請求字段

​ Host:請求資源的主機和端口號

​ User-Agent:客戶端操作系統,瀏覽器等其他信息

​ Referer:訪問當前頁面的上一個頁面

​ Cookie:請求者的身份憑證

​ Accept:客戶端希望接收的MIME類型消息

​ Accept-Charset:指定客戶端接收的字符集


響應字段

​ Server:服務器所使用的Web服務名字

​ Set-Cookie:向客戶端設置Cookie

​ Last-Modified:通知瀏覽器資源修改的最后時間

​ Content-Length:正文長度

​ Location:引導用戶轉向與請求URI不同的資源(重定向新資源位置)


實體字段

​ Allow:通知客戶端能夠支持的HTTP方法

​ Content-Encoding:告知客戶端服務器對實體主體部分采用的字符編碼

​ Content-Language:告知客戶端實體部分采用的語言

​ Content-Location:給出與報文主體部分相對應實際的URI

​ Content-Type:說明實體部分對象的媒體類型


HTTP請求過程

DNS查詢

-DNS解析(域名解析服務器)

​ a)首先會搜索瀏覽器自身的DNS緩存(緩存時間比較短,大概只有1分鍾,且只能容納1000條緩存)

​ b)如果瀏覽器自身的緩存里面沒有找到,那么瀏覽器會搜索系統自身的DNS緩存

​ c)如果還沒有找到,那么嘗試從 hosts文件里面去找

​ d)在前面三個過程都沒獲取到的情況下,就遞歸地去域名服務器去查找

建立TCP連接

-TCP連接建立(三次握手)

  拿到域名對應的IP地址之后,User-Agent(一般指瀏覽器)會以一個隨機端口(1024<端口<65535)向服務器的WEB程序(常用的有httpd,nginx)等的80端口。

​ 這個連接請求(原始的http請求經過TCP/IP4層模型的層層封包)到達服務器端后(這中間有各種路由設備,局域網內除外),進入到網卡,然后是進入到內核的TCP/IP協議棧(用於識別連接請求,解封包,一層一層的剝開),還有可能要經過Netfilter防火牆(屬於內核的模塊)的過濾,最終達到WEB程序,最終建立了TCP/IP的連接

HTTP請求

-發起HTTP請求(建立連接后)

​ HTTP請求報文由三部分組成:請求行,請求頭、空格、請求正文

​ 請求行:用於描述客戶端的請求方式(GET/POST等),請求的資源名稱(URL)以及使用的HTTP協議的版本號

​ 請求頭:用於描述客戶端請求哪台主機及其端口,以及客戶端的一些環境信息等

​ 空行:空行就是\r\n (POST請求時候有)

​ 請求正文:當使用POST等方法時,通常需要客戶端向服務器傳遞數據。這些數據就儲存在請求正文中(GET方式是保存在URL地址后面,不會放到這里)

關閉TCP連接

-TCP鏈接關閉(四次揮手)

​ Web服務器向瀏覽器發送了請求數據,它就要關閉TCP連接

​ 在頭部添加代碼connection:keep-alive則會仍然保持打開狀態


HTTPS

認識HTTPS

​ HTTPS(Hyper Text Transfer Protocol Secure)是一種通過計算機網絡進行安全通信的傳輸協議。HTTPS經由HTTP進行通信,但是利用SSL/TLS來加密數據包。目的是提供對網站服務器的身份認證(防冒充),保護交換數據的隱私(防竊聽)與完整性(防篡改)。實現方式有通過建立基於HTTP的加密連接TLSSSL兩種。

​ HTTP協議和安全協議同屬於應用層。具體一點來說,安全協議工作在HTTP之下,傳輸層之上:安全協議像運行HTTP的進程提供一個類似TCP的套接字,供進程向其中注入報文,隨后安全協議將報文加密並注入運輸層套接字;或是從運輸層獲取加密報文,解密后交給對應進程。嚴格來說,HTTPS並不是一個單獨的協議,而是對工作在一加密連接(TLS或SSL)上的常規HTTP協議的稱呼。

​ HTTPS報文中的任何東西都被加密,包括所有的報頭和荷載。除了可能的選擇密文攻擊之外,一個攻擊者所能知道的只有在兩者有一連接這一事實。

TLS/SSL

​ 安全傳輸層協議 TLS(Transport Layer Security)及其前身 安全套接字協議 SSL(Secure Sockets Layer)是為互聯網提供安全及數據完整性保障的加密方式。

HTTPS流程

TLS協議關鍵點

(具體詳細過程、字段含義可根據實際Https數據流跟蹤分析)

1.客戶端握手請求

·Client Hello

​ -Random 發送隨機數1(與服務器端共同生成)

​ -Session ID 會話ID,身份標記

​ -Cipher Suite 支持密碼的套件

​ -Compression Method 壓縮方法

2.服務端端握手回應

·Server Hello

​ -Random 發送隨機數2(共同生成)

​ -Session ID 會話ID(初次訪問或已過期回發為0)

​ -Cipher Suite 從客戶端支持的密碼套件中指定一種

​ -Compression Method 指定壓縮方法(若為空值null或0則為不壓縮)

·Certificate

​ -Certificates 發送證書鏈,供客戶端依據證書路徑進行驗證

·Server Key Exchange,Server Hello Done

​ -Server Key Exchange 包含密鑰交換算法所需要的額外參數

​ -Server Hello Done 表征握手結束

3.客戶端密鑰交換,准備完成

·Client Key Exchange,Change Cipher Spec,Encrypted Handshake Message

​ -Client Key Exchange 交換共享公鑰

​ -Change Cipher Spec 進入准備加密狀態

​ -Encrypted Handshake Message 告知完成客戶端所有握手准備內容

4.服務端准備完成

·(Server)New Session Ticket,Change Cipher Spec,Encrypted Handshake Message

​ -New Session Ticket 更新客戶端存儲的session狀態

​ -Change Cipher Spec 進入准備加密狀態

​ -Encrypted Handshake Message 告知完成服務端所有握手准備內容

5.數據交換

·Application Data


HTTPS-TLS
HTTPS-TLS
zOxygeNz
2020-07
TLS [HandShake] (Full) (session ID,CS,Comp) (extensions) [ChangeCipherSpec] Finished ServerHello (session ID,CS,Comp) (extensions) Certificate(Server) ServerKeyExchange Certificate(Server) CertificateRequest ServerHelloDone *Certificate(Client) ClientKeyExchange CertificateVerfy [ChangeCipherSpec] Finished ClientHello (Protected)Data Exchange Client Server

推薦圖文

圖書類:

-《圖解http》

-《Web之困:現代Web應用安全指南》

文章類:

-http://tools.ietf.org/html/rfc5246

-https://www.cnblogs.com/liuxiannan/p/https.html

-https://github.com/yorkeyanyy/Halforest-Field

-https://www.freebuf.com/articles/network/202504.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM