Nginx理论篇与相关网络协议

Nginx是什么?

Nginx是一款由C语言编写的高性能、轻量级的web服务器,一个线程能处理多个请求,支持万级并发。

优势:I/O多路复用。

I/O是什么?

I指的是输入(Input),O是指输出(Output)。

这里还涉及到一个I/O流的概念。I/O流可以抽象地理解为数据的序列以流的形式进行传输,主要处理设备之间的数据传输。传输数据就是一个读取和写入的过程。

I/O多路复用的原理是什么?

单个线程通过限制每个I/O流,以类似拨开关的方式去管理多个会话。

理解起来就是当第一个请求等待数据库处理时,线程又去处理其他请求;当之前的请求返回时,线程又继续处理之前的请求。

这样的处理请求有个优点就是能增加服务器的吞吐量,也就是在单位时间内处理了更多的请求,还减少了系统消耗。

多路复用的实现方式:epoll

特点:异步、非阻塞。

异步与非阻塞:指的是线程在将请求发送给数据库处理时,它不会一直等待请求返回,这就是异步。而它不等待请求返回就去休息或者做别的事情,这就是非阻塞。

这里还涉及到一个叫异步回调:指的是服务端中每进来一个请求,会有一个线程去处理。但当它将请求发送给数据库时,数据库无法立即将请求返回,这就发生了阻塞。这时线程不会一直等着,而是先去注册一个事件。一旦请求返回,就会触发之前注册的事件,系统会通知这个线程回来接着处理之前的请求。


HTTP协议

HTTP是一种面向连接的、建立在TCP上的无状态连接,服务于web通信。

HTTP工作流程:

HTTP先建立客户端与服务端的连接,再将客户端的请求发送给服务端,其中包含网址客户端等信息。服务端接收到请求后,按照请求给客户端调用对应的文件,同时给客户端发送一个相应信息。当客户端接收到服务端所返回的信息后,将请求到的资源通过浏览器显示出来并断开连接。

常见的状态码:

HTTP的不同版本类型

HTTP/0.9:只能执行简单的GET请求方式,并且只能访问HTML格式的资源。

HTTP/1.0:在0.9版本的基础上增加了POST和HEAD请求方式,可以访问很多不同格式的资源,支持多种数据方式,也支持高速缓存,但只能支持短连接,每一次请求都会经历三次握手与四次挥手,发送速度较慢。

HTTP/1.1:在结束一个完整的HTTP请求之后,,TCP默认不关闭,可以在下一次HTTP请求的时候使用这个TCP连接,完美的支持长连接。但是到了服务端又会发生阻塞。

HTTP/2.0:解决了1.1版本的问题,支持服务端多个进程同时处理,从请求到响应形成了一个顺畅的闭环。

HTTP系统组成:

一个完整的HTTP请求,就要有必要的组件:客户端、代理、服务器端。

请求报文:

由四部分组成,分别是请求行、请求头部、空行、请求数据。

请求行:请求方式、URL、协议版本。

请求头部:客户端发送给服务器端的信息,如客户端所支持的语言、字符集、MIME等。

空行:表示报文头部到此为止,用来分隔请求头部与请求数据。

请求数据:与请求报文一起发送的数据,也属于报文中的一部分,与请求方式有关。

响应报文

由状态行、响应头部、响应正文三部分组成。

状态行又分为三部分:协议版本、状态码、状态码描述。

响应头部的内容就是响应正文的相关信息,响应正文就是服务端返回给客户端的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/43313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【安全设备】日志审计

一、什么是日志审计 日志审计是一站式的日志数据管理平台,主要致力于提供事前预警、事后审计的安全能力, 通过对日志数据的全面采集、解析和深度的关联分析,及时发现各种安全威胁和异常行为事件。日志审计是指通过集中采集信息系统中的各类信…

解决:Android Studio 突然打不开!提示Failed to create JVM:error code -1

Android studio1.5 一直用得好好的,突然有一天打不开,并提示: 可是系统配置中,java的配置也是正常的。 解决方法: 修改安装目录下的studio64.exe.vmoptions 文件 直接将文件内容改成: -Xms128m -Xmx512m…

谷歌+火狐浏览器——实现生成二维码并实现拖动——js技能提升

最新遇到的问题:前两个二维码拖动不了,只有第三个一维码生成后,才可以拖拽 【问题】:出现在都是绝对定位,但是没有指定z-index导致的。 解决办法:在方法中添加一个变量 renderDrag(id) {var isDragging f…

Python CuPy库:GPU加速的科学计算

更多Python学习内容:ipengtao.com 在数据科学和机器学习领域,处理大规模数据集常常需要巨大的计算资源。Python的CuPy库通过提供一个类似NumPy但运行在NVIDIA GPU上的接口,大幅提升了数组操作的速度,使得复杂的数值计算变得更加高…

基于FPGA的图像边缘检测(OV5640)

一、简介 1.应用范围 边缘主要存在于图像中目标与目标之间,目标与背景之间,区域与区域之间。 边缘检测的目的就是找到图像中亮度变化剧烈的像素点构成的集合,表现出来往往是轮廓。如果图像中边缘能够精确的测量和定位,那么&…

GaussDB关键技术原理:高性能(四)

GaussDB关键技术原理:高性能(三)从查询重写RBO、物理优化CBO、分布式优化器、布式执行框架、轻量全局事务管理GTM-lite等五方面对高性能关键技术进行了解读,本篇将从USTORE存储引擎、计划缓存计划技术、数据分区与分区剪枝、列式存…

Redis 7.x 系列【19】管道

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 往返时间2. 管道技术3. 代码演示4. 其他批处理4.1 原生批处理命令4.2 事务4.3 脚本…

240708_昇思学习打卡-Day20-MindNLP ChatGLM-6B StreamChat

240708_昇思学习打卡-Day20-MindNLP ChatGLM-6B StreamChat 基于MindNLP和ChatGLM-6B实现一个聊天应用,本文进行简单记录。 环境配置 %%capture captured_output # 实验环境已经预装了mindspore2.2.14,如需更换mindspore版本,可更改下面mi…

Java | Leetcode Java题解之第224题基本计算器

题目&#xff1a; 题解&#xff1a; class Solution {public int calculate(String s) {Deque<Integer> ops new LinkedList<Integer>();ops.push(1);int sign 1;int ret 0;int n s.length();int i 0;while (i < n) {if (s.charAt(i) ) {i;} else if (s…

实施OPC UA网关以加速设备与MES系统之间的连接

在现代工业自动化中&#xff0c;信息化和智能化已成为企业提升竞争力的关键因素&#xff0c;为了实现生产过程的自动化和管理的高效化&#xff0c;工业自动化系统&#xff08;如OPC UA&#xff09;与制造执行系统&#xff08;MES&#xff09;的集成变得尤为重要。OPC UA&#x…

Pycharm 出现sdk is not defined for run configuration解决办法

第一步&#xff1a;运行->编辑配置 第二部&#xff1a;重新选择一下脚本路径和Python解释器 第三步&#xff1a;保存。重新运行

WebKit简介及其神秘的工作流程

在信息时代的巨浪中&#xff0c;互联网已经深深地渗透到了我们生活的每一个角落。作为连接我们与这个庞大网络世界的桥梁&#xff0c;网页浏览器无疑成为了我们生活中不可或缺的一部分。而在这些浏览器的背后&#xff0c;往往隐藏着一些强大而神秘的引擎&#xff0c;它们为浏览…

鸿蒙系统:未来智能生态的引领者

在当今这个日新月异的互联网领域&#xff0c;操作系统作为连接硬件与软件的桥梁&#xff0c;其重要性不言而喻。随着华为鸿蒙系统&#xff08;HarmonyOS&#xff09;的崛起&#xff0c;一场关于操作系统未来的讨论再次被推向高潮。 鸿蒙OS&#xff0c;华为的全新力作&#xff…

K8S篇之Ingress详解以及用法说明

一、Ingress简介 Ingress 是 Kubernetes 中用于管理和配置从集群外部访问集群内部服务的资源对象。它通过定义路由规则来控制外部流量的访问方式&#xff0c;支持基于 HTTP 和 HTTPS 的高级路由功能和安全性配置。 Ingress是一种HTTP方式的路由转发机制&#xff0c;为K8S服务配…

AGAST (角点检测)

AGAST检测原理 AGAST(Adaptive and Generic Accelerated Segment Test)算法是Elmar于2010年提出的特征检测算法,改进了FAST(Features from Accelerated Segment Test)特征检测方法,使其具有更快的速度和更好的鲁棒性。AGAST算法提供了比FAST算法更详细的特征标记方式和判断依…

【Python_GUI】tkinter模块、创建空白窗口

tkinter是使用Python进行窗口视觉设计的模块&#xff0c;它是Python的标准Tk GUI工具包的接口&#xff0c;在安装Python时&#xff0c;就自动安装了该模块。 使用tkinter模块开发时&#xff0c;最核心的就是各种组件的使用。生活中玩积木时&#xff0c;通过将不同形状的木板进…

A股本周在3000点以下继续筑底,本周依然继续探底?

夜已深&#xff0c;市场传来了3个浓烈的消息&#xff0c;炸锅了&#xff0c;恐有大事发生&#xff0c;马上告诉所有人&#xff1a; 消息面&#xff1a; 1、中国经济周刊首席评论员钮文新称&#xff1a;不要等中小投资者都彻底希望&#xff0c;销户离场了&#xff0c;才发现该…

【APK】Unity出android包,报错 Gradle build failed.See the Console for details

参考大佬的博客&#xff1a;报错&#xff1a;Gradle build failed.See the Console for details.&#xff08;已解决&#xff09;_starting a gradle daemon, 1 incompatible daemon co-CSDN博客 本地出Android包&#xff0c;Build失败 解决办法&#xff1a; 1.下载一个低版本…

c++语法之缺省参数

缺省参数通俗来说就是一个函数里面有初值的参数。有初值那么就可以不传参。 基础语法 缺省分为全缺省和半缺省 全缺省 我们来看它的基础语法&#xff0c;我们以add函数为例: 语法基础就是在给要规定成缺省参数的变量后面一个值 我们可以看到给add传参就会使用默认的数据。…

uniapp版即时通讯软件 IM社交交友聊天系统 语音视频通话双端APP 聊天交友APP源码 (含搭建教程)

修复音视频&#xff08;官方团队插件&#xff0c;无二次费用&#xff09;&#xff0c;文件发送&#xff0c;公告&#xff0c;签到&#xff0c;发现页&#xff0c;朋友圈删除&#xff0c;轮询客服&#xff0c;马甲等 可内嵌第三方网页连接&#xff0c;后台添加&#xff0c;带完…