網絡原理 - HTTP/HTTPS

1. HTTP

1.1 HTTP是什么?

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

HTTP發展史: HTTP 誕生于1991年. 目前已經發展為最主流使用的?種應用層協議
在這里插入圖片描述
最新的 HTTP 3 版本也正在完善中, 目前 Google / Facebook 等公司的產品已經支持了. HTTP 往往是基于傳輸層的TCP 協議實現的.
(HTTP1.0, HTTP1.1, HTTP2.0 均為TCP, HTTP3 基于UDP 實現)
目前我們主要使用的還是 HTTP1.1 和 HTTP2.0

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

在這里插入圖片描述

當我們在瀏覽器中輸入?個百度搜索的 “網址” (URL) 時, 瀏覽器就給百度的服務器發送了?個 HTTP請求, 百度的服務器返回了?個 HTTP 響應.
這個響應結果被瀏覽器解析之后, 就展示成我們看到的頁面內容. (這個過程中瀏覽器可能會給服務器發 送多個 HTTP 請求, 服務器會對應返回多個響應, 這些響應里就包含了頁面的HTML, CSS, JavaScript, 圖片, 字體等信息).
所謂 “超文本” 的含義, 就是傳輸的內容不僅僅是文本(比如 HTML, CSS 這個就是文本), 還可以是?些其他的資源, 比如圖片, 視頻, 音頻等二進制的數據.

1.2 應用層協議

前文我們已經了解到TCP/IP , 已經知道目前數據能從客戶端進程經過路徑選擇跨網絡傳送到服務器端進程[ IP+Port ].
可是,僅僅把數據從A點傳送到B點就完了嗎?

這就好比,在淘寶上買了?部洗衣機,賣家[ 客戶端 ]把洗衣機通過順豐[ 傳送+路徑選擇 ] 送到買家 [ 服務器 ] 手里就完了嗎?
當然不是,買家還要使用這款產品,還要在使用之后,給賣家打分評論。

所以,我們把數據從A端傳送到B端, TCP/IP 解決的是順豐的功能,而兩端還要對數據進行加工處理或者使用,所以我們還需要?層協議,不關心通信細節,關心應用細節!
這層協議叫做應用層協議。而應用是有不同的場景的,所以應用層協議是有不同種類的,其中經典協議之?的HTTP就是其中的佼佼者.

再回到我們剛剛說的買洗衣機的例子,順豐相當于 TCP/IP 的功能,那么買回來的洗衣機都附帶了說明書【產品介紹,使用介紹,注意事項等】,而該說明書指導用戶該如何使用洗衣機,此時的說明書可以理解為用戶層協議

1.3 HTTP 協議的工作過程

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

在這里插入圖片描述

1.4 HTTP協議格式

HTTP 是?個文本格式的協議. 可以通過 Chrome 開發者工具或者 Fiddler 抓包, 分析 HTTP 請求/響應的細節

1.5 抓包工具Fiddler

1.5.1 抓包工具下載

抓包工具Fiddler下載鏈接

下載流程:

在這里插入圖片描述
頁面圖:

在這里插入圖片描述

如果電腦上抓不到HTTPS的數據包,要進行如下設置:

在這里插入圖片描述

1.5.2 抓包工具的原理

Fiddler 相當于?個 “代理”.
瀏覽器訪問 baidu.com 時, 就會把 HTTP 請求先發給 Fiddler, Fiddler 再把請求轉發給 baidu 的服務器. 當 baidu 服務器返回數據時, Fiddler 拿到返回數據, 再把數據交給瀏覽器.
因此 Fiddler 對于瀏覽器和 baidu 服務器之間交互的數據細節, 都是非常清楚的

在這里插入圖片描述

代理就可以簡單理解為?個跑腿小弟. 你想買罐冰闊落, 又不想自己下樓去超市, 那么就可以把錢給你的跑腿小弟,跑腿小弟來到超市把錢給超市老板, 再把冰闊落拿回來交到你手上. 這個過程中, 這個跑腿小弟對于 “你” 和 “超市老板” 之間的交易細節,是非常清楚的.

1.5.3 抓包結果分析

以下是?個 HTTP請求/響應的抓包結果.
在這里插入圖片描述

1.5.3.1 HTTP請求部分

在這里插入圖片描述

說明:

  • 首行: [方法] + [url] + [版本]
  • Header: 請求的屬性, 冒號分割的鍵值對,每組屬性之間使?\n分隔,遇到空行表示Header部分結束
  • Body: 空行后面的內容都是Body. Body允許為空字符串. 如果Body存在, 則在Header中會有?個Content-Length屬性來標識Body的長度
1.5.3.2 HTTP響應部分

在這里插入圖片描述

說明:

  • 首行: [版本號] + [狀態碼] + [狀態碼解釋]
  • Header: 請求的屬性,冒號分割的鍵值對,每組屬性之間使用\n分隔,遇到空行表示Header部分結束
  • Body: 空行后面的內容都是Body.Body允許為空字符串. 如果Body存在,則在Header中會有?個Content-Length屬性來標識Body的長度,如果服務器返回了?個html頁面,那么html頁面內容就是在body中
1.5.3.3 協議格式總結

在這里插入圖片描述

為什么 HTTP 報文中要存在 “空行”?

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

1.6 HTTP 請求 (Request)

1.6.1 認識 URL

1.6.1.1 URL 基本格式

平時我們俗稱的 “網址” 其實就是說的 URL (Uniform Resource Locator 統?資源定位符).
為網絡上的資源(圖片,視頻,音樂…)定位
互聯網上的每個文件都有?個唯?的URL,它包含的信息指出文件的位置以及瀏覽器應該怎么處理它.URL 的詳細規則由因特網標準RFC1738進行了約定.

在這里插入圖片描述

說明:

  • https : 協議方案名. 常見的有 http 和 https, 也有其他的類型. (例如訪問mysql 時用到的jdbc:mysql)
  • localhost:服務器的域名或者IP地址
  • 端口號:當端口號省略的時候, 瀏覽器會根據協議類型自動決定使用哪個端口.例如 http 協議默認使用80端口,https協議默認使用443端口.
  • /app/user/: 虛擬目錄
  • info.do : 文件名,訪問的是服務器上的哪個具體的資源
  • 查詢參數(字符串)(query string). 本質是一個鍵值對結構. 鍵值對之 間使用&分隔. 鍵和值之間使用 = 分隔.
  • 錨: 片段標識符,用于定位頁面具體位置的資源
1.6.1.2 使用ping 命令查看域名對應的 IP 地址

例如:以我當前頁面的網址為例
在這里插入圖片描述

使用該命令查看:ping editor.csdn.net
在這里插入圖片描述

注意1: 有的電腦上ping命令會報錯ping不是內部或外部命令,也不是可運行的程序或批處理文件 .這種情況是因為有的 Windows10默認沒有啟用 ping 命令.百度搜索 windows10啟用ping 即可
注意2: query string 中的內容是鍵值對結構. 其中的 key 和 value 的取值和個數, 完全都是程序猿自己約定的. 我們可以通過這樣的方式來自定制傳輸我們需要的信息給服務器
注意3: URL 中的可省略部分

  • 協議名: 可以省略, 省略后默認為 http://
  • ip地址 / 域名: 在 HTML 中可以省略(比如 img, link, script, a 標簽的 src 或者 href 屬性). 省略后表示服務器的 ip / 域名與當前 HTML 所屬的 ip / 域名?致.
  • 端口號: 可以省略. 省略后如果是 http 協議, 端口號自動設為 80, 如果是 https 協議, 端口號自動設為443.
  • 文件名: 可以省略. 省略后相當于 / . 有些服務器會在發現 / 路徑的時候?動訪問 /index.html
  • 查詢參數(字符串): 可以省略
  • 錨: 可以省略

1.6.2 認識方法

方法描述
GET從服務器獲取資源。用于請求數據而不對數據進行更改。例如,從服務器獲取網頁、圖片等。
POST向服務器發送數據以創建新資源。常用于提交表單數據或上傳文件。發送的數據包含在請求體中 。
PUT向服務器發送數據以更新現有資源。如果資源不存在,則創建新的資源。與 POST 不同,PUT 通常是冪等的,即多次執行相同的 PUT 請求不會產生不同的結果。
DELETE從服務器刪除指定的資源。請求中包含要刪除的資源標識符。
PATCH對資源進行部分修改。與 PUT 類似,但 PATCH 只更改部分數據而不是替換整個資源。
HEAD類似于 GET,但服務器只返回響應的頭部,不返回實際數據。用于檢查資源的元數據(例如,檢查資源是否存在,查看響應的頭部信息)。
OPTIONS返回服務器支持的 HTTP 方法。用于檢查服務器支持哪些請求方法,通常用于跨域資源共享(CORS)的預檢請求。
TRACE回顯服務器收到的請求,主要用于診斷。客戶端可以查看請求在服務器中的處理路徑。
CONNECT建立一個到服務器的隧道,通常用于 HTTPS 連接。客戶端可以通過該隧道發送加密的數據。

如何指定請求的方法?
1.當在瀏覽器的地址欄中輸入一個URL時并發起訪問時,發送的全是GET請求
2.通過代碼發送請求,可以指定GET POST PUT DELETE
3.通過HTML中的表單來指定方法名 要提交的數據可以填在表單中
4.網站加載所需要的一些資源都是用GET方法,比如網站中的圖片,樣式,字體…

1.6.2.1 GET方法

GET是最常用的HTTP方法.常用于獲取服務器上的某個資源.在瀏覽器中直接輸入URL,此時瀏覽器就會發送出?個GET請求.另外,HTML中的link,img,script等標簽,也會觸發GET請求.

我們使用Fiddler觀察GET請求
打開Fiddler,訪問百度主頁,觀察抓包結果
在這里插入圖片描述
在上面的結果中可以看到:
藍色選中的
在這里插入圖片描述
是通過瀏覽器地址欄發送的GET請求.
下面的和百度域名相關的請求,有些是通過html中的link/script/img標簽產生的,例如
在這里插入圖片描述

1.6.2.2 POST方法

POST方法也是?種常見的方法.多用于提交用戶輸入的數據給服務器(例如登陸頁面).
通過HTML中的form標簽可以構造POST請求,或者使用JavaScript的ajax也可以構造POST請求.

比如:在QQ的登陸頁面,輸入賬號,密碼,驗證碼之后,點擊登陸,就可以看到POST請求.
在這里插入圖片描述
在這里插入圖片描述

點擊這個請求,查看請求詳情

POST https://login.live.com/RST2.srf HTTP/1.0
Connection: Keep-Alive
Content-Type: application/soap+xml
Accept: */*
User-Agent: MSAWindows/55 (OS 10.0.26100.0.0 ge_release; IDK 10.0.26100.1150 ge_release; Cfg 16.000.29325.00; Test 0)
Content-Length: 6689
Host: login.live.com<?xml version="1.0" encoding="UTF-8"?><s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:ps="http://schemas.microsoft.com/Passport/SoapServices/PPCRL" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:wssc="http://schemas.xmlsoap.org/ws/2005/02/sc" xmlns:wst="http://schemas.xmlsoap.org/ws/2005/02/trust"><s:Header><wsa:Action s:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue</wsa:Action><wsa:To s:mustUnderstand="1">https://login.live.com:443/RST2.srf</wsa:To><wsa:MessageID>1743868954</wsa:MessageID><ps:AuthInfo xmlns:ps="http://schemas.microsoft.com/Passport/SoapServices/PPCRL" Id="PPAuthInfo"><ps:HostingApp>{83928489-55ae-4c23-94ec-03a106b80ba2}</ps:HostingApp><ps:BinaryVersion>55</ps:BinaryVersion><ps:UIVersion>1</ps:UIVersion><ps:InlineUX>Silent</ps:InlineUX><ps:IsConnected>1</ps:IsConnected><ps:IsAdmin>1</ps:IsAdmin><ps:PackageSID>S-1-15-2-350187224-1905355452-1037786396-3028148496-2624191407-3283318427-1255436723</ps:PackageSID><ps:Cookies></ps:Cookies><ps:RequestParams>AQAAAAIAAABsYwQAAAAyMDUy</ps:RequestParams><ps:WindowsClientString>+g8XZ28fqvzp//Kxlhb+gky7PaVY6+Z9xwWf1jQtIks=</ps:WindowsClientString><ps:ClientCapabilities>1</ps:ClientCapabilities></ps:AuthInfo><wsse:Security><EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#" Id="BinaryDAToken1" Type="http://www.w3.org/2001/04/xmlenc#Element"><EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"></EncryptionMethod><ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:KeyName>http://Passport.NET/STS</ds:KeyName></ds:KeyInfo><CipherData><CipherValue>M.C532_SN1.0.U.Cjxq7Zf9oe/by0KFX7UvrH/mNiZA3rpIgRyiTfu/lzLaLY33hT1uYBDrljhJddWRzvj9tywgIO6trP+KGqgzc1KYdU+IuAgKLdLhox/398bLtO+5f/XRcEEwokgMGAZVkBNBsY21PZ4J0pUXsSPhoVgZbmK2GQfXUIJ3/mrESGHKAHIr5mJF5Bg+lKoriNIic+DfZcZoDo1JiJ94GOvczy4muT49osAnT/HrNHMewmSoAqm5c0HIiwNiAoPGybaU0JwU5CcUjnBM2OFJblb6I/hG3HP0UFBpKbdSeXpSnBDKBHyu13ZRkGIq8mBMaLJlOf26C/Fju8QDWN44qDxuhj8d2ymDv3SQY0ctG4ecLD4/26Zhm0VoqNDXoeuUwyjXTsblnh/pnrDdNQNumjNeYK0SKabEzd9xZ/gpQ1A9QoyDAQj+AMlpplIGT/9+I8AQhqXIo2vpxrNRyfjY2DGmUVvmrmDCO67OCaAUQ88sHMgzBV2xXR5iE1xBcEKVyOeGt8C/CWxU8N8UnnZcWnA84bc=</CipherValue></CipherData></EncryptedData><wsse:BinarySecurityToken ValueType="urn:liveid:device" id="DeviceDAToken">&lt;EncryptedData xmlns=&quot;http://www.w3.org/2001/04/xmlenc#&quot; Id=&quot;devicesoftware&quot; Type=&quot;http://www.w3.org/2001/04/xmlenc#Element&quot;&gt;&lt;EncryptionMethod Algorithm=&quot;http://www.w3.org/2001/04/xmlenc#tripledes-cbc&quot;&gt;&lt;/EncryptionMethod&gt;&lt;ds:KeyInfo xmlns:ds=&quot;http://www.w3.org/2000/09/xmldsig#&quot;&gt;&lt;ds:KeyName&gt;http://Passport.NET/STS&lt;/ds:KeyName&gt;&lt;/ds:KeyInfo&gt;&lt;CipherData&gt;&lt;CipherValue&gt;M.C522_SN1.0.D.Cp6GgsxybbCn5NIcYEeXdlTK+D6zwZip99XCUv2IuNO5JdOYQ9Qbdhl46nbeGNA41Istb7j9ukFB5gb4JZwyQ1N/JyPnbkQLjjbuA+w1rZuqmRuT/0nMgF4zqdvJh70q0vzS9Xn2pRAxXb+YxwbAg5cUsmNp7p0thbR6aIqR3cZZdSxk9QOuLyLyyO0Iuf/Ag6zuWgYHe8GzLgQ6+97cnjxAdjrw1Bm9JzjGyAXQqm65VLFzRLu48hcpcj3L2dt46NgQWc0+o5wtBY/iT5XdoB9xpL0UVW3cTTC7a8DbdPyE/KygIqZ42q2Ak0vXDR2egW2XRfK3RpTiRhUaOdhitirqneNBFLD0wjPb04HdRINLCGo7XruZeocWdnFMEz8LWEUyiBca8VM9WYxRfo3z8PhOGWu60ZzezhVZVB32mMZRkkkQecFHVz5lVq5Yq074s9zOvurxQglK8LBGu/cMbXFS+2tr3RO8asJE+EZSFf7j1E4Zz4hjOVKFIz5e720u0vqPBY6GvYmupLoIYyHbZGEdnru/4v8+ledOTxWggS/1&lt;/CipherValue&gt;&lt;/CipherData&gt;&lt;/EncryptedData&gt;</wsse:BinarySecurityToken><wsse:UsernameToken wsu:Id="user"><wsse:UsernameHint>l3143159923@outlook.com</wsse:UsernameHint><wsse:LoginOption>1</wsse:LoginOption></wsse:UsernameToken><wssc:DerivedKeyToken wsu:Id="SignKey" Algorithm="urn:liveid:SP800108_CTR_HMAC_SHA256_DOUBLEDERIVED"><wsse:RequestedTokenReference><wsse:KeyIdentifier ValueType="http://docs.oasis-open.org/wss/2004/XX/oasis-2004XX-wss-saml-token-profile-1.0#SAMLAssertionID"/><wsse:Reference URI="#DeviceDAToken"/></wsse:RequestedTokenReference><wssc:Nonce>/UA/GlIRTmlg4ZPUUMPWz43D61ym3MAK</wssc:Nonce></wssc:DerivedKeyToken><wsu:Timestamp wsu:Id="Timestamp"><wsu:Created>2025-04-05T16:02:32Z</wsu:Created><wsu:Expires>2025-04-05T16:07:32Z</wsu:Expires></wsu:Timestamp><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></CanonicalizationMethod><SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#hmac-sha256"></SignatureMethod><Reference URI="#RSTS"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod><DigestValue>5NRERwlJe9qrAHDyJmZGu3kz6JACRrEp1r8mMxv72J4=</DigestValue></Reference><Reference URI="#Timestamp"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod><DigestValue>cggLyIZMXGOoSoHS5OgZqBIkj8HoitpiwNoMKT3gJMI=</DigestValue></Reference><Reference URI="#PPAuthInfo"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod><DigestValue>irEWjs2gYzGg/WnXhGLcO938EP5QFb0lswvpHgVzodU=</DigestValue></Reference></SignedInfo><SignatureValue>zauBSluyVFh/Yuw9m6R7CA3kgtEfDjK2vI3mHOjU3Do=</SignatureValue><KeyInfo><wsse:SecurityTokenReference><wsse:Reference URI="#SignKey"/></wsse:SecurityTokenReference></KeyInfo></Signature></wsse:Security></s:Header><s:Body><ps:RequestMultipleSecurityTokens xmlns:ps="http://schemas.microsoft.com/Passport/SoapServices/PPCRL" Id="RSTS"><wst:RequestSecurityToken Id="RST0"><wst:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</wst:RequestType><wsp:AppliesTo><wsa:EndpointReference><wsa:Address>scope=service::https://mucp.api.account.microsoft.com::MBI_SSL&amp;uaid=65309187-1129-4074-A0B4-11DB8EC4A1BC&amp;ssoappgroup=windows</wsa:Address></wsa:EndpointReference></wsp:AppliesTo><wsp:PolicyReference URI="TOKEN_BROKER"></wsp:PolicyReference></wst:RequestSecurityToken><wst:RequestSecurityToken Id="RST1"><wst:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</wst:RequestType><wsp:AppliesTo><wsa:EndpointReference><wsa:Address>http://Passport.NET/tb</wsa:Address></wsa:EndpointReference></wsp:AppliesTo></wst:RequestSecurityToken></ps:RequestMultipleSecurityTokens></s:Body></s:Envelope>

POST請求的特點:

  • 首行的第?部分為POST
  • URL的query string一般為空(也可以不為空)
  • header部分有若干個鍵值對結構.
  • body部分?般不為空.body內的數據格式通過header中Content-Type指定
  • body的長度由header中Content-Length指定

GET和POST的區別??

  • 語義不同:GET?般用于獲取數據,POST?般用于提交數據.
  • GET的body一般為空,需要傳遞的數據通過query string傳遞,POST的query string?般為空,需要傳遞的數據通過body傳遞
  • GET請求一般是冪等 (每次訪問同一個URL,得到的結果都相同) 的,POST請求一般是不冪等的.(如果多次請求得到的結果?樣,就視為請求是冪等的).
  • GET可以被緩存 (被緩存在本地下次再訪問的時候就不用通過網絡,而從本地緩存中直接獲) ,POST不能被緩存.(這一點也是承接冪等性)
  • 網上有些博客說GET的URL長度(URL+queryString)是有限制的,比如說255個字符,1000個字符.HTTP協議的官方說明對長度不做限制,如果限制也是瀏覽器或是應用程序自身做出的
1.6.2.3 請求報頭(header)

在這里插入圖片描述

  • Host: 表示服務器主機的地址和端口
  • Content-Length: 表示body中的數據長度.單位是字節
    POST請求和響應中都有這個字段,只要body中有真實的數據就根據這個值去讀
  • Content-Type: 表示請求的body中的數據格式,包含多種格式,目的是告訴瀏覽器要用什么格式來解析body中的數據
    常見選項:
    ? text/html :body數據格式是HTML
    ? text/css :body數據格式是CSS
    ? application/javascript :body數據格式是JavaScript
    ? application/json :body數據格式是JSON
  • User-Agent(簡稱 UA): 表示瀏覽器/操作系統的屬性
  • Referer: 表示這個頁面是從哪個頁面跳轉過來的
    如果直接在瀏覽器中輸入URL,或者直接通過收藏夾訪問頁面時是沒有Referer的.
  • Cookie: Cookie中存儲了?個字符串,這個數據可能是客戶端(網頁)自行通過JS寫入的,也可能來自于服務器(服務器在HTTP響應的header中通過Set-Cookie字段給瀏覽器返回數據).往往可以通過這個字段實現"身份標識"的功能.每個不同的域名下都可以有不同的Cookie,不同網站之間的Cookie并不沖突.可以通過抓包觀察頁面登陸的過程
  1. 清除之前的cookie
    為了方便觀察,先清除掉之前登陸的cookie
    在gitee主頁頁面上,點擊url左側的圖標,選擇Cookie
    在這里插入圖片描述

然后刪除已經存在的Cookie
在這里插入圖片描述

  1. 登陸操作
    登陸請求
 POST https://gitee.com/login HTTP/1.1Host: gitee.comConnection: keep-aliveContent-Length: 394Cache-Control: max-age=0sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"sec-ch-ua-mobile: ?0Upgrade-Insecure-Requests: 1Origin: https://gitee.comContent-Type: application/x-www-form-urlencodedUser-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/wSec-Fetch-Site: same-originSec-Fetch-Mode: navigateSec-Fetch-User: ?1Sec-Fetch-Dest: documentReferer: https://gitee.com/loginAccept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9,en;q=0.8encrypt_key=password&utf8=%E2%9C%93&authenticity_token=36ZqO9tglSN6EB6pF6f2Gt%2B

登陸響應

 HTTP/1.1 302 FoundDate: Thu, 10 Jun 2021 04:15:58 GMTContent-Type: text/html; charset=utf-8Connection: keep-aliveKeep-Alive: timeout=60Server: nginxX-XSS-Protection: 1; mode=blockX-Content-Type-Options: nosniffX-UA-Compatible: chrome=1Expires: Sun, 1 Jan 2000 01:00:00 GMTPragma: must-revalidate, no-cache, privateLocation: https://gitee.com/HGtz2222Cache-Control: no-cacheSet-Cookie: oschina_new_user=false; path=/; expires=Mon, 10 Jun 2041 04:16:00 -0Set-Cookie: gitee_user=true; path=/Set-Cookie: gitee-session-n=M1Rhbk1QUUxQdWk1VEZVQ1BvZXYybG13ZUJFNGR1V0pSYTZyTllEX-Request-Id: 77f12d095edc98fab27d040a861f63b1X-Runtime: 0.166621Content-Length: 92<html><body>You are being <a href="https://gitee.com/HGtz2222">redirected</a>.</

可以看到,響應中包含了3個Set-Cookie屬性.
其中我們重點關注第三個.里面包含了?個gitee-session-n 這樣的屬性,屬性值是?串很長的
加密之后的信息.這個信息就是用戶當前登陸的?份標識.也稱為 “令牌(token)”

  1. 訪問其他頁面
    登陸成功之后,此時可以看到后續訪問碼云的其他頁面(比如個人主頁),請求中就都會帶著剛才獲取到的Cookie信息
 GET https://gitee.com/HGtz2222 HTTP/1.1Host: gitee.comConnection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-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/wSec-Fetch-Site: same-originSec-Fetch-Mode: navigateSec-Fetch-User: ?1Sec-Fetch-Dest: documentsec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"sec-ch-ua-mobile: ?0Referer: https://gitee.com/loginAccept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9,en;q=0.8Cookie: oschina_new_user=false; user_locale=zh-CN; yp_riddler_id=1ce4a551-a160-4

請求中的Cookie字段也包含了?個gitee-session-n 屬性,里面的值和剛才服務器返回的值
相同.后續只要訪問gitee這個網站,就會?直帶著這個令牌,直到令牌過期/下次重新登陸

1.6.2.4 理解登陸過程

在這里插入圖片描述

這個過程和去醫院看病很相似.

  1. 到了醫院先掛號.掛號時候需要提供?份證,同時得到了?張"就診卡",這個就診卡就相當于患者的 “令牌”.
  2. 后續去各個科室進行檢查,診斷,開藥等操作,都不必再出示身份證了,只要憑就診卡即可識別出當前 患者的身份.
  3. 看完病了之后,不想要就診卡了,就可以注銷這個卡.此時患者的身份和就診卡的關聯就銷毀了.(類似于網站的注銷操作)
  4. 又來看病,可以辦?張新的就診卡,此時就得到了?個新的"令牌"

2. HTTP響應詳解

2.1 “狀態碼”(statuscode)

狀態碼表示訪問?個頁面的結果.(是訪問成功,還是失敗,還是其他的?些情況…).
以下為常見的狀態碼.

  • 200 OK: 這是?個最常見的狀態碼,表示訪問成功.
    抓包抓到的大部分結果都是200,表示客戶端與服務器之間的請求與響應是沒有問題的
  • 404 Not Found: 沒有找到資源.瀏覽器輸入?個URL,目的就是為了訪問對方服務器上的?個資源.如果這個URL標識的資源不存在,那么就會出現404
  • 403 Forbidden: 表示訪問被拒絕.有的頁面通常需要用戶具有?定的權限才能訪問(登陸后才能訪問).如果用戶沒有登陸直接訪問,就容易見到403.
  • 405 Method Not Allowed: 前?我們已經學習了HTTP中所支持的方法,有GET,POST,PUT,DELETE等.但是對方的服務器不?定都支持所有的方法(或者不允許用戶使用?些其他的方法).如果服務器的某個URL只支持GET方法訪問,但用POST PUT DELETE 進行訪問的時候就是405
  • 500 Internal Server Error: 服務器出現內部錯誤.?般是服務器的代碼執行過程中遇到了?些特殊情況(服務器異常崩潰)會產生這個狀態碼.主要是程序員自己寫的代碼出現了一些問題
    只要出現了這個狀態碼,先去看看代碼哪兒可能有BUG
  • 504 GatewayTimeout: 當服務器負載比較大的時候,服務器處理單條請求的時候消耗的時間就會很長,就可能會導致出現超時 的情況.這種情況在雙十一等"秒殺"場景中容易出現,平時不太容易見到.
  • 302Movetemporarily: 臨時重定向(同一個入口根據不同的場景,轉發到不同的頁面
    也有可能不轉發).
    理解"重定向":當前訪問的URL并不是最終的地址,當前請求會被轉發,轉發到最終
    的目的頁(落地頁)
  • 301 Moved Permanently: 永久重定向.當瀏覽器收到這種響應時,后續的請求都會被自動改成新的地址. 只要訪問這個頁面全部無條件重定向主要應用在新舊系統的遷移

小結:

類別原因短語
1XXInformational(信息狀態碼)接受的請求正在處理
2XXSuccess(成功狀態碼)請求正常處理完畢
3XXRedirection (重定向狀態碼)需要進行附加操作以完成請求
4XXClient Error(客戶端錯誤狀態碼)服務器無法處理請求
5XXSever Error (服務器錯誤狀態碼)服務器處理請求出錯

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

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

相關文章

第十屆MathorCup高校數學建模挑戰賽-A題:無車承運人平臺線路定價問題

目錄 摘 要 一、問題提出 1.1 背景 1.2 問題重述 二、基本假設 三、符號說明 四、問題分析 4.1 問題一的分析 4.2 問題二的分析 4.3 問題三的分析 4.4 問題四的分析 五、模型的建立與求解 5.1 問題一模型的建立與求解 5.1.1 數據預處理 5.1.2 問題一結果檢驗:因子分析模型 5.2…

C++假期練習

思維導圖 牛客練習

Go語言-初學者日記(四):包管理

眾所周知——“包”治百病。 理解包與模塊&#xff0c;是 Go 邁向工程化開發的關鍵一環&#xff01; &#x1f4c2; 一、包&#xff08;Package&#xff09;是 Go 的基本組織單位 在 Go 中&#xff0c;每個 .go 文件都屬于某個包&#xff08;package&#xff09;&#xff1a; …

Scala面向對象2

1. 抽象屬性和方法&#xff1a;用 abstract 關鍵字定義抽象類&#xff0c;其中抽象屬性無初始值&#xff0c;抽象方法無實現 。重寫抽象方法需用 override &#xff0c;重寫抽象屬性時&#xff0c;可變屬性用 var &#xff0c;不可變屬性用 val 。 匿名子類&#xff1a;和 Jav…

DiffAD:自動駕駛的統一擴散建模方法

25年3月來自新加坡公司 Carion 和北航的論文“DiffAD: A Unified Diffusion Modeling Approach for Autonomous Driving”。 端到端自動駕駛 (E2E-AD) 已迅速成為實現完全自動駕駛的一種有前途的方法。然而&#xff0c;現有的 E2E-AD 系統通常采用傳統的多任務框架&#xff0c…

Python四大核心數據結構深度解析:列表、元組、字典與集合

在Python編程語言中&#xff0c;數據結構是組織和存儲數據的基本方式。Python提供了四種內置的核心數據結構&#xff1a;列表&#xff08;List&#xff09;、元組&#xff08;Tuple&#xff09;、字典&#xff08;Dictionary&#xff09;和集合&#xff08;Set&#xff09;。這…

網絡編程—Socket套接字(TCP)

上篇文章&#xff1a; 網絡編程—Socket套接字&#xff08;UDP&#xff09;https://blog.csdn.net/sniper_fandc/article/details/146923670?fromshareblogdetail&sharetypeblogdetail&sharerId146923670&sharereferPC&sharesourcesniper_fandc&sharefro…

SkyWalking+Springboot實戰(最詳細)

本篇文章記錄了作者在0到1學習SkyWalking的過程&#xff0c;記錄了對SkyWalking的部署&#xff0c;學習&#xff0c;使用Bug解決等等過程 一、什么是SkyWalking 官方文檔&#xff1a; Apache SkyWalkinghttps://skywalking.apache.org/ SkyWalking 是一個開源的分布式追蹤、性…

Arduino示例代碼講解:Row-Column Scanning an 8x8 LED matrix with X-Y input LED矩陣

Arduino示例代碼講解:Row-Column Scanning an 8x8 LED matrix with X-Y input LED矩陣 Row-Column Scanning an 8x8 LED matrix with X-Y input LED矩陣功能概述硬件部分:軟件部分:代碼逐行解釋定義常量定義變量`setup()` 函數`loop()` 函數`readSensors()` 函數`refreshScr…

多線程編程中的鎖策略

目錄 1.悲觀鎖vs樂觀鎖 關鍵總結 悲觀鎖&#xff1a; 樂觀鎖&#xff1a; 選擇建議 用 悲觀鎖 當&#xff1a; 用 樂觀鎖 當&#xff1a; 2.重量級鎖vs輕量級鎖 選擇建議 用 輕量級鎖&#xff1a; 用 重量級鎖&#xff1a; 3.掛起等待鎖vs自旋鎖 關鍵細節說明 選擇…

負載均衡是什么,Kubernetes如何自動實現負載均衡

負載均衡是什么&#xff1f; 負載均衡&#xff08;Load Balancing&#xff09; 是一種網絡技術&#xff0c;用于將網絡流量&#xff08;如 HTTP 請求、TCP 連接等&#xff09;分發到多個服務器或服務實例上&#xff0c;以避免單個服務器過載&#xff0c;提高系統的可用性、可擴…

React-01React創建第一個項目(npm install -g create-react-app)

1. React特點 JSX是javaScript語法的擴展&#xff0c;React開發不一定使用JSX。單向響應的數據流&#xff0c;React實現單向數據流&#xff0c;減少重復代碼&#xff0c;比傳統數據綁定更簡單。等等 JSX是js的語法擴展&#xff0c;允許在js中編寫類似HTML的代碼 const …

小程序中的網絡請求

在小程序中&#xff0c;使用 wx.request( ) 這個方法來發送網路請求&#xff0c;整個請求的方式和 jQuery 里面的 $.ajax 方法是非常相似的。 在 wx.request( ) 這個方法中&#xff0c;接收一個配置對象&#xff0c;該配置對象中能夠配置的項目如下表&#xff1a; 關于服務器…

jvm 的attach 和agent機制

Java 的 Attach 和 Agent 機制在實際應用中得到了廣泛的成功應用&#xff0c;尤其是在監控、調試、性能分析、故障排查等方面。以下是這兩種機制在實際場景中的一些成功應用案例&#xff1a; 1. 性能監控與分析 Java Agent 和 Attach 機制廣泛應用于性能監控和分析&#xff0…

基于SpringBoot的“留守兒童網站”的設計與實現(源碼+數據庫+文檔+PPT)

基于SpringBoot的“留守兒童網站”的設計與實現&#xff08;源碼數據庫文檔PPT) 開發語言&#xff1a;Java 數據庫&#xff1a;MySQL 技術&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系統展示 系統整體功能圖 局部E-R圖 系統首頁界面 系統注冊…

iPhone XR:一代神機,止步于此

什么樣的 iPhone &#xff0c;才配稱為一代神機&#xff1f; 我曾經用過iPhone 4S、iPhone 6S Plus、iPhone 8 Plus&#xff0c;iPhone SE2、iPhone XR、iPhone 13、iPhone 14 Plus、iPhone 15/Pro。 不管硬件再怎么卷&#xff0c;不管囊中是否羞澀&#xff0c;主力機基本沒考…

【VUE】RuoYi-Vue3項目結構的分析

【VUE】RuoYi-Vue3項目結構的分析 1. 項目地址2. RuoYi-Vue3項目結構2.1 整體結構2.2 package.json2.2.1 &#x1f9fe; 基本信息2.2.2 &#x1f527; 腳本命令&#xff08;scripts&#xff09;2.2.3 &#x1f30d; 倉庫信息2.2.4 &#x1f4e6; 項目依賴&#xff08;dependenc…

架構師面試(二十五):分布式存儲 Leader 設計

問題 在非常多的分布式存儲系統中&#xff0c;如&#xff1a;Zookeeper、Etcd、Kafka等&#xff0c;往往會存在一個 【Leader】 角色&#xff0c;并由該角色負責數據的寫入&#xff0c;這樣設計最主要的原因是什么呢&#xff1f; A. 唯一負責數據寫入的 Leader 角色可以避免并…

使用YoloV5和Mediapipe實現——上課玩手機檢測(附完整源碼)

目錄 效果展示 應用場景舉例 1. 課堂或考試監控&#xff08;看到這個學生黨還會愛我嗎&#xff09; 2. 駕駛安全監控&#xff08;防止開車玩手機&#xff09; 3. 企業辦公管理&#xff08;防止工作時間玩手機&#xff09; 4. 監獄、戒毒所、特殊場所安保 5. 家長監管&am…

GPT-4o從語義分割到深度圖生成,大模型狂潮下的計算機視覺:技術進步≠替代危機

隨著上周&#xff0c;GPT-4o原生多模態圖像生成功能的推出&#xff0c;更多玩法也被開發出來。一夜之間&#xff0c;GPT-4o原生多模態能力的釋放&#xff0c;讓圖像生成、語義分割、深度圖構建這些曾需要專業工具鏈支持的復雜任務&#xff0c;變成了普通人輸入一句話就能實現的…