HTTP3原理解析和实战应用

解密HTTP CONNECT隧道:从协议原理到现代代理实践 本文深入解析HTTP CONNECT隧道的协议原理及其在现代代理实践中的应用。从HTTP/1.1时代的诞生背景到现代HTTPS代理、WebSocket代理及云原生环境中的创新用法,详细探讨了CONNECT方法的安全机制、性能优化及常见问题排查。通过代码示例和实战案例,帮助开发者掌握CONNECT隧道的核心技术与最佳实践。 阅读详情

http协议原理解析

HTTP1.1改动

keeplive

在http1.0版本中http连接会在每次请求都会发起连接, 并且每次连接在保证安全性都需要建立三次握手, 每次请求后就立即断开连接, 下次请求就还需要重新建立连接.这样就提升了请求的复杂度.

keeplive就使得每次建立连接后可以多次请求.

pipelining

改动点就是串行请求改为支持并发请求, 具体可以并发多少个连接是由浏览器决定, 一般情况下最多并发6个连接, 可以一定程度节省时间, 但是会占用一定的资源.

HTTP2.0改动

二进制帧

1.1每一行有对应的明确信息, 表示分别是什么数据. 到2.0时对应的请求是发送的二进制帧数据(二进制帧还可以进行压缩).

流

一个连接可以理解为一个通道, 流就是在这个这个通道上划分的车道, 数据包就是通行的车辆, 在不同的车道上可以并行的通过一个通道传输.通过streamid进行区分.

流可以粗略的理解成一个请求, 多个请求可以同时在一个连接上进行发送.

流优先级、流依赖问题

有些业务为什么从HTTP1.1更新到HTTP2.0之后反而变慢了?

流优先级: 比如请求一个网站需要发同时100个请求, 服务端会有一个优先级的过程, 流的优先级是业务层定义的. 如果业务层定义的不是很合理, 那么就会导致有些资源会一直在blocking的状态. 只有在处理好优先级更高的资源之后才会处理优先级低的. 优先级低的一直那不到回应就会等的时间很长.

流依赖: 一条流会依赖另外一条流, 比如请求1拿到资源, 但是必须依赖请求0拿到资源之后才能进行处理, 如果依赖的资源很慢那么当前流的处理就也会很慢.

队头阻塞问题

TCP有一个特点, 必须保证有序性.

如果Request1的数据先发送Request2后发送, 但是Request1中的包有丢失的, Request2包已经达到了客户端, 这时也不能交付给上层业务, 只有等丢失的包重传之后才会交付给上层业务.

所以HTTP2中一个流的包丢了会影响一个连接中所有流的数据包.

适合哪些场景

  • 使用服务器推送数据
  • 网路质量好, 丢包率低的场景
  • 并发量比较大, 小资源比较多
  • 有明显的优先级或互相依赖的请求(如果优先级不明确不好界定, 那么可能效果达不到很好的效果)

HTTP3.0

HTTP/2和HTTP/3对比

从HTTP2.0中的请求流程可以看出, 为了一个1RTT的请求数据前面需要建立1个DNS+4RTT的流程才能拿到相应.

HTTP2.0 和 HTTP3.0 协议对比

实际上就是在UDP的基础上将TCP的可靠性和TLS1.3融合进来实现QUIC协议, QUIC协议是在用户态. QUIC虽然实现是在用户态, 但是还是认为QUIC协议是一个传输层协议, 因为它的功能主要还是在传输数据.

HTTP3.0才是应用层的协议.

HTTP/3的核心在于QUIC协议

事实上, 我们并不是真的需要新的HTTP版本, 而是需要对底层的传输协议(TCP)进行升级.

quic协议原理

此处为语雀内容卡片,点击链接查看:https://www.yuque.com/yyqcy/rmskr5/mlfnzath422xlkmo

0RTT握手

连接迁移

更优秀的拥塞控制算法

quic中丢包重传包的序号是单调递增的, 而TCP中的丢包重传包序号是不变的.

TCP中因为包序号是不变的, 那么重传的包和延时的包都收到后, 就不知道哪一个是开始的包, 不知道哪一个是后来的, 这样就会出现重传包的二义性. 重传包的二义性直接导致RTT计算不准确.从而影响拥塞控制算法.

两级流量控制

QUIC的滑动窗口的大小仅仅由可用窗口来决定, 不会受到丢包的影响. 只要可用窗口还有就能够发数据和接收数据.

协议竞速

业内统计数据全球有7%地区的运营商对UDP有限速或者禁闭,除了运营商还有很多企业、公共场合也会限制UDP流量甚至禁用UDP。这对使用UDP来承载QUIC协议的场景会带来致命的伤害。

对此,可以采用多路竞速的方式使用TCP和QUIC同时建连。除了在建连进行竞速以外,还可以对网络QUIC和TCP的传输延吋进行实时监控和对比,如果有链路对UDP进行了限速,可以动态从QUIC切换到TCP。

性能效果

通过弱网实验测试,QUIC在开启O-RTT时,其延迟要比HTTP降低20%,比HTTPS要降低50%以上。

应用场景

  • 连接复用率低: 连接迁移的场景
  • 小文件下载场景
  • RTT比较长, 丢包率较高(弱网环境)
  • 必须要加密传输
  • 非特别敏感业务(UDP安全性可能存在问题)
  • 连接迁移强需求(语音业务: 语音助手)

代码实现

全面掌握HTTP协议:从基础到高级应用 本专栏全面解析HTTP协议,涵盖基础概念、请求响应、头信息、缓存机制、安全机制及HTTP/2/3新特性。通过理论讲解+代码示例(Python/Java/Node.js等)的形式,帮助开发者掌握HTTP协议的核心技术点与实践技巧。内容包含URL解析、状态码处理、Postman调试、缓存优化、HTTPS配置及安全防御等实战场景,并提供常见问题解决方案。适合Web开发初学者和进阶者系统学习HTTP协议,提升网络编程能力与应用性能优化水平。 阅读详情

相关推荐

客户端到服务器通信全解析:从HTTP/3到WebSocket实战指南

客户端与服务器通信从HTTP/3到WebSocket的演进,展示了性能与实时性的突破。HTTP/3基于QUIC协议,通过多路复用、低延迟连接优化传输效率;而WebSocket通过持久化全双工连接,实现低开销的双向实时数据交互。两者结合传统HTTP与现代需求,适用于API调用、实时聊天、IoT等场景,成为现代Web架构的核心技术。

全栈 1619

深入解读HTTP/3的原理及应用

背景 在万维网诞生之时,万维网仅仅是一群交换超文本文件的计算机。在计算机之间交换文件是一个简单的程序,包括请求和响应。在此基础上设计了一个简单的基于文本的协议。HTTP(超文本传输协议)应运而生。后来,它被起草成了一个标准化的IETF协议,定义在RFC 1945中,也被称为HTTP/1.0。 多年来,HTTP从HTTP/1.0发展到HTTP/1.1,再到HTTP/2。在每一次迭代中,协议都增加了新的功能,以处理大量的需求,如应用层需求、安全考虑、会话处理和媒体类型等。要深入了解HTTP/2及其从HTTP/1

任我行的博客 911

解析Python爬虫中的urllib与urllib3:底层原理与实战应用

urllib与urllib3作为Python爬虫的“底层基石”,其核心价值不在于“比requests更易用”,而在于“让你理解HTTP请求的本质”——从TCP连接建立、请求报文构建,到响应解析,每一步都可追溯、可定制。实战中,不必拘泥于“非此即彼”:简单场景用urllib快速上手,复杂场景用urllib3提升效率,高层需求用requests简化开发。但理解这两个库的底层原理,能让你在遇到requests。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1015

HTTP3(QUIC)详解

http2利用二进制分帧实现多路复用,解决的是HTTP层(http1.1)的队头线性阻塞 HTTP/3是第三个主要版本的HTTP协议。与其前任HTTP/1.1和HTTP/2不同,在HTTP/3中,将弃用TCP协议,改为使用基于UDP协议的QUIC协议(快速的UDP网络连接)实现。 此变化主要为了解决HTTP/2中存在的队头阻塞问题。由于HTTP/2在单个TCP连接上使用了多路复用,受到TCP拥塞控制的影响,少量的丢包就可能导致整个TCP连接上的所有流被阻塞。

qq_62311779的博客 7821

解析HTTP3在网络与通信中的安全性

随着互联网的迅猛发展,网络应用对传输速度、可靠性和安全性的要求越来越高。HTTP作为互联网数据传输的基础协议,其版本不断演进以适应这些需求。HTTP3作为HTTP协议的最新版本,旨在提供更高效、更安全的网络通信解决方案。本文的目的是深入解析HTTP3在网络与通信中的安全性,探讨其安全机制的原理、实现和应用,范围涵盖HTTP3安全特性的各个方面,包括加密算法、密钥交换、认证机制等。本文将按照以下结构展开:首先介绍HTTP3的核心概念与联系,包括其与QUIC协议的关系和整体架构;

AI算力网络与通信的博客 1156

全面解析HTTP原理及爬虫应用案例

HTTP(HyperText Transfer Protocol,超文本传输协议)是应用层协议,用于传输超媒体文档,如HTML。作为互联网通信的核心,它构建在TCP/IP协议之上,保证了数据的可靠传输。

weixin_42613360的博客 1422

深入解读HTTP3的原理及应用

HTTP3是HTTP协议的最新版本。从诞生之初,HTTP就是交换超文本文档的首选应用层协议。多年来,为了跟上互联网的发展,以及WWW上交换的内容种类增加,HTTP进行了几次重大升级。本文...

weixin_45583158的博客 5665

matsim教程及其案例

MATSim 是一个强大的交通仿真工具,适合研究交通政策、出行行为优化和城市规划。建议从官方示例入手,逐步尝试修改参数和扩展功能。遇到问题时,优先查阅官方文档和社区讨论。(Multi-Agent Transport Simulation Toolkit)的教程和案例资源整理,涵盖基础入门、核心概念、实际应用案例及学习路径。MATSim 是一个开源的、基于多智能体的交通仿真框架,用于模拟城市交通系统中的出行行为、交通流量和交通政策影响。

weixin_70682362的博客 1094

HTTP3原理和实践

本文转载自微信公众号【前端早读课】 一、 HTTP历史 不知不觉HTTP已经发展到第三代,一张图说明http的发展史 HTTP2是基于TCP网络传输协议,HTTP3是基于UDP网络传输协议,下面来说这两个 QUIC(Quick UDP Internet Connections,快速 UDP 网络连接) 基于 UDP,借助UDP 的速度与效率。同时也整合了 TCP、TLS 和 HTTP/2 的优点,并加以优化。下图是HTTP2、HTTP3的协议概览 二、TCP和UDP的差别 HTTP2和HTTP3建立连接

qq_36174666的博客 1135

Abaqus小白必看:用Micromechanics Plugin轻松搞定RVE周期性边界条件(附避坑指南)

本文为Abaqus初学者提供了使用官方Micromechanics Plugin插件高效实现复合材料代表性体积单元分析的完整指南。文章详细讲解了从插件安装、模型准备、周期性边界条件自动设置到结果验证的全流程,并重点分享了处理复杂模型和避免常见错误的实用技巧,帮助用户大幅提升RVE分析效率与准确性。

weixin_28363123的博客 799

台达B3伺服电机485通讯的调试过程

最近上了一项目,没办法直接把B3伺服接到PLC上去,怎么办?偶说试下直接电脑通过100多米的485线控制好了,定型前的测试就这样展开了。 1、焊CN1口 如果不安装CN1,是开不了机的,要报很多错误,比如SERV EMG ALERT, 上限报警,下限报警什么的,怎么办?直接焊好CN1头子吧,烦了点,但是必要的。 主要接的是11,9,10,32,31,30几个脚,按照图上连接好就是了。 2、 接线路 按照上面的图,接上伺服电机线,编码器线,电源线,包括限位常闭开关、485连线等,就完..

shidong01的博客 1万+

HTTP/3与QUIC核心原理、应用场景及落地部署实战解析

网络传输优化是提升应用体验的关键一环,而HTTP/3与QUIC正是当前最受关注的技术方案。从传输层基础概念来看,TCP虽然可靠,但存在队头阻塞、握手延迟和连接迁移困难等先天限制。QUIC协议基于UDP重新实现了可靠传输,通过连接ID实现网络切换不中断,利用0-RTT握手降低建连延迟,并引入独立流机制彻底解决队头阻塞问题。这些特性在弱网视频点播、移动办公远程访问、跨地域网页加载等场景中均展现出显著价值。本文从协议演进原理出发,解析QUIC的关键设计,结合真实环境下的性能对比与部署选型,介绍Caddy、Ngin

weixin_31421613的博客 345

多层感知机 Multilayer Perceptron | MLP

本文主要简单介绍了多层感知机的基本概念,优缺点,应用场景,建模时的注意事项,评价指标,实现方法,python示例和模型的参数等。

JasonH2021的博客 3万+

3步掌握MCP HTTP模式:为什么Streamable HTTP是未来的“快递员”?

文章摘要: 本文详细介绍了MCP协议中的HTTP模式,通过3个步骤帮助读者掌握其核心概念与实现方法。首先,文章解释了HTTP模式的基本原理,并通过“快递员”类比形象化其工作方式。接着,提供了Python和Java环境下的搭建指南,包括依赖安装、代码编写与测试流程。最后,文章深入分析了传统HTTP与Streamable HTTP的差异,并展示了Streamable HTTP在实时数据传输中的应用。无论是初学者还是有经验的开发者,都能从中获得实用的技术指导。

java专栏 2427

LeGO-LOAM运行kitti数据集

文章目录1. kitti-lego-loam2. 改动3. 实验结果4. evo轨迹测评 1. kitti-lego-loam 链接:kitti-lego-loam kitti-lego-loam提供了将kitti序列转化成rosbag的代码,在kittibag中. 需要注意下数据文件的存放顺序,以00序列为例: datafolder          |____results          &

Zlp19970106的博客 8704

SAP MM委外加工保姆级教程:从BOM配置到MIGO发货的完整避坑指南

本文提供SAP MM模块中委外加工的完整操作指南,涵盖从BOM配置到MIGO发货的全流程。详细解析委外采购和工序委外两种模式,包括主数据配置、采购订单创建及物料移动等关键步骤,帮助用户规避常见错误,提升供应链管理效率。特别适合制造业企业实施SAP外包业务参考。

weixin_26905487的博客 528

《Python3 网络爬虫开发实战》:HTML基本原理

我们先观察第一个网络请求,即 www.baidu.com,其中各列的含义如下。第一列 Name:请求的名称,一般会将 URL 的最后一部分内容当作名称。第二列 Status:响应的状态码,这里显示为 200,代表响应是正常的。通过状态码,我们可以判断发送了请求之后是否得到了正常的响应。第三列 Protocol:请求的协议类型,这里 http/1.1 代表是 HTTP 1.1 版本,h2 代表 HTTP 2.0 版本。第四列 Type:请求的文档类型。

qq_34589842的博客 1147

24、语料库与科技术语库建设

本文探讨了语料库在科技术语库建设中的关键作用,重点分析了词性标注、索引、搭配、词形还原、频率计数、词汇排序和类型-标记分析等核心技术的应用与挑战。文章以印度语言为例,指出其语料库处理工具匮乏的现状,强调需开发适配本地语言特征的技术,并提出一个整合多种处理步骤的综合流程,旨在推动印度语言科技术语数据库的系统化建设,促进科技语言的发展与应用。

cola5的博客 92

eCapture UDP协议支持:QUIC和HTTP/3流量捕获

随着互联网技术的快速发展,传统的TCP-based HTTP协议逐渐显露出性能瓶颈。为了应对这一挑战,QUIC(Quick UDP Internet Connections)协议应运而生,它基于UDP协议构建,提供了更低的连接延迟和更好的多路复用能力。HTTP/3作为QUIC的应用层协议,正在成为下一代Web标准。 然而,这种技术演进给网络安全监控带来了新的挑战。传统的TLS/SSL解密工具主要...

gitblog_00663的博客 407

使用静态库在嵌入式系统中进行开发

静态库是一种包含预编译对象代码的文件,它可以与应用程序链接在一起,并在编译时将库的代码复制到最终的可执行文件中。静态库是包含预编译对象代码的文件,可以与应用程序链接在一起,并在编译时将库的代码复制到最终的可执行文件中。需要注意的是,由于嵌入式系统的资源限制,开发人员应该仔细选择需要包含在静态库中的功能,并避免引入不必要的依赖关系。需要注意的是,由于嵌入式系统的资源限制,开发人员应该仔细选择需要包含在静态库中的功能,并避免引入不必要的依赖关系。的静态库文件,可以在嵌入式系统的应用程序中使用它了。

ZrElixir的博客 203

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

HTTP协议全解析:从原理到Web应用实战

HTTP(超文本传输协议)是Web世界的基石,定义了客户端与服务器之间的通信规则,承载着互联网中90%以上的资源传输。从静态网页到动态应用,从文件下载到API交互,HTTP无处不在。本文基于HTTP核心特性与协议规范,全面讲解HTTP的起源与核心技术、协议特点、Web文档构成、通信组件、URI/URL机制,深入拆解请求/响应报文结构、RESTful设计风格、HTTPS加密原理等关键知识点,结合实战场景(工具使用、报文示例),帮你从底层原理到实际应用,彻底掌握HTTP协议的设计逻辑与开发实践。前置知识。

weixin_42388661的博客 4303

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

HTTP协议深度解析与实现:从请求响应到HTTP/3的完整指南

本文基于多年Python实战经验,深度解析HTTP协议从基础到高级的全栈技术体系。内容涵盖请求/响应模型状态管理机制HTTP/2多路复用HTTP/3 QUIC协议等核心技术,通过架构流程图和完整代码案例,展示如何从零实现高性能HTTP服务器。文章包含协议演进分析、性能优化技巧和企业级实战案例,为开发者提供从理论到实践的完整HTTP协议解决方案。

七夜zippoe的博客 2263

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Websocket、HTTP/2、HTTP/3原理解析

因为他们都是一个独立的流,TCP层看到的只是一个连接的字节流,而HTTP/2层则能将这些字节流根据流ID重新映射到不同的请求和响应,解决对头阻塞问题。的对头阻塞问题,但TCP层面中的对头阻塞问题仍然存在,HTTP/3则彻底解决了TCP层面的队头阻塞问题,并进一步优化连接建立和传输效率,HTTP/3最大的变化就是放弃TCP,转而基于UDP协议之上的QUIC协议。为应对HTTP/1.1的对头阻塞问题以及性能优化,HTTP/2针对其TCP连接增加了多路复用的功能,实现了在一个TCP连接上进行并行传输的功能。

IUGEI的博客 899

深入解析HTTP网络:从原理到实践

从HTTP/1.1到HTTP/3,再到HTTPS的普及,HTTP网络协议已经深刻影响了现代网络应用的发展。HTTP是无状态的,这意味着每个请求都是独立的,不依赖于之前的请求。HTTPS(HyperText Transfer Protocol Secure)是HTTP的安全版本,它在HTTP和TCP之间添加了SSL/TLS协议层,用于数据加密和身份验证。HTTP/3采用基于UDP的QUIC协议,进一步减少了连接建立的延迟,并提高了传输的可靠性。状态码是HTTP协议的重要部分,用于表示请求的处理结果。

fudaihb的博客 1345

http 和 https 的区别是什么?从原理到实战的完整详解

HTTP与HTTPS核心差异解析:HTTP是明文传输协议,存在数据窃听、篡改和伪造风险;HTTPS在HTTP基础上加入TLS/SSL加密层,通过443端口传输加密数据,具备数据加密、完整性校验和身份认证三大安全能力。HTTPS需要完成TCP三次握手和TLS握手(1-2次往返),虽增加性能开销但大幅提升安全性。现代TLS 1.3协议已优化握手过程,性能接近HTTP。HTTPS已成为网站安全标配,满足合规要求并提升SEO权重。

2502_92311356的博客 5612

3. HTTP状态码终极指南:从原理到实战的深度解析

《HTTP状态码终极指南》深度解析五大类状态码及其应用场景。1XX为信息响应,表示请求处理中;2XX为成功响应,确认请求完成;3XX为重定向,需进一步操作;4XX是客户端错误,如400参数错误、404资源不存在;5XX为服务器错误,如500服务异常、504网关超时。文章提供了状态码记忆口诀、RESTful API设计规范及错误排查流程,强调状态码在Web开发中的核心作用。掌握这些代码有助于快速定位问题,优化系统设计,提升开发效率。

Tom的专栏 1446
上一篇: QUIC基础学习
下一篇: MCP协议
Box_clf
博客等级 码龄9年 252粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值