網絡原理--HTTPHTTPS

目錄

一、HTTP

1.1 HTTP是什么

1.2 HTTP協議的工作過程

1.3 HTTP協議格式

1.3.1 抓包工具的使用

1.3.2 抓包結果

1.4 HTTP請求

1.4.1 URL

1.4.2 認識“方法” (method)

1.4.3 認識請求“報頭”(header)

1.4.4 認識請求“正文”(body)

1.5 HTTP 響應詳解

1.5.1 HTTP 狀態碼

1.5.2 響應“報頭”(header)

1.5.3 響應“正文”(body)

二、HTTPS

2.1 HTTPS的工作過程


一、HTTP

1.1 HTTP是什么

HTTP(全稱“超文本傳輸協議”)是一種應用非常廣泛的 應用層協議

?我們平時打開一個網站,就是通過HTTP協議來傳輸數據的。

1.2 HTTP協議的工作過程

當我們在瀏覽器中輸入一個“網址”,此時瀏覽器就會給對應的服務器發送一個HTTP請求,對應的服務器收到這個請求經過計算處理,就會返回一個HTTP響應。

事實上,當我們訪問一個網站的時候,可能涉及布置一次的HTTP請求/響應的過程。

可以通過瀏覽器的開發者工具來觀察這個詳細的過程。

當前搜狗主頁是利用了HTTPS協議進行通信的,HTTPS是在HTTP的基礎上做了一個加密解密的工作后面再詳細介紹。

1.3 HTTP協議格式

HTTP是一個文本格式的協議,可以通過瀏覽器的開發者工具或者抓包工具抓包來查看HTTP請求/響應的細節。

1.3.1 抓包工具的使用

這里以Fiddler為例。

左側窗口顯示了所有的HTTP請求/響應,可以選中某個請求查看詳情。

右側上方顯示了HTTP請求的報文內容(切換到RAW標簽頁可以看到詳細的數據格式)

右側下方顯示了HTTP響應的報文內容(切換到RAW標簽頁可以看到詳細的數據格式)

請求和響應的詳細數據,可以通過右下角的View in Notepad 通過記事本打開

1.3.2 抓包結果

以下是一個HTTP請求/響應的抓包結果

首行:[方法] + [url] + [版本]

Header:請求的屬性,冒號分隔的鍵值對;每組數據之間使用 \n 分割;遇到空行表示Header部分結束。

Body:空行后面的內容都是Body。Body允許空字符串,如果Body存在,則在Header部分中有一個Content-Length屬性來標識Body的長度

HTTP響應

首行:[版本號] + [狀態碼] + [狀態碼解釋]

Header:請求的屬性,冒號分隔的鍵值對;每組數據之間使用 \n 分割;遇到空行表示Header部分結束。

Body: 空行后面的內容都是Body. Body允許為空字符串. 如果Body存在, 則在Header中會有?個Content-Length屬性來標識Body的長度; 如果服務器返回了?個html頁面, 那么html頁面內容就是
在body中.

?HTTP 協議并沒有規定報頭部分的鍵值對有多少個. 空行就相當于是 "報頭的結束標記", 或者是
報頭和正文之間的分隔符".
HTTP 在傳輸層依賴 TCP 協議, TCP 是面向字節流的. 如果沒有這個空行, 就會出現 "粘包問題".

1.4 HTTP請求

1.4.1 URL

平時我們俗稱的“網址”其實就是一個URL。

關于query string :query string 中的內容是鍵值對結構,其中的 key 和 value 的取值和個數,完全由程序員自己約定的,我們可以通過這樣的方式來定制傳輸我們需要的信息給服務器。

1.4.2 認識“方法” (method)

GET方法?

GET方法是最常用的HTTP方法,常用于獲取服務器的某個資源。在瀏覽器中直接輸入URL,此時瀏覽器就會發出一個GET請求

在上面的抓包結果中可以看到最上面的

是通過瀏覽器地址欄發送的get請求。

選中這條觀察請求的詳細結果:

GET https://www.sogou.com/ HTTP/1.1
Host: www.sogou.com
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/w
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: SUID=19AA8B7B6E1CA00A000000005F9A2F76; SUV=1603940214073598; pgv_pvi=266

GET請求的特點:

首行第一部分為GET

URL的query string 可以為空也可以不為空

header由若干個鍵值對結構

body部分為空

1.4.3 認識請求“報頭”(header)

header 的整體格式也是“鍵值對” 的結構

Host 表示服務器主機的地址和端口

Content-Length 表示body中數據的長度

Content-Type 表示請求body中的數據格式。常見選項:

application/x-www-form-urlencoded: form 表單提交的數據格式. 此時 body 的格式形如:
?

title=test&content=hello

multipart/form-data: form 表單提交的數據格式(在 form 標簽中加上enctyped="multipart/form-data" . 通常用于提交圖片/文件. body 格式形如:

Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3Trw
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--

application/json: 數據為 json 格式. body 格式形如:
?

{"username":"123456789","password":"xxxx","code":"jw7l","uuid":"d110a05ccde64b16"}

User-Agent 表示瀏覽器/操作系統的屬性

Referer 表示這個頁面是從哪個頁面跳轉過來的。如果直接在瀏覽器輸入URL或者直接通過收藏夾訪問是沒有 Referer 的。

Cookie 中存儲了一個字符串,這個數據可能是客戶端(網頁)自行通過JS寫入的,也可能來自于服務器(服務器在HTTP響應的header中通過set-cookie字段給瀏覽器返回數據)。往往可以通過這個字段實現“身份標識”的功能。可以通過抓包觀察登陸的過程。

1.4.4 認識請求“正文”(body)

正文中的內容格式和header 中的 content-type 密切相關。上面也羅列了三種常見情況。

1.5 HTTP 響應詳解

1.5.1 HTTP 狀態碼

狀態碼表示訪問一個頁面的結果(是訪問成功還是失敗還是其他的一些情況...)

以下為一些常見的狀態碼

200 OK 這是最常見的一個狀態碼,表示訪問成功

404 Not Found 沒有找到資源

403 Forbidden 表示訪問被拒絕,有的頁面需要一些權限才能夠訪問(登錄后才能訪問),如果用戶沒有登陸直接訪問,就容易見到 403

405 Method Not Allowed 前面我們已經學習了 HTTP 中所支持的方法,但是對方的服務器不一定支持所有的方法

500 Internal Server Error 服務器出現內部錯誤,一般是服務器的代碼執行過程中遇到了一些特殊情況。

504 Gateway Timeout 當服務器負載比較大的時候,服務器處理單條請求的時候耗時就會比較長,就很可能會出現超時的情況。

302 Move temporarily 臨時重定向。

301 Moved Permanently 永久重定向。

1.5.2 響應“報頭”(header)

響應報頭的基本格式和請求報頭的格式基本?致.

類似于 Content-Type , Content-Length 等屬性的含義也和請求中的含義?致.

響應中的 Content-Type 常見取值有以下幾種:

?text/html : body 數據格式是 HTML

?text/css : body 數據格式是 CSS

?application/javascript : body 數據格式是 JavaScript

?application/json : body 數據格式是 JSON

1.5.3 響應“正文”(body)

text/html:

Server: nginx/1.17.3
Date: Thu, 10 Jun 2021 07:25:09 GMT
Content-Type: text/html; charset=utf-8
Last-Modified: Thu, 13 May 2021 09:01:26 GMT
Connection: keep-alive
ETag: W/"609ceae6-3206"
Content-Length: 12806
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible
body,
#app {
height: 100%;
margin: 0px;
padding: 0px;
}
.chromeframe {
margin: 0.2em 0;
background: #ccc;
color: #000;
padding: 0.2em 0;
}
#loader-wrapper {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 999999;
}
......

text/css:

HTTP/1.1 200 OK
Server: nginx/1.17.3
Date: Thu, 10 Jun 2021 07:25:09 GMT
Content-Type: text/css
Last-Modified: Thu, 13 May 2021 09:01:26 GMT
Connection: keep-alive
ETag: W/"609ceae6-3cfbe"
Content-Length: 249790
@font-face{font-family:element-icons;src:url(../../static/fonts/element-icons.53
......

application/JavaScript

HTTP/1.1 200 OK
Server: nginx/1.17.3
Date: Thu, 10 Jun 2021 07:25:09 GMT
Content-Type: application/javascript; charset=utf-8
Last-Modified: Thu, 13 May 2021 09:01:26 GMT
Connection: keep-alive
ETag: W/"609ceae6-427d4"
Content-Length: 272340
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["app"],{0:function(t,
......

application/json:

HTTP/1.1 200
Server: nginx/1.17.3
Date: Thu, 10 Jun 2021 07:25:10 GMT
1 2 3Content-Type: application/json;charset=UTF-8
Connection: keep-alive
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
vary: accept-encoding
Content-Length: 12268
{"msg":"操作成功","code":200,"permissions":[] }

二、HTTPS

HTTPS 也是應用層協議,是在HTTP協議的基礎上引入了一個加密層。

HTTP協議內容都是按照文本的方式明文傳輸的,這就導致在傳輸過程中會出現被篡改的情況。臭名昭著的“運營商劫持”。就比如你下載一個天天動聽,未被劫持的情況下你點擊下載按鈕就會彈出天天動聽的下載鏈接,如果已被劫持就會彈出QQ瀏覽器的下載鏈接。

由于我們通過網絡傳輸的任何數據包都會經過運營商的網絡設備,那么運營商的網絡設備就可以解析出你傳輸的數據內容,并進行篡改。點擊 "下載按鈕", 其實就是在給服務器發送了?個 HTTP 請求, 獲取到的 HTTP 響應其實就包含了該 APP 的下載鏈接. 運營商劫持之后, 就發現這個請求是要下載天天動聽, 那么就自動的把交給用戶的響應給篡改成 "QQ瀏覽器" 的下載地址了.

2.1 HTTPS的工作過程

既然要保證數據安全,就需要進行“加密”。

網絡傳輸中不再直接傳輸明文了,而是加密后生成的“密文”。

加密的方法有很多,但是大致可以分為對稱加密非對稱加密。

HTTPS加密完整流程:

HTTPS ?作過程中涉及到的密鑰有三組.

第?組(非對稱加密): 用于校驗證書是否被篡改. 服務器持有私鑰(私鑰在注冊證書時獲得), 客戶端持有公鑰(操作系統包含了可信任的 CA 認證機構有哪些, 同時持有對應的公鑰). 服務器使用這個私鑰對證書的簽名進行加密. 客戶端通過這個公鑰解密獲取到證書的簽名, 從而校驗證書內容是否是篡改過.

第?組(非對稱加密): 用于協商生成對稱加密的密鑰. 服務器生成這組 私鑰-公鑰 對, 然后通過證書把公鑰傳遞給客戶端. 然后客戶端用這個公鑰給生成的對稱加密的密鑰加密, 傳輸給服務器, 服務器通過私鑰解密獲取到對稱加密密鑰.

第三組(對稱加密): 客戶端和服務器后續傳輸的數據都通過這個對稱密鑰加密解密.

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

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

相關文章

『 C++ 入門到放棄 』- 哈希表

一、哈希的概念 哈希&#xff0c;也稱「 散列 」是一種用來進行高效查找的數據結構&#xff0c;查找的時間復雜度平均為O(1)&#xff0c;其本質就是依賴哈希函數這個算法來將 key 和該 key 存儲位置建立一個映射關系。 而因為是有著映射關系&#xff0c;所以哈希的事件復雜度為…

零售收銀系統開源代碼全解析:連鎖門店一體化解決方案(含POS+進銷存+商城)

過去10年&#xff0c;收銀系統技術經歷了從單機版到云服務、從單純結算到全渠道整合的快速演進。面對連鎖多門店、AI稱重、智能分賬、跨店庫存同步等新需求&#xff0c;很多企業的現有傳統saas系統已顯乏力。本文將梳理收銀系統關鍵技術指標&#xff0c;助您在系統升級時做出明…

能源高效利用如何實現?樓宇自控系統智能化監管建筑設備

隨著全球能源危機日益嚴峻和“雙碳”目標的持續推進&#xff0c;建筑領域作為能耗大戶&#xff08;約占社會總能耗的40%&#xff09;&#xff0c;其節能潛力備受關注。樓宇自控系統&#xff08;Building Automation System&#xff0c;簡稱BAS&#xff09;作為建筑智能化的核心…

校園二手交易小程序的設計與實現

文章目錄前言詳細視頻演示具體實現截圖后端框架SpringBoot微信小程序持久層框架MyBaits成功系統案例&#xff1a;參考代碼數據庫源碼獲取前言 博主介紹:CSDN特邀作者、985高校計算機專業畢業、現任某互聯網大廠高級全棧開發工程師、Gitee/掘金/華為云/阿里云/GitHub等平臺持續…

Redis(二):Redis高級特性和應用(慢查詢、Pipeline、事務)

Redis的慢查詢 許多存儲系統&#xff08;例如 MySQL)提供慢查詢日志幫助開發和運維人員定位系統存在的慢操作。所謂慢查詢日志就是系統在命令執行前后計算每條命令的執行時間&#xff0c;當超過預設閥值,就將這條命令的相關信息&#xff08;例如:發生時間&#xff0c;耗時&…

如何為你的WordPress網站選擇合適的安全插件

在管理WordPress網站時&#xff0c;安全因素至關重要。由于WordPress的廣泛使用&#xff0c;它也成為了黑客攻擊的首要目標。為了避免潛在的安全風險&#xff0c;選擇合適的安全插件至關重要。而Wordfence和iThemes&#xff0c;作為兩款頗具人氣的WordPress安全插件&#xff0c…

我們使用Rust開發的AI知識庫應用

這段時間陸陸續續的開發了2個AI知識庫應用&#xff0c;一個面向企業&#xff0c;一個面向C端用戶。 飛樹智庫&#xff1a;一個安全高效的面向 企業的知識庫平臺&#xff08;https://fskb.coderbox.cn/&#xff09;。 小飛樹&#xff1a;一個專注于個人知識管理的AI應用&#…

自動化測試實戰篇

目錄 1. 自動化實施步驟 1.1 編寫web測試用例 1.2 自動化測試腳本開發 1.3 將自動化測試補充至測試報告 1. 自動化實施步驟 1.1 編寫web測試用例 1.2 自動化測試腳本開發 TestDevelopment: 測試用例 - Gitee.comhttps://gitee.com/Axurea/test-development/tree/master/2…

idea 服務器Debug端口啟動設置

一&#xff1a;在阿里云服務器安全組已經設置了端口授權對象&#xff1a;正確命令&#xff1a;nohup java -Xdebug -Xrunjdwp:transportdt_socket,servery,suspendn,address9998 -jar -Duser.timezoneGMT08 -Xms256m -Xmx256m /opt/projects/*/*/*-starter-1.0-SNAPSHOT.jar -…

大模型量化004

Bert P-tuning BertPET、BertP-Tuning Chain of Thought Few shot Cot Auto-COT 解決手動編寫高質量CoT示例麻煩耗時的問題 Auto COT 自動思維鏈生成器 1.業務場景&#xff1a; 每天收到很多反饋&#xff0c;之前需要人工整理&#xff0c;找到重點&#xff0c;做判斷那些需要立…

C#(基本語法)

數據類型C#是一種強類型語言&#xff0c;變量必須聲明類型。基本數據類型包括整型&#xff08;int、long&#xff09;、浮點型&#xff08;float、double&#xff09;、布爾型&#xff08;bool&#xff09;、字符型&#xff08;char&#xff09;和字符串型&#xff08;string&a…

ARM-I2C軟實現

開發流程引腳初始化引腳功能定義實現讀操作實現寫操作GD32F4軟件I2C初始化void SoftI2C_init() {// 時鐘配置rcu_periph_clock_enable(SCL_RCU);// 設置輸出模式gpio_mode_set(SCL_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, SCL_PIN);gpio_output_options_set(SCL_PORT, GPIO_O…

防水醫用無人機市場報告:現狀、趨勢與洞察

市場規模與增長趨勢在全球醫療科技快速發展的當下&#xff0c;防水醫用無人機市場正嶄露頭角&#xff0c;展現出強勁的發展勢頭。據 QYR統計&#xff0c;2023 年全球醫用無人機市場銷售額達到 1.9 億美元&#xff0c;預計到 2030 年將飆升至 8.5 億美元&#xff0c;年復合增長率…

haproxy代理

一.負載均衡 1.1.什么是負載均衡 負載均衡&#xff1a;Load Balance&#xff0c;簡稱LB&#xff0c;是一種服務或基于硬件設備等實現的高可用反向代理技術&#xff0c;負載均 衡將特定的業務(web服務、網絡流量等)分擔給指定的一個或多個后端特定的服務器或設備&#xff0c;…

【面試】軟件測試面試題

1. 測試用例如何編寫 2. bug的生命周期 項目有多少人&#xff1f;多少條測試用例&#xff1f;多少bug&#xff1f;自己發現的第一條&#xff1f;&#xff08;是不是bug&#xff09; 3. 缺陷管理工具 包括Jira, PingCode, 禪道&#xff0c;BugZilla&#xff0c;Redmine, TAPD&am…

HbuilderX開發小程序

1.打卡HbuilderX&#xff0c;選擇文件—新建—項目2.創建項目3.在HbuilderX中運行前要確定微信開發這工具的服務端口號是打開的4.HbuilderX中點擊預覽可以實時預覽5.在微信開發者中進行本地測試點擊后自動跳轉到微信開發者工具中運行項目

Netty中FastThreadLocal解讀

io.netty.util.concurrent.FastThreadLocal 是 Netty 中提供的高性能線程局部存儲&#xff08;Thread-Local Storage&#xff09;實現&#xff0c;位于 io.netty.util.concurrent 包。它是 Java 標準庫 ThreadLocal 的替代品&#xff0c;旨在優化性能&#xff0c;減少內存分配和…

上海迪士尼游玩攻略 小鐵寄存柜讓你輕松暢玩

去上海迪士尼玩最煩帶一堆行李&#xff0c;其實有小鐵寄存柜幫忙就能輕裝上陣&#xff0c;各個關鍵位置都有分布&#xff0c;玩起來特別省心。?剛到迪士尼的時候&#xff0c;要是坐地鐵到上海國際旅游度假區站&#xff0c;1/2 號口安檢區就有小鐵柜&#xff0c;行李箱、大背包…

飛算科技重磅出品:飛算 JavaAI 重構 Java 開發效率新標桿

在 Java 開發領域&#xff0c;一款由國家級高新技術企業自主研發的智能工具正引發行業關注 —— 飛算 JavaAI 不僅承載著中國原創技術的創新基因&#xff0c;更以貼合實際開發場景的功能設計&#xff0c;成為眾多企業提升 Java 開發效率的核心助力。?作為飛算數智科技&#xf…

python案例:基于python 神經網絡cnn和LDA主題分析的旅游景點滿意度分析

1&#xff0e;緒論1.1研究背景與意義1.1.1研究背景隨著旅游業的快速發展&#xff0c;滿意度分析成為評估旅游景點質量和提升游客體驗的重要手段。作為中國的旅游城市之一&#xff0c;其旅游景點吸引了大量游客。然而&#xff0c;如何科學評估和提升旅游景點的滿意度&#xff0c…