Http(自寫)

作為一個程序員,假設我們要在a電腦的進程里發一段數據到b電腦,一般使用socket編程,可選項也就tcp,udp二選一

socket本質上就是一個代碼庫

tcp有粘包問題(字節流),純裸tcp不能之際拿來使用

所以我們需要加入一些自定義的規則,用來區分消息邊界,比如加入消息頭(消息頭里寫清除一個完整的包長度是多少,還可以放消息體是否被壓縮過,消息體格式之類的)

自定義的規則就是所謂的協議,每個使用tcp的項目都可能會定義一套這樣的協議,基于tcp衍生了非常多的協議,比如http,rpc。tcp是傳輸層協議,而基于tcp造出來的http和各類rpc協議只是定義了不同消息格式的應用層協議

http協議

http協議又叫作超文本傳輸協議

rpc

遠程過程調用,本身并不是一個具體的協議,而是一種調用方式,就是希望像調用本地方法那樣調用遠程方法

一般的軟件,客戶但需要跟服務端建立連接收發消息,此時都會用到應用層協議,在這種cs架構下,可以使用自家造的rpc協議

但是瀏覽器,不僅要能訪問自家公司的服務器,還需要訪問其他公司的網站服務器,所以需要http統一標準。所以多年前,http主要用于bs架構,但是現在已經分的沒那么清除。

要向某個服務器發起請求,得先建立連接,所以得先知道ip地址和端口,找到服務對應的ip和端口的過程就是服務發現。http中你知道服務的域名即可通過dns服務去解析。rpc一般會有專門的中間服務去報仇服務名和ip信息

Http 1.1

一次一份是核心,因為發送一個http請求的時候,是需要等收到Http響應才可以發送下一個Http請求。一個網頁一般由多個文件組成,最基本的就是html css js和圖片文件。對于http協議來說,我們打開一個網頁需要進行tcp三次握手,建立起tcp連接,才正式進行請求,服務器會先發送html文件給我們,其他文件不會發送給我們,我們的瀏覽器在收到html文件以后根據html里面的內容,再向服務器以此請求css js等文件,整個過程都是瀏覽器在幫我們完成,所以對用戶的直接感受就是只有一次請求,如果在請求隊伍里,有一個文件沒有收到,后面的文件也沒法接收了,這就會造成http隊頭阻塞。對于http1.1來說默認是持久連接的,即保持這個tcp連接,不需要對每個請求再來一輪tcp握手,請求和響應都放在同一個連接里面,但是只有一個連接肯定太慢了,連接太多又怕會造成DDos攻擊,因此各家瀏覽器允許的持久連接數都不太相同

瀏覽器會限制同一連接的請求數,限制每個域的連接數

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

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

相關文章

C#使用OpenVinoSharp和PP-Human進行行人檢測

效果 項目依賴 OpenCvSharp 4.11.0.20250507 OpenVINO.CSharp.Windows 2024.0.0.1 主要代碼 using OpenCvSharp; using OpenVinoSharp; using System; using System.Windows.Forms;namespace HelloPPHuman {public partial class Form1 : Form{public Form1(){InitializeCo…

四、Scala深入面向對象:類、對象與伴生關系

在前幾節中,我們學習了 Scala 的基礎語法和流程控制。現在,我們將深入探索 Scala 作為一門純粹的面向對象語言的核心。在 Scala 中,萬物皆對象,沒有像 Java 那樣的原始類型和靜態成員的區分。本節將重點介紹如何定義對象的藍圖&am…

【大語言模型 58】分布式文件系統:訓練數據高效存儲

分布式文件系統:訓練數據高效存儲 關鍵詞:分布式文件系統、HDFS、Lustre、GlusterFS、數據本地性、I/O優化、存儲架構、大數據存儲、訓練數據管理、存儲性能調優 摘要:本文深入探討大語言模型訓練中的分布式文件系統技術,從存儲架…

【科研繪圖系列】R語言繪制散點圖以及線性回歸擬合曲線圖

禁止商業或二改轉載,僅供自學使用,侵權必究,如需截取部分內容請后臺聯系作者! 文章目錄 介紹 加載R包 數據下載 函數 導入數據 數據預處理 畫圖 總結 系統信息 介紹 數據導入 代碼的開始部分涉及多個數據集的導入,這些數據集涵蓋了不同類型的生態學數據,包括實驗室培養…

SQL 數據庫操作語言詳解

1. SQL 語言概述SQL(Structured Query Language)是用于管理關系型數據庫的標準語言,主要分為以下幾個子語言:- DQL(數據查詢語言):SELECT - 用于數據查詢 - DML(數據操作語言&#x…

積分變換的前世今生

積分變換常應用于解微分方程微分方程的解法:時域經典法;頻域變換法;“積分變換”最初并不是為了解微分方程,而是出于更“純粹”的數學動機——理解函數的結構、求解代數或幾何問題,以及簡化復雜的積分運算。微分方程的…

《Linux——gflags》

一、什么是gflags? gflags 是一個由 Google 開發的命令行參數解析庫,主要用于在 C(也支持其他語言)程序中便捷地處理命令行參數。它的核心作用是幫助開發者快速定義、解析和使用命令行選項,避免手動編寫繁瑣的參數解析…

編譯器的前端中端和后端

前面說的詞法分析和語法分析,確實是編譯器前端 (Front End) 最核心的兩個部分。但前端的工作還沒有結束。編譯器各階段劃分 一個完整的編譯器通常可以分為三個部分:前端、中端 (Middle End)、后端 (Back End)。 前端 (Front End) 核心職責: 理解源代碼。…

黑馬Java進階教程,全面剖析Java多線程編程,并發和并行,筆記02

黑馬Java進階教程,全面剖析Java多線程編程,并發和并行,筆記02 一、并發和并行 并發:在同一時刻,有多個指令在單個CPU上交替執行 并行:在同一時刻,有多個指令在多個CPU上同時執行 二、為什么有…

20250908 背包DP總結

引子 ~ 我們都有一個家,名字叫背包 ~ 背包DP 顧名思義,背包DP是用來解決背包最值問題的。題目會給出背包的容量,以及幾個物品的屬性,比如重量,價值,限額等等,具體是什么看題目。 01背包 01…

Redis持久化之RDB:快照機制原理、配置與最佳實踐

Redis持久化之RDB:快照機制原理、配置與最佳實踐 1. RDB持久化概述 1.1 什么是RDB RDB(Redis Database)是Redis的默認持久化方式,它在指定的時間間隔內生成數據集的快照(snapshot),并將快照保…

daily notes[44]

文章目錄基礎references基礎 hello,world是幾乎所有編程語言的第一例子,rust也不例外。但和其它語言不一樣,Rust的源碼最好擁有自己的項目目錄。 $ mkdir ~/pro $ cd ~/pro $ mkdir helloWorld $ cd helloWorld源代碼文件名為main.rs,內容如…

JavaScript對象創建方式完全指南:從原始到現代的演進之路

前言 作為一名前端開發者,JavaScript中對象創建是很重要。在JavaScript這門基于原型的語言中,對象幾乎無處不在。今天,我將帶領大家回顧JavaScript對象創建的7種方式,從最原始的字面量到現代的ES6 class,每一步演進都解…

基于單片機的無線水塔監控系統設計(論文+源碼)

本設計為基于單片機的無線水塔監控系統設計,主要由以下幾部分組成:均采用STC89C52RC單片機為主控;主機:NRF24L01無線通訊模塊,1602LCD液晶顯示屏。從機:NRF24L01無線通訊模塊,水位傳感器&#x…

凌晨0-3點不睡,你熬的不是夜,是人生!

“熬夜”這個詞,早已成為現代生活的常態。有人為了工作加班到深夜,有人為了娛樂刷劇到天明,但你知道嗎?熬夜最“要命”的時間段,其實是凌晨0點到凌晨3點。別以為只是少睡幾個小時而已,這個時間段不睡&#…

大語言模型基石:Transformer

一、引言 如今火爆的 GPT、LLaMA、通義千問、ChatGLM 等大語言模型,背后都離不開一個核心架構——Transformer。 2017 年,Google 在論文《Attention Is All You Need》中首次提出 Transformer 模型,徹底改變了自然語言處理的發展方向。它摒…

【算法】【鏈表】160.相交鏈表--通俗講解

算法通俗講解推薦閱讀 【算法–鏈表】83.刪除排序鏈表中的重復元素–通俗講解 【算法–鏈表】刪除排序鏈表中的重復元素 II–通俗講解 【算法–鏈表】86.分割鏈表–通俗講解 【算法】92.翻轉鏈表Ⅱ–通俗講解 【算法–鏈表】109.有序鏈表轉換二叉搜索樹–通俗講解 【算法–鏈表…

MySQL——庫的操作

1、創建數據庫語法:CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name這里的CHARACTER SET表示指定數據庫采用的字符集…

Python ast模塊(Abstract Syntax Trees,抽象語法樹)介紹及使用

文章目錄 核心概念 基本使用流程 常用節點類型 示例代碼 實際應用場景 注意事項 `ast.literal_eval()` 功能說明 適用場景 使用示例 限制與安全特性 與 `eval()` 的對比 總結 Python 的 ast 模塊( Abstract Syntax Trees,抽象語法樹)允許你解析、分析和修改 Python 代碼的…