HTTP和HTTPS部分知識點

HTTP基本概念

超文本-傳輸-協議

  • 協議
    HTTP是一個用在計算機世界里的協議。它使用計算機可以理解的語言確立了一種計算機之間交流通信的規范(兩個以上的參與者),以及相關的各種控制和錯誤處理方式(行為約定和規范)。
  • 傳輸
    HTTP協議是一個雙向協議。是一個在計算機世界里專門用來在兩點之間傳輸數據的約定和規范
  • 超文本
    HTTP傳輸的內容是超文本。圖片、視頻、壓縮包在HTTP協議看來都是文本。超文本超越普通文本的文本,是文字、圖片、視頻的混合體,最關鍵有超鏈接能從一個超文本跳轉到另一個超文本。HTML就是最常見的超文本。
    HTTP是一個在計算機世界里專門在兩點之間傳輸文字、圖片、音頻、視頻等超文本數據的約定和規范。

HTTP狀態碼

![[file-20250710094349699.png]]

  • 1xx類屬于提示信息,是協議處理中一種中間狀態,實際用的比較少
  • 2xx類狀態碼表示服務器成功處理了客戶端的請求
    • 204Not Content 成功但響應頭沒有body數據
    • 206Partial Content 應用于HTTP分塊下載或斷點續傳,表示響應的body數據不資源全部
  • 3xx狀態碼表示客戶端請求的資源發生變動,需要客戶端用新的URL重新發送請求獲取資源,也就是重定向
    • 301表示永久重定向,需要客戶端用新的URL再次訪問
    • 302臨時重定向,說明請求的資源還在,暫時需要另一個URL來訪問
    • 301和302會在響應頭字段location,指明后續要跳轉的URL,瀏覽器自動重定向到新的URL
    • 304表示資源未修改,表示客戶端可以繼續使用緩存資源用于緩存控制
  • 4xx類狀態碼表示客戶端發送報文有誤,服務器無法處理
    • 400 表示客戶端請求的報文有錯誤,但只是籠統錯誤
    • 403表示服務器禁止訪問資源,不是客戶端請求出錯
    • 404表示請求資源在服務器不存在或沒找到,無法提供給客戶端
  • 5xx表示客戶端請求正確,但是服務器處理時內部發生了錯誤,屬于服務器端的錯誤碼
    • 500與400類型是個籠統通用的錯誤碼,服務器發生了什么錯誤并不知道
    • 501表示客戶端的請求暫時不支持
    • 502表示服務器自身工作正常,但是訪問后端服務器發生錯誤,通常是服務器作為網關或代理時返回的錯誤碼
    • 503表示服務器繁忙暫時無法響應客戶端

HTTP常見的字段

Host:客戶端發送請求時用來指定服務器的域名。有個這個字段可以將請求發往同一臺服務器上的不同網站
Content-Length表明本次回應的數據長度。HTTP協議通過設置回車符,換行符作為HTTP header的邊界,通過Content-Length字段作為HTTP body的邊界,這兩個方式都是為了解決粘包問題。
Connection常用于客戶端要求服務器使用HTTP長連接機制,以便其他請求復用。只要任意一端沒有明確提出斷開連接,則保持TCP連接狀態
http/1.1版本默認開始長連接為了兼容老版本的HTTP,需要指定Connection首部字段的值為Keep-Alive
Content-Type:用于服務器回應時,告訴客戶端,本次數據是什么格式
Content-Encoding說明數據的壓縮方法。表示服務器返回的數據使用什么壓縮格式

GET和POST區別

GET的語義是從服務器獲取指定的資源,這個資源可以可以是靜態的文本,頁面,圖片視頻等。GET請求的參數位置一般是寫在URL中,URL規定智能支持ASCII,所以GET請求的參數只允許ASCII,而且瀏覽器會對URL長度有限制(HTTP協議并沒有對URL的長度有規定)

POST語義是根據請求負荷對指定的資源做出處理,具體的處理方式視資源類型而不同。POST請求攜帶數據的位置一般是寫在報文body中,body中的數據可以是任意格式的數據,只要客戶端和服務端協商好即可,而且瀏覽器不會對body大小做限制

GET和POST方法都是安全和冪等的嗎

  • 在HTTP協議中,安全 指的是不會破壞服務器上的資源
  • 冪等指的是多次執行相同的操作,結果都是相同的
    從RFC規定的語義來看
  • GET方法是安全且冪等的。所以可以對GET請求的數據做緩存,這個緩存就可以做到瀏覽器本身上,也可以做到代理上,而且在瀏覽器中GET請求可以保存為書簽
  • POST會修改服務器上的資源,所以是不安全的,且多次提交數據就會創建多個資源,所以不是冪等的

HTTP緩存技術

HTTP緩存的實現方式

強制緩存和協商緩存
強緩存指的是只要瀏覽器判斷緩存沒有過期,則直接使用瀏覽器的本地緩存,決定是否使用緩存的主動性在于瀏覽器這邊。強緩存利用兩個HTTP響應頭部字段實現的,Cache-Control一個相對時間,Expires是一個絕對時間;Cache-Control優先級高于Expires
協商緩存:這里的兩個字段都需要配合強制緩存中Cache-Control字段來使用,只有在未能命中強緩存的時候才能發起帶有協商緩存字段的請求。

HTTP特性

http/1.1

  • 簡單,基本報文格式是header+body,頭部信息也是key-value簡單文本的形式,頭部信息也是key-value簡單文本的形式,易于理解,講了學習和使用的門檻
  • 靈活易于拓展允許開發人員自定義和擴充。同時HTTP工作在應用層它下層可以隨意變化,HTTPS就是在HTTP和TCP之間加了SSL/TLS;http3.0傳輸協議該用UDP
  • 應用廣泛和跨平臺
    缺點
  • 無狀態,好處服務器不用記憶HTTP狀態,所以不需要額外的資源來記錄狀態信息,能減輕服務器的負擔,能夠把更多的CPU用來對外提供服務壞處在進行有關聯的請求操作時每一步都需要驗證用戶的身份(可用cookie技術解決)
  • 明文傳輸,明文方便閱讀但是毫無隱私容易竊取信息
  • 不安全,不加密傳輸賬號信息易泄露。不驗證通信雙方身份可能遭遇偽裝。無法驗證報文的完整性,可能會被篡改。
    HTTP/1.1性能
    HTTP協議是基于TCP/IP,并且使用請求-應答的通信模式
    1.長連接
    在http1.0時每發起一個請求都要新建一次TCP連接,如果是串行請求,做了無謂的TCP連接建立和斷開,增加通信開銷。HTTP/1.1提出長連接通信方式。只要任意一端沒有明確提出斷開連接,則保持TCP連接狀態。
    2.管道網絡傳輸(沒有被使用)
    即在同一個TCP連接里,客戶端可以發起多個請求,只要第一個請求發送成功不用等響應就可以發送第二個請求,減少整體的響應時間。但是服務器必須按照接收請求的順序發送對這些管道請求的響應。
    3.隊頭阻塞
    當順序發送的請求序列中的一個請求因為某種原因被阻塞時,在后面排隊的所有請求也一同被阻塞,導致客戶端一直收不到數據,這就是隊頭阻塞

HTTP和HTTPS

區別

  • HTTP是超文本傳輸協議,信息明文傳輸,存在安全風險。HTTPS解決了HTTP不安全的缺陷,在HTTP和TCP中加入SSL/TLS,使報文加密傳輸
  • HTTP建立連接簡單,TCP三次握手之后便可進行進行HTTP的報文傳輸,而HTTPS在TCP三次握手之后還要進行SSL/TLS握手,才可進入加密報文傳輸
  • 兩者的默認端口不一樣,HTTP默認端口號是80,HTTPS默認端口號是443
  • HTTPS協議需要向CA申請數字證書,來保證服務器的身份是可信的

HTTPS解決的問題

  • 信息加密,交互信息無法被竊取
  • 校驗機制,無法篡改通信內容,篡改了就不能正常顯示
  • 身份證書,證明淘寶是真的淘寶網
    解決的辦法:
  • 混合加密的方式實現信息的機密性,解決竊聽的風險
  • 摘要算法的方式實現完整性,它能夠為數據生成獨一無二的指紋,指紋用于校驗數據的完整性,解決了篡改的風險
  • 將服務器公鑰放到數字證書中,解決了被冒充的風險
    1.混合加密
    HTTPS采用的是對稱加密和非對稱加密結合的混合加密方式
  • 在通信建立前采用非對稱加密的方式交換會話密鑰
  • 在通信過程中全部使用對稱加密的會話密鑰的方式加密明文數據
    采用混合加密的原因:
  • 對稱加密只使用一個密鑰,運算速度塊,密鑰必須保密,無法做到安全的密鑰交換
  • 非對稱加密的兩個密鑰,公鑰和私鑰,公鑰可以任意分發而私鑰保密,解決了密鑰交換問題但速度慢
    2.摘要算法+數字簽名
    保證傳輸內容不被篡改對內容計算出一個指紋,然后同內容一起傳輸給對方
    收到后接收方對內容計算出指紋跟發送方發送的指紋做一個比較,指紋相同說明內容沒有被篡改否則就可以判斷出內容被篡改了。
    在計算機里會用摘要算法(哈希函數)來計算出內容的哈希值,也就是內容的指紋,這個哈希值是唯一的,且無法通過哈希值推導出內容。
    但是不能保證內容+哈希不會被中間人替換,因為這里缺少對客戶端收到的消息是否來源于服務端的證明(客戶端無法確認消息中的哈希值是否真的是服務端計算的)采用非對稱加密來解決
  • 采用非對稱加密通過私鑰加密公鑰解密方式,確認消息的身份,即數字簽名算法,私鑰加密內容不是內容本身,而是對內容的哈希值加密![[file-20250711212355318.png]]

*3.數字證書

  • 服務器將自己的公鑰注冊到CA
  • CA用自己的私鑰將服務器的公鑰數字簽名并頒發數字證書(數字證書:服務器的公鑰和CA的數字簽名)
  • CA的公鑰實現置入到了瀏覽器或操作系統中
  • 客戶端拿到服務器的數字證書后使用CA的公鑰確認服務器數字證書的真實性
  • 從數字證書獲取到服務器的公鑰后使用它對報文加密后發送

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

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

相關文章

第10講——一元函數積分學的幾何應用

文章目錄定積分計算平面圖形的面積直角坐標系下參數方程下極坐標系下定積分計算旋轉體的體積曲邊梯形繞x軸旋轉一周所得到的旋轉體的體積曲邊梯形繞y軸旋轉一周所得到的旋轉體的體積平面曲線繞定直線旋轉定積分計算函數的平均值定積分計算平面光滑曲線的弧長曲線L繞x軸旋轉一周…

Go從入門到精通(20)-一個簡單web項目-服務搭建

Go從入門到精通(15)-包(package) Go從入門到精通(9)-函數 文章目錄Go從入門到精通(15)-包(package)Go從入門到精通(9)-函數前言gogin…

Python爬蟲實戰:研究python-docx庫相關技術

1. 引言 1.1 研究背景與意義 隨著學術資源數字化程度的提高,科研工作者面臨海量文獻數據的篩選與分析挑戰。傳統人工調研方式效率低下,難以全面捕捉研究領域的動態趨勢。自動化文獻分析系統能夠通過爬蟲技術快速采集多源數據,并通過文本挖掘提取關鍵信息,為研究方向選擇、…

Django中序列化與反序列化

1:序列化:將數據結構或對象狀態轉換為可以存儲或傳輸的格式(如JSON、XML)的過程。在Web開發中,通常是將模型實例(或查詢集)轉換為JSON格式,以便通過HTTP響應發送給客戶端。序列化&am…

【離線數倉項目】——電商域DWD層開發實戰

摘要本文主要介紹了離線數倉項目中電商域DWD層的開發實戰。DWD層是數據倉庫架構中的明細數據層,對ODS層的原始數據進行清洗、規范、整合與業務建模。它具有數據清洗、標準化、業務建模、整合、維度掛載等作用,常見設計特征包括一致性、明細級建模、保留歷…

爬蟲-正則使用

1.模塊選擇用re模塊導入,,最前面加個r,就不用怕轉義了2.模塊使用re.findall使用結果是數組方式呈現re.finditer把結果變成迭代器,從迭代器類中間取數re.searchre.search 只能匹配到第一個識別到的內容re.match3.推薦寫法先預加載完…

python-range函數

文章目錄基本用法重要特性與列表轉換注意事項遍歷回去列表的元素索引range()是Python中用于生成數字序列的內置函數,常用于循環和序列生成。基本用法 range(stop) # 生成0到stop-1的整數序列 range(start, stop) # 生成start到stop-1的整數序列 r…

汽車功能安全-軟件集成和驗證(Software Integration Verification)【目的、驗證輸入、集成驗證要求】9

文章目錄1 目的2 驗證輸入3 軟件集成要求3.1 要求和建議3.2 汽車行業示例(混合動力控制器軟件)4 驗證要求1 目的 軟件集成和驗證階段的核心目標是證明集成后的軟件單元(模塊、組件)已經正確地開發出來,滿足了所有的功…

每天一個前端小知識 Day 27 - WebGL / WebGPU 數據可視化引擎設計與實踐

WebGL / WebGPU 數據可視化引擎設計與實踐🎯 一、為什么前端需要 WebGL / WebGPU? 傳統的圖表庫如 ECharts、Highcharts 基于 Canvas 或 SVG,適合 2D 渲染,但: 當數據量 > 1 萬時,SVG 性能瓶頸明顯&…

JavaScript代碼段注入:動態抓取DOM元素的原理與實踐

1.F12打開網頁說明:以百度網站為例。通過插入代碼塊抓取當前網頁dom元素。2.新代碼段說明:點擊源代碼/來源菜單項下面的代碼段。點擊新代碼段新增代碼段。下面以腳本代碼段#6為例。3.編寫代碼塊說明:編寫javascript代碼,點擊下面的…

Spring Easy

Spring Easy 用途 通過自動配置,實現了一些國內 Spring Boot 開發時需要在 Spring Boot 框架基礎上完成的一些配置工作,可以提升基于 Spring Boot 開發 Web 應用的效率。 安裝 使用 Maven 進行包管理,可以從中央倉庫安裝依賴:…

【Node.js】文本與 pdf 的相互轉換

pdf 轉文本 主要使用 pdf-parse 這個庫,直接識別提取我們 pdf 文件中的文字。 const express require("express"); const fs require("fs"); const PDFParser require("pdf-parse"); const cors require("cors");const…

分布式ID方案

目錄 📊 分布式ID方案核心指標對比 🔍 分方案深度解析 ?? 1. UUID (Universally Unique Identifier) ?? 2. Snowflake (Twitter開源) ?? 3. 美團Leaf 號段模式 Snowflake模式 🔄 4. 百度UidGenerator 🚀 5. CosId …

張量類型轉換

一.前言本章節我們來講解張量的類型轉換,掌握張量的轉換方法,張量的類型轉換也是經常使?的?種操作,是必須掌握的知識點。在本?節,我們主要學習如何將 numpy 數組和 PyTorch Tensor 的轉化?法.二.張量轉換為 numpy 數組使? Te…

JavaEE-初階-多線程初階

概念第一個多線程程序 可以通過查看jdk路徑來找到jdk的控制可以通過jconsole來查看線程。創建線程這是實現多線程的其中一種方法,繼承Thread類,實現run方法,之后實例化繼承了Thread類的MyThread方法,調用start方法,就會…

解釋全連接層的“參數數量”和“計算過程”,保證像看動畫片一樣直觀~

假設場景輸入圖像:一張極小的 灰度圖(即 H2,W2,共4個像素),像素值如圖所示:隱藏層:假設隱藏層也是 (即 H2,W2,共4個神經元),每個神經元用 ( 表示…

DOM編程實例(不重要,可忽略)

文章目錄 簡介 表格增加刪除&#xff0c;效果如下圖 樣式屬性案例 簡介 DOM---表格添加刪除&#xff0c;樣式屬性案例 表格增加刪除&#xff0c;效果如下圖 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><met…

?Windows API 介紹及核心函數分類表

Windows API 介紹? Windows API&#xff08;Application Programming Interface&#xff09;&#xff0c;也稱為WinAPI&#xff0c;是微軟Windows操作系統的核心編程接口。它提供了一系列函數、消息、數據結構、宏和系統服務&#xff0c;允許開發者創建運行在Windows平臺上的應…

Kubernetes Dashboard UI 部署安裝

K8S 集群環境&#xff1a; Ubuntu 24 / K8S 1.28.21. 推薦使用helm 安裝Kubernetes Dashboardsudo snap install helm --classic2. 部署Kubernetes Dashboard# Add kubernetes-dashboard repository helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboar…

python-enumrate函數

文章目錄基本語法基本用法基本遍歷指定起始索引實際應用場景需要索引的循環創建字典映射處理文件行號與range(len())對比注意事項enumerate()是Python內置函數&#xff0c;用于在遍歷序列&#xff08;如列表、元組或字符串&#xff09;時同時獲取索引和值。基本語法 enumerate…