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等。
空行:表示报文头部到此为止,用来分隔请求头部与请求数据。
请求数据:与请求报文一起发送的数据,也属于报文中的一部分,与请求方式有关。
响应报文
由状态行、响应头部、响应正文三部分组成。
状态行又分为三部分:协议版本、状态码、状态码描述。
响应头部的内容就是响应正文的相关信息,响应正文就是服务端返回给客户端的数据。