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的加密連接TLS或SSL兩種。
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
推薦圖文
圖書類:
-《圖解http》
-《Web之困:現代Web應用安全指南》
文章類:
-http://tools.ietf.org/html/rfc5246
-https://www.cnblogs.com/liuxiannan/p/https.html