Day12 - 計算機網絡 - HTTP

HTTP常用狀態碼及含義?

301和302區別?

  • 301:永久性移動,請求的資源已被永久移動到新位置。服務器返回此響應時,會返回新的資源地址。
  • 302:臨時性性移動,服務器從另外的地址響應資源,但是客戶端還應該使用這個地址。

HTTP有哪些請求方式?

PUT是新建或替換指定資源?

GET可以實現寫操作嗎?

可以但不建議,可能會導致嚴重的安全問題,如跨站請求偽造(CSRF)。

開發過程中杜絕使用GET,并在接口上明確規定使用哪種請求方式,請求方式錯誤會返回405

什么是冪等,冪等方式有哪些?

無論操作執行多少次,,對服務器狀態產生的影響是相同的

在正確實現的條件下,GET、HEAD、PUT 和 DELETE 等方法都是冪等的,而 POST 方法不是。

GET和POST的區別

傳參方式/是否緩存:GET的參數明文放在URL中(告訴服務器自己要找哪些資源),來做一些簡單的請求資源操作,可能被瀏覽器緩存,不安全;POST將請求數據放在請求體中而不是URL中,讓服務器來處理這些數據,如果用HTTPS的話請求體是加密的,更加安全,并且一般不會被緩存。

冪等性:GET請求是冪等的,不會改變服務器的狀態;POST不是冪等的,會對服務器的數據有影響

GET的長度限制?

GET是通過URL 傳遞數據,但是URL本身不限長度,所以對GET做出長度限制的其實是瀏覽器。

例如 IE 瀏覽器對 URL 的最大限制是 2000 多個字符,大概 2kb 左右,像 Chrome、Firefox 等瀏覽器支持的 URL 字符數更多,其中 FireFox 中 URL 的最大長度限制是 65536 個字符,Chrome 則是 8182 個字符。

這個長度限制也不是針對數據部分,而是針對整個 URL。

HTTP請求的過程和原理

HTTP是基于TCP/IP的應用層協議,使用TCP作為傳輸層協議,通過建立TCP連接來傳輸數據。HTTP遵循標準的客戶端-服務端模型。

?DNS解析、TCP連接、HTTP請求、服務器處理響應、斷開TCP連接。

客戶端發送一個請求到服務器,服務器處理請求并返回一個響應。這個過程是同步的,也就是說,客戶端在發送請求后必須等待服務器的響應。在等待響應的過程中,客戶端不會發送其他請求。

怎么利用多線程下載一個數據??

  • 采用分塊下載,通過設置 HTTP 請求頭的 Range 字段指定下載的字節區間。例如,Range: bytes=0-1023?表示下載文件的前 1024 字節。
  • 首先通過HEAD請求獲取文件的總大小,然后根據文件大小和線程數對文件進行切割「connection.setRequestProperty("Range", "bytes=" + start + "-" + end);」,每個線程都獲取一個輸入流,負責一個特定范圍的文件下載(本地待寫入的RandomAccessFile文件從start開始:file.seek(start))。
  • 最后啟動多線程下載。

說一下HTTP的報文結構?

HTTP報文分為請求報文和相應報文,都包含了起始行、頭部和消息正文

HTTP請求報文的結構

由請求行,請求頭和消息正文(請求體)組成

GET?/index.html?HTTP/1.1 //請求行包括請求方法請求 URLHTTP 協議的版本
Host:?www.javabetter.cn //請求頭包括主機名可接受媒體類型瀏覽器類型請求內容的范圍
Accept:?text/html
User-Agent: AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/58.0.3029.110?Safari/537.3

請求頭部和消息正文之間有一個空行,表示請求頭部結束。

消息正文是可選的,POST 請求中的表單數據;GET 請求中沒有消息正文

HTTP響應報文的結構

由狀態行、響應頭和消息征文(響應體)組成

HTTP/1.0?200?OK //狀態行包括HTTP的版本、狀態碼、狀態信息
Content-Type:?text/plain //響應頭包括響應數據類型響應數據長度資源過期時間資源最后修改時間服務器類型和版本
Content-Length:?137582
Expires:?Thu,?05?Dec?1997?16:00:00?GMT
Last-Modified:?Wed,?5?August?1996?15:55:28?GMT
Server:?Apache?0.84

空行

// 響應體也是可選的,通常是HTML頁面,也可能是?204 No Content 狀態碼的響應。
<html>
??<body>Java八股</body>
</html>

URI和URL區別

  • URI:統一資源標識符(Uniform Resource Identifier),標識的是Web上每一種可用資源,比如HTML文檔、圖像、視頻片段、程序等都是由URI標識等
  • URL:統一資源定位符(Uniform Resource Location)是URI的子集,主要作用是提供資源的路徑

主要區別在于URL除了提供了資源的標識,還提供了資源的訪問方式,所有能夠唯一標識一個資源的字符串就是URI,但是只有指明了如何定位訪問這個資源的URI才是URL

HTTP 1.0和HTTP2.0的區別??

HTTP 1.0默認是短連接,HTTP 1.1默認是長連接,HTTP 2.0默認是多路復用

說下HTTP 1.0

  • 非持久連接:每個HTTP響應對之后TCP都會關閉連接,每次相同的請求也要重新建立TCP連接,可以設置Connection: keep alive開啟長連接
  • 無狀態協議:HTTP 1.0是無狀態的,每次請求是獨立的,服務器不保存任何請求的狀態信息

說下HTTP 1.1

  • 持久連接:HTTP 1.1默認情況下是持久連接,請求完成后不會立即關閉連接,可以在一個連接上發送多次請求和響應,減輕了TCP連接的開銷。
  • 流水線處理:HTTP 1.1支持客戶端在請求還未返回響應時發送下一個請求,但服務器必須按照接收到請求的順序依次返回響應。

說下HTTP 2.0

目前使用最廣泛的HTTP版本

  • 二進制協議:HTTP 2.0采用二進制而不是文本格式來傳輸數據,解析更高效
  • 多路復用:一個TCP連接上可以同時進行多個HTTP請求/響應,解決了頭阻塞的問題
  • 頭部壓縮:HTTP協議不帶狀態,所以每次請求都要附上全部信息。HTTP 2.0引入了頭部壓縮機制,可以使用gzip或compress壓縮之后再發送,減少了冗余的頭部信息。
  • 服務器推送:服務器可以向客戶端主動推送信息,而不需要客戶端請求。

HTTP/3了解嗎?

HTTP2雖然邏輯上各個流之間相互獨立,但是在傳輸的過程中,如果某個流的數據有丟包,其后的流仍然會阻塞,HTTP/3采用的是QUIC快速UDP連接,相比于采用TCP連接的HTTP2,HTTP3能夠實現各個流之間的完全獨立,互不干擾。同時QUIC協議能夠實現在傳輸過程中就完成了TLS加密握手,更直接了。

HTTP長連接什么時候會超時?

可以在HTTP方面或TCP方面設置

HTTP有一個守護進程httpd,其中可以設置keep-alive timeout,也可以在header中設置超時時間

TCP的keep-alive包含三個參數,在系統內核的net.ipv4里設置,如果TCP閑置時間超過了tcp_keepalive_time,就會發送偵測包,并每隔tcp_keepalive_intvl發送一次,一共發送tcp_keepalive_probes后如果還沒有收到客戶端的ACK,就會關閉連接

tcp_keepalive_intvl?=?15
tcp_keepalive_probes?=?5
tcp_keepalive_time?=?1800

HTTP與HTTPS的區別?

HTTPS是加密的,在HTTP基礎上加入了SSL/TSL協議。

HTTP 的默認端?號是 80,URL 以http://開頭;HTTPS 的默認端?號是 443,URL 以https://開頭。

為什么要使用HTTPS?

因為HTTP是明文傳輸的,存在數據竊聽數據篡改數據偽造等,HTTP引入了SSL/TSL解決了這些問題。

SSL/TSL加密過程中涉及到兩種加密方法:

對稱加密:雙方用會話密鑰加密通信內容。

非對稱加密:

  • 服務器身份驗證: 客戶端通過服務器發送的數字證書(由CA簽發,內含服務器公鑰)來驗證服務器身份。客戶端使用預裝的CA公鑰驗證證書簽名
  • 客戶端生成預主密鑰: 客戶端生成一個隨機的預主密鑰
  • 客戶端加密預主密鑰: 客戶端使用從服務器證書中獲得的服務器公鑰來加密這個預主密鑰
  • 客戶端發送加密數據: 客戶端將加密后的預主密鑰發送給服務器。
  • 服務器解密預主密鑰: 服務器使用自己的私鑰解密收到的數據,得到預主密鑰。
  • 雙方派生會話密鑰: 客戶端和服務器現在都擁有了相同的預主密鑰、以及之前交換的Client Random和Server Random。它們各自使用這些信息通過密鑰派生函數計算出相同的對稱會話密鑰(通常包括用于加密的密鑰和用于消息認證碼MAC的密鑰)。
  • 安全通信: 之后,雙方使用這個派生出的對稱會話密鑰進行加密和解密實際的HTTP應用數據。

HTTPS是怎么建立連接的?

握手階段和數據傳輸階段。

HTTPS會加密URL嗎?

HTTPS會加密整個報文,URL是報文的一部分,所以也會被加密,但因為涉及SSL握手的過程,所以域名信息會被暴露出來,完整的URL也有可能會在日志中被記錄,這些日志可能是明文的。

所以即使使用HTTPS,敏感信息也不要寫入URL

什么是中間人攻擊?

MITM,攻擊者可以在通信雙方的中間插入自己。

SSL 協議就是通過驗證服務器的數字證書是否是由 CA(權威的受信任的數字證書認證機構)簽發來防止中間人攻擊的。

HTTPS怎么保證建立的信道是安全的?

主要通過 SSL/TLS 協議的多層次安全機制,首先在握手階段,客戶端和服務器使用得是非對稱加密,生成的會話密鑰只有服務器的私鑰才能解密,而私鑰只有服務器持有。

在數據傳輸階段,即使攻擊者攔截了通信數據,沒有會話密鑰也無法解密

HTTP可以被抓包嗎?

可以,但是信息是加密的,如果中間人通過偽造CA證書騙取客戶端信任,那么就有可能得到會話密鑰,再偽裝客戶端和服務器通信,服務器的響應轉發給客戶端,完成中間人攻擊。

常用的抓包工具有 WiresharkFiddlerCharles 等。

CA證書的簽發過程?

CA將申請方的公鑰域名證書過期時間,證書頒發方簽名算法標識符等信息打成一個包(證書),然后進行Hash值計算,然后通過CA的私鑰加密這個Hash值,生成簽名,最后把簽名放入證書中。

客戶端如何校驗證書的合法性?

首先檢查證書的頒發者(通過比對內置的CA列表)、所有者、頒發日期、是否被吊銷,持有方的域名。

檢查通過后,用內置的CA中的公鑰解密簽名的內容,得到一個Hash2。

用同樣的Hash算法獲取證書的Hash值Hash1,比較Hash1和Hash2,如果值相同則為可信賴的證書。

如何理解HTTP協議是無狀態的?

  • 每個 HTTP 請求都包含了所有所必須的信息,服務器在處理當前請求時,不依賴于之前的任何請求信息。
  • 服務器不會記錄任何客戶端請求的狀態,每次請求都像是第一次與服務器通信。

由于 HTTP 是無狀態的,像用戶的購物車狀態就必須通過其他方式來保持,如在每次請求中傳遞用戶的 ID,或者使用 Cookie 在客戶端保存購物車狀態。

有什么辦法記錄狀態?

Cookies:服務器通過Set-Cookies響應頭將狀態信息返回給客戶端,客戶端之后的請求就使用這些Cookies來維持狀態。

Session:服務器生成一個唯一的會話ID存儲在Cookie中,并在服務器端維護該Session的狀態信息。每次請求都發送Cookie中的Session ID以便服務器獲取該會話之前的狀態。

Token:使用 JWT(JSON Web Token)等機制在客戶端存儲狀態信息,客戶端在每次請求中發送該 Token。?

Session和Cookie的區別和聯系

區別:

  • 存儲位置:Session存儲在服務器,Cookie存儲在客戶端
  • 存儲數據類型:Session可以存儲任意類型,Cookies只能存儲ASCII
  • 有效期:Session一般有效期較短,客戶端關閉或者Session超時都會失效;Cookies可設置為長時間保持,比如默認登陸。
  • 安全性:Session存儲在服務端較安全;Cookie存儲在客戶端容易被竊取
  • 存儲大小:Session可存儲的數據容量較大,Cookies保存的數據不能超過4K

聯系:

  • 用戶第一次請求服務器時,服務器會創建對應的Session及對應的ID用于唯一標識會話,將Session ID返回給客戶端,客戶端會把ID保存在Cookie中,同時用Cookies記錄該ID屬于哪個域名
  • 當用戶第二次訪問服務器時,請求會自動判斷此域名下是否存在 Cookie 信息,如果存在,則自動將 Cookie 信息也發送給服務端,服務端會從 Cookie 中獲取 SessionID,再根據 SessionID 查找對應的 Session 信息,如果沒有找到,說明用戶沒有登錄或者登錄失效,如果找到 Session 證明用戶已經登錄可執行后面操作。?

分布式環境下如何處理Session?
客戶端的不同請求經過負載均衡可能被分配到不同的服務器上,可以使用Redis分布式緩存來存儲Session,在多臺服務器共享。

客戶端無法使用Cookie怎么村Session ID?
可以使用客戶端的本地存儲,比如瀏覽器的sessionStorage
然后把Session ID放在URL的請求參數里或者請求頭里。

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

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

相關文章

【python深度學習】Day 40 訓練和測試的規范寫法

知識點回顧&#xff1a; 彩色和灰度圖片測試和訓練的規范寫法&#xff1a;封裝在函數中展平操作&#xff1a;除第一個維度batchsize外全部展平dropout操作&#xff1a;訓練階段隨機丟棄神經元&#xff0c;測試階段eval模式關閉dropout 作業&#xff1a;仔細學習下測試和訓練代碼…

亡羊補牢與持續改進 - SRE 的安全日志、審計與事件響應

亡羊補牢與持續改進 - SRE 的安全日志、審計與事件響應 如果說我們之前討論的安全措施(如 IAM、網絡策略、密鑰管理、漏洞補丁)是為我們的“數字城堡”修筑堅固的城墻、設置精密的門鎖、定期檢查和修補潛在的裂縫,那么安全日志就像是遍布城堡內外的監控攝像頭和出入登記簿,…

CppCon 2014 學習第2天:Using Web Services in C++

概述 這是一個會議或演講的概述內容&#xff0c;主要介紹一個關于C Rest SDK的分享&#xff0c;翻譯和理解如下&#xff1a; 翻譯 概述 先介紹什么是典型的Web服務結構和它的特征講講調用這些Web服務的幾種方式重點介紹自己團隊開發的一個C庫&#xff08;C Rest SDK&#xf…

【OpenHarmony】【交叉編譯】使用gn在Linux編譯3568a上運行的可執行程序

linux下編譯arm64可執行程序 一.gn ninja安裝二.交叉編譯工具鏈安裝1.arm交叉編譯工具2.安裝arm64編譯器 三. gn文件添加arm及arm64工具鏈四.編譯驗證 本文以gn nijia安裝中demo為例&#xff0c;將其編譯為在arm64(rk_3568_a開發板)環境下可運行的程序 一.gn ninja安裝 安裝g…

【開發心得】AstrBot對接飛書失敗的問題探究

飛書與AstrBot的集成使用中,偶爾出現連接不穩定的現象。盡管不影響核心功能,但為深入探究技術細節并推動后續優化,需系統性記錄該問題。先從底層通信機制入手,分析連接建立的邏輯與數據交互流程。基于實際現象,明確問題發生的具體場景和表現特征,進而梳理潛在影響因素,為…

Spring Boot 3.5.0中文文檔上線

Spring Boot 3.5.0 中文文檔翻譯完成&#xff0c;需要的可收藏 傳送門&#xff1a;Spring Boot 3.5.0 中文文檔

7.atlas安裝

1.服務器規劃 軟件版本參考&#xff1a; https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-release-2.2?hlzh-cn 由于hive3.1.3不完全支持jdk8,所以將hive的版本調整成4.0.1。這個版本沒有驗證過&#xff0c;需要讀者自己抉擇。 所有的軟件都安裝再/op…

c# 獲取電腦 分辨率 及 DPI 設置

using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices;/// <summary> /// 這個可以 /// </summary> class Program {static void Main(){//設置DPI感知try{SetProcessDpiAwareness(…

LangChain表達式(LCEL)實操案例1

案例1&#xff1a;寫一篇短文&#xff0c;然后對這篇短文進行打分 from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.runnables import RunnableWithMessageHist…

OleDbParameter.Value 與 DataTable.Rows.Item.Value 的性能對比

OleDbParameter.Value 與 DataTable.Rows.Item.Value 的性能對比 您提到的兩種賦值操作屬于不同場景&#xff0c;它們的性能和穩定性取決于具體使用方式。下面從幾個維度進行分析&#xff1a; 1. 操作本質對比 &#xff08;1&#xff09;OleDbParameter.Value 用途&#xf…

【Opencv+Yolo】Day2_圖像處理

目錄 一、圖像梯度計算 圖像梯度-sobal算子&#xff1a; Scharr&#xff1a;權重變化更大&#xff08;線條更加豐富&#xff0c;比Sobel更加細致捕捉更多梯度信息&#xff09; Laplacian算子&#xff1a;對噪音點敏感&#xff08;可以和其他一起結合使用&#xff09; 二、邊…

STM32通過rt_hw_hard_fault_exception中的LR寄存器追溯程序問題?

1. 問題現象 程序運行導致rt_hw_hard_fault_exception 如圖 顯示錯誤相關代碼 struct exception_stack_frame {uint32_t r0;uint32_t r1;uint32_t r2;uint32_t r3;uint32_t r12; uint32_t lr; // 鏈接寄存器 (LR)uint32_t pc; // 程序計數器 (PC)uint32_t psr; // 程序狀態…

Mac安裝配置InfluxDB,InfluxDB快速入門,Java集成InfluxDB

1. 與MySQL的比較 InfluxDBMySQL解釋BucketDatabase數據庫MeasurementTable表TagIndexed Column索引列FieldColumn普通列PointRow每行數據 2. 安裝FluxDB brew update默認安裝 2.x的版本 brew install influxdb查看influxdb版本 influxd version # InfluxDB 2.7.11 (git: …

【spring】spring中的retry重試機制; resilience4j熔斷限流教程;springboot整合retry+resilience4j教程

在調用三方接口時&#xff0c;我們一般要考慮接口調用失敗的處理&#xff0c;可以通過spring提供的retry來實現&#xff1b;如果重試幾次都失敗了&#xff0c;可能就要考慮降級補償了&#xff1b; 有時我們也可能要考慮熔斷&#xff0c;在微服務中可能會使用sentinel來做熔斷&a…

(21)量子計算對密碼學的影響

文章目錄 2??1?? 量子計算對密碼學的影響 &#x1f30c;&#x1f50d; TL;DR&#x1f680; 量子計算&#xff1a;密碼學的終結者&#xff1f;? 量子計算的破壞力 &#x1f510; Java密碼學體系面臨的量子威脅&#x1f525; 受影響最嚴重的Java安全組件 &#x1f6e1;? 后…

經營分析會,財務該怎么做?

目錄 一、業績洞察&#xff1a;從「現象描述」到「因果分析」 1.分層拆解 2.關聯驗證 3.根因追溯 二、預算管理&#xff1a;從「剛性控制」到「動態平衡」 1.分類管控 2.滾動校準 3.價值評估 三、客戶與市場&#xff1a;從「交易記錄」到「價值評估」 1.價值分層 2.…

進階智能體實戰九、圖文需求分析助手(ChatGpt多模態版)(幫你生成 模塊劃分+頁面+表設計、狀態機、工作流、ER模型)

?? 基于 ChatGPT 多模態大模型的需求文檔分析助手 本文將介紹如何利用 OpenAI 的 GPT-4o 多模態能力,構建一個智能的需求文檔分析助手,自動提取功能模塊、菜單設計、字段設計、狀態機、流程圖和 ER 模型等關鍵內容。 一、?? 環境準備 在開始之前,請確保您已經完成了基礎…

圖書管理系統的設計與實現

湖南軟件職業技術大學 本科畢業設計(論文) 設計(論文)題目 圖書管理系統的設計與實現 學生姓名 學生學號 所在學院 專業班級 畢業設計(論文)真實性承諾及聲明 學生對畢業設計(論文)真實性承諾 本人鄭重聲明:所提交的畢業設計(論文)作品是本人在指導教師的指導下,獨…

直線模組在手術機器人中有哪些技術挑戰?

手術機器人在現代醫療領域發揮著越來越重要的作用&#xff0c;直線模組作為其關鍵部件&#xff0c;對手術機器人的性能有著至關重要的影響。然而&#xff0c;在手術機器人中使用直線模組面臨著諸多技術挑戰&#xff0c;具體如下&#xff1a; 1、?高精度要求?&#xff1a;手術…

技術-工程-管用養修保-智能硬件-智能軟件五維黃金序位模型

融智學工程技術體系&#xff1a;五維協同架構 基于鄒曉輝教授的框架&#xff0c;工程技術體系重構為&#xff1a;技術-工程-管用養修保-智能硬件-智能軟件五維黃金序位模型&#xff1a; math \mathbb{E}_{\text{技}} \underbrace{\prod_{\text{Dis}} \text{TechnoCore}}_{\…