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等。

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

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

响应报文

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

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

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

相关推荐

  1. 网络相关协议

    2024-07-12 15:24:02       23 阅读
  2. 网络架构协议

    2024-07-12 15:24:02       38 阅读
  3. 网络协议标准

    2024-07-12 15:24:02       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 15:24:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 15:24:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 15:24:02       58 阅读
  4. Python语言-面向对象

    2024-07-12 15:24:02       69 阅读

热门阅读

  1. QT Designer

    2024-07-12 15:24:02       22 阅读
  2. 【Go系列】 Go语言数据结构

    2024-07-12 15:24:02       15 阅读
  3. 富格林:曝光纠正安全交易误区

    2024-07-12 15:24:02       18 阅读
  4. uniapp安卓离线打包配置scheme url

    2024-07-12 15:24:02       22 阅读
  5. 1.2- init.rc解析

    2024-07-12 15:24:02       19 阅读
  6. 数据如何查询

    2024-07-12 15:24:02       19 阅读
  7. 21 数据服务Ark Data Kit

    2024-07-12 15:24:02       17 阅读
  8. 小抄 20240710

    2024-07-12 15:24:02       19 阅读
  9. LeetCode:经典题之102、103题解及延伸

    2024-07-12 15:24:02       20 阅读
  10. 软设模式之状态模式

    2024-07-12 15:24:02       19 阅读
  11. redis

    redis

    2024-07-12 15:24:02      21 阅读