服务端开启一个进程,但是呢,同时开启多个线程,一个线程响应一个请求,同样可以达到同时处理多个请求,线程间并发执行;
复用多线程I/O模型
服务端并行开启多个进程,同时每个进程开启多个线程,这样服务端可以同时处理进程数M*每个进程的线程数N个请求。
三、HTTP报文格式
HTTP报文是HTTP应用程序之间传输的数据块,HTTP报文分为HTTP请求报文和HTTP响应报文,但是无论哪种报文,他的整体格式是类似的,大致都是由起始、首部、主体三部分组成,起始说明报文的动作,首部说明报文的属性,主体则是报文的数据。接下来具体说明。
3.1 HTTP请求报文
请求报文的起始由请求行构成(有些资料称为状态行,名字不一样而已,都是指的一个东西),用来说明该请求想要做什么,由<Method>、<URL>、<Version> 三个字段组成,注意每个字段之间都有一个空格。
其中<Method>字段有不同的值:
GET --- 访问服务器的资源
POST --- 向服务器发送要修改的数据
HEAD --- 获取服务器文档的首部
PUT --- 向服务器上传资源
DELETE--- 删除服务器的资源
<URL>字段表示服务器的资源目录定位
<Version>字段表示使用的http协议版本
首部部分由多个请求头(也叫首部行)构成,那些首部字段名有如下,不全:
Accept 指定客户端能够接收的内容格式类型
Accept-Language 指定客户端能够接受的语言类型
Accept-Ecoding 指定客户端能够接受的编码类型
User-Agent 用户代理,向服务器说明自己的操作系统、浏览器等信息
Connection 是否开启持久连接(keepalive)
Host 服务器域名
...
主体部分就是报文的具体数据。
3.2 HTTP响应报文
响应报文的起始由状态行构成,用来说明服务器做了什么,由<Version>、<Status-Code>、<Phrase>三个字段组成,同样的每个字段之间留有空格;
<Status-Code> 上边已经说明;
首部由多个响应头(也叫首部行)组成, 首部字段名如下,不全:
Server 服务器软件名,Apache/Nginx
Date 服务器发出响应报文的时间
Last-Modified 请求资源的最后的修改时间
...
主体部分是响应报文的具体数据。
四、HTTP协议版本更替
HTTP/0.9
HTTP协议的最初版本,功能简陋,仅支持请求方式GET,并且仅能请求访问HTML格式的资源。
HTTP/1.0