網絡:手寫HTTP

目錄

一、HTTP是應用層協議

二、HTTP服務器

三、HTTP服務

認識請求中的uri

HTTP支持默認首頁

響應?

功能完善

套接字復用


一、HTTP是應用層協議

HTTP下層是TCP協議,站在TCP的角度看,要提供的服務是HTTP服務。

這是在原來實現網絡版計算器時,實現的TCPServer.hpp,在TCP上層是HttpServer時,為了方便代碼閱讀,修改上層服務的命名為http_server。

對于HTTP服務,接收一次請求字符串,做出一次響應。?

在TCP處理服務時,每個線程要做的內容。

?

為什么要這樣處理,不同于網絡版計算器。

1.由于TCP面向字節流,不管上層是什么服務(協議),都可能會出現讀取到一個不完整請求的情況(黏包問題),所以,在網絡版計算器實現時,添加了對協議的解析過程,比如內容長度、\r\n的分割等內容,標識可以有效的幫助我們對收到的請求做處理,確保至少有一個完整的請求。

2.對于HTTP,其實有較大的概率,能得到一個完整的請求,因此,不再添加對HTTP的黏包處理過程。

二、HTTP服務器

簡單的搭建一個HTTP服務器,用Windows瀏覽器訪問,查看HTTP請求格式。

我們可以簡單的把HTTP的請求在服務器端直接打印出來。

接下來開始正式完成Http主體內容。

我們手寫的HTTP服務的主要任務是序列化和反序列化這個過程。因此,如何保證HTTP要服務的字符串是一個完整的請求,并不詳細的再去用代碼實現。

三、HTTP服務

  • 一個HTTP服務中,有HTTP請求和HTTP響應。

  • 由一個完整的string轉化為類成員變量,即結構化數據,這個過程就是反序列化。

  • 智能指針管理資源——RAII

  • ?可以輕松的得到請求行。

  • 對應請求頭和請求內容,相對復雜。?

  • 進一步反序列化,獲取更加詳細的信息?

  • 解析請求行?

  • 解析請求頭

在Print函數中添加解析后打印的代碼

認識請求中的uri

請求中沒有指明某一個服務器資源時,請求的默認就是 /

HTTP支持默認首頁

請求/ 并不表示請求服務器的根目錄,這個根目錄表示的是Web根目錄。

  • 一般在實現服務器的同路徑下,有一個保存客戶端請求資源的目錄,叫做wwwroot,即Web根目錄,請求/,即表示請求wwwroot。
  • HTTP支持默認首頁,所以每一個資源目錄下都有index.html。

基于以上兩點,請求/本質是請求HTTP服務下的 ./wwwroot/index.html。

  • 修改代碼

?

  • 拼接首頁?

?

  • 實際資源與url解耦合,我們可以自己定義path?

響應?

  • Linux支持telnet,可以自己構建完整請求。?

  • 服務器的工作是收到序列化的請求,把他反序列化后解析,按照請求構造一個序列化的響應?

因此,我們所寫HTTP服務響應只有序列化的功能。

  • ?詳細字段

  • ? 序列化函數

  • ?整理一個資源
  • Content-Type映射表

?

?

?

功能完善

  • 套接字復用

?

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

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

相關文章

論文筆記(七十八)Do generative video models understand physical principles?

Do generative video models understand physical principles? 文章概括Physics-IQ基準數據集評估協議為什么要創建一個真實世界的Physics-IQ數據集模型物理理解的評估指標動作發生在哪里?空間IoU(Spatial IoU)動作在哪里、何時發生&#xf…

AXP2101入門

目錄 核心功能與特性封裝與配置安全與可靠性 AXP2101 是一款由全志公司開發的單電池 NVDC 電源管理集成電路(PMIC),專為鋰離子/鋰聚合物單電池應用設計,適用于需要多通道電源輸出的設備。 核心功能與特性 1.輸入與充電管理 輸入…

DAY8:Oracle高可用架構深度解析與Data Guard單節點搭建實戰

引言 在數據庫領域,高可用性(High Availability)是保障業務連續性的核心要求。Oracle作為企業級數據庫的領導者,提供了RAC、Data Guard、GoldenGate三大核心方案。本文將深入剖析這些技術的實現原理,并手把手指導搭建…

游戲引擎學習第243天:異步紋理下載

倉庫 https://gitee.com/mrxiao_com/2d_game_6 https://gitee.com/mrxiao_com/2d_game_5 回顧并為今天設定階段 目前的開發工作主要回到了圖形渲染相關的部分。我們之前寫了自己的軟件渲染器,這個渲染器性能意外地好,甚至可以以相對不錯的幀率運行過場…

BBRv2,v3 吞吐為什么不如 BBRv1

為什么 BBRv2/3 測試下來吞吐遠不如 2016 年底的 BBRv1,這個事曾經提到過很多次,今天分析一下原理。注意三個事實: BBR 是一種擁塞控制算法;BBR 已經迭代到了 v3 版本;BBRv3 的 “性能” 遠不如 BBRv1. 第二點有點不…

前端項目搭建集錦:vite、vue、react、antd、vant、ts、sass、eslint、prettier、瀏覽器擴展,開箱即用,附帶項目搭建教程

前端項目搭建集錦:vite、vue、react、antd、vant、ts、sass、eslint、prettier、瀏覽器擴展,開箱即用,附帶項目搭建教程 前言:一、Vue項目下載快速通道二、React項目下載快速通道三、BrowserPlugins項目下載快速通道四、項目搭建教…

藍橋杯 15.小數第n位

小數第n位 原題目鏈接 題目描述 我們知道,整數做除法時,有時會得到有限小數,有時會得到無限循環小數。 如果我們把有限小數的末尾加上無限多個 0,它們就具有了統一的形式。 本題的任務是:在上述約定下&#xff0c…

【Docker】在Ubuntu平臺上的安裝部署

寫在前面 docker作為一種部署項目的輔助工具,真是太好用了需要魔法,不然無法正常運行筆者環境:ubuntu22.04 具體步驟 更新系統包索引 sudo apt update安裝必要依賴包 sudo apt install -y apt-transport-https ca-certificates curl softwa…

Spring Boot默認緩存管理

Spring框架支持透明地向應用程序添加緩存,以及對緩存進行管理,其管理緩存的核心是將緩存應用于操作數據的方法,從而減少操作數據的執行次數,同時不會對程序本身造成任何干擾。Spring Boot繼承了Spring框架的緩存管理功能&#xff…

數模學習:一,層次分析法

基本定位: 適用于解決評價,選擇類問題(數值不確定,需要自己結合資料數據等自己填寫)。 引入: 若要解決選擇類的問題,打分的方式最為常用——即采用權重表: 指標權重選擇1選擇2..…

模板偏特化 (Partial Specialization)

C 模板偏特化 (Partial Specialization) 模板偏特化允許為模板的部分參數或特定類型模式提供定制實現,是 靜態多態(Static Polymorphism) 的核心機制之一。以下通過代碼示例和底層原理,全面解析模板偏特化的實現規則、匹配優先級…

sql 根據時間范圍獲取每日,每月,年月的模版數據

1:獲取每日模版數據(參數也支持跨年) SELECT a.selected_date cdate FROM(SELECT adddate(1970-01-01,t4.i * 10000 t3.i * 1000 t2.i * 100 t1.i * 10 t0.i) selected_dateFROM( SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELEC…

windows上的RagFlow+ollama知識庫本地部署

一、 docker的安裝與部署 1. 下載Docker Desktop 訪問Docker官網并下載適用于Windows的Docker Desktop安裝程序。 RagFlow對docker的要求: Docker ≥ 24.0.0 & Docker Compose ≥ v2.26. docker 下載地址: https://www.docker.com/ Get Docker | Docker Docs 如下圖所…

多模態大語言模型arxiv論文略讀(三十四)

SHIELD : An Evaluation Benchmark for Face Spoofing and Forgery Detection with Multimodal Large Language Models ?? 論文標題:SHIELD : An Evaluation Benchmark for Face Spoofing and Forgery Detection with Multimodal Large Language Models ?? 論文…

Unity InputSystem觸摸屏問題

最近把Unity打包后的windows軟件放到windows觸摸屏一體機上測試,發現部分屏幕觸摸點擊不了按鈕,測試了其他應用程序都正常。 這個一體機是這樣的,一個電腦機箱,外接一個可以觸摸的顯示屏,然后UGUI的按鈕就間歇性點不了…

AI打開潘多拉魔盒?當深度偽造成為虛假信息的核動力引擎

引言:虛假信息——數字時代的“隱形武器” 在人工智能(AI)與社交媒體深度融合的今天,虛假信息(Disinformation)已成為全球社會面臨的最嚴峻挑戰之一。 source: Gartner.(2024). 2025 Top Strategic Techno…

MySQL的圖形管理工具-MySQL Workbench的下載安裝及使用【保姆級】

MySQL的圖形管理工具-MySQL Workbench的下載安裝及使用 下載安裝使用Workbench 創建數據庫Workbench 創建數據表數據表中的增刪改增加數據 刪除數據修改數據 下載 MySQL的圖形管理工具有很多,常用的有MySQL Workbench、phpMyAdmin和Navicat等軟件。我選擇了MySQL W…

Spring Security認證流程

認證是Spring Security的核心功能之一,Spring Security所提供的認證可以更好地保護系統的隱私數據與資源,只有當用戶的身份合法后方可訪問該系統的資源。Spring Security提供了默認的認證相關配置,開發者也可以根據自己實際的環境進行自定義身…

程序員魚皮最新項目-----AI超級智能體教程(一)

文章目錄 1.前言1.什么是AI大模型2.什么是多模態3.阿里云百煉平臺介紹3.1文本調試展示3.2阿里云和dashscope的關系3.3平臺智能體應用3.4工作流的創建3.5智能體編排應用 1.前言 最近魚皮大佬出了一套關于這個AI 的教程,關注魚皮大佬很久了,魚皮大佬確實在…

《Pinia 從入門到精通》Vue 3 官方狀態管理 -- 進階使用篇

《Pinia 從入門到精通》Vue 3 官方狀態管理 – 基礎入門篇 《Pinia 從入門到精通》Vue 3 官方狀態管理 – 進階使用篇 《Pinia 從入門到精通》Vue 3 官方狀態管理 – 插件擴展篇 目錄 Store 的模塊化設計4.1 多模塊結構設計? 推薦目錄結構(中大型項目) …