Nginx理论篇与相关网络协议

news/2024/7/21 9:54:14 标签: 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.niftyadmin.cn/n/5545147.html

相关文章

ArcGIS中国工具(ArcGISCTools)等插件使用体验

ArcGIS中国工具(ArcGISCTools)的主要功能 1. 接合图表生成 这个功能允许用户生成标准分幅图的行政区边框注记,并在打印时自动加入。这对于需要制作标准地图的用户非常实用。 2. 图框工具 图框工具可以帮助用户创建和管理地图的图框&#…

QT信号量与槽

文章目录 概述用系统生成新增一个信号量和槽代码方式信号量和槽的宏信号量和槽都用函数地址lamda表达式函数指针 槽和信号量函数信号量槽 小结 概述 这个内容是QT独有的,写的挺有意义的。之前写过一篇QT slots的函数,思来想去,觉得不是那么有…

QT5.12.9 通过MinGW64 / MinGW32 cmake编译Opencv4.5.1

一、安装前准备: 1.安装QT,QT5.12.9官方下载链接:https://download.qt.io/archive/qt/5.12/5.12.9/ QT安装教程:https://blog.csdn.net/Mark_md/article/details/108614209 如果电脑是64位就编译器选择MinGW64,32位就选择MinGW…

duplicate key value violates unique constraint

duplicate key value violates unique constraint 遇到的问题 你在尝试向数据库表 goods 插入新记录时,收到了 duplicate key value violates unique constraint 的错误。尽管你确认数据库中没有与尝试插入的 id 相同的记录,但错误依旧存在。进一步的调…

STM32中的DMA:解锁高效数据传输的秘密武器(内附实例)

目录 引言 理解DMA:数据的高效搬运工 DMA的主要特性 多优先级请求 事件标志 数据对齐 多样化的数据传输路径 广泛的数据源与目标 最大数据长度 DMA寄存器详解 增量与循环模式 DMA中断机制 ​编辑 小实验:DMA-ADC串口发送 引言 在现代嵌入…

20.呼吸灯:利用PWM控制小灯在相同时间段内的不同占空比

(1)设计一段代码,实现led灯在一秒内由完全熄灭到完全点亮,在第二秒由完全点亮转为完全熄灭,循环往复。 (2)Verilog代码: module breath_led(clk,reset_n,led);input clk;input res…

ansible常见问题配置好了密码还是报错

| FAILED! > { “msg”: “Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host’s fingerprint to your known_hosts file to manage this host.” } 怎么解决&#xf…

线程交互现象

线程交互现象 小明对自家的狗子有个规定,就是在狗狗还没吃完的时候,可以继续给他加饭 不好的解决方式 狗狗感觉一千年没吃饭了,狼吞虎咽起来,最后饭只剩下最后一点点,吃饭线程中使用while循环判断是否是1,…