http协议基础
前言:
上一篇博文说到了,主机间通过调用套接字方式相互通信;应用层协议基于通讯子网进行通讯。
一、版本迭代:
http(hyper text transfer protocol)即为超文本传输协议,基于HTML编程语言开发的文本即为超文本。起初的http仅仅只是为了接受HTML格式的页面,仅仅只是文本,并不能传输非文本。
HTTP/0.9原型版本并没有接受非文本传输,直到HTTP/1.0加入了MIME机制才能够传输非文本,利用MIME机制能够将非文本数据编码为文本数据进行传输,在让用户使用相同的编码方式打开非文本数据(以免乱码)。
MIME(Multipurpose Internet Mail Extesion)是一种在早期SMTP邮政协议上传输非文本协议的机制。
同时,这也就是现今http协议能够传输非文本数据的缘由。
尽管http早前就已经加入了MIME机制,但是并不是所有的浏览器都支持所有的媒体类型,这就需要浏览器调用其他插件或其他应用程序打开。
而http能够通过请求文件的后缀名,来判断由哪个浏览器之外的程序打开而后将其嵌入显示到浏览器中。
二、标准补给
http是一种应用层协议,默认监听tcp/80端口,使用流式数据协议完成数据交换。
http协议主要完成跨主机发送文档。一次完整的http协议包含http请求和http响应。
请求一个网站相当于请求一个资源,只是通常而言,一个网站有着数个超链接,所以导致了请求一个资源的背后请求了多个资源。
三、精准补给:
客户端发起web请求,服务器端接受请求,而后响应客户端将资源封装为http报文响应客户端,尽管看是去十分简单,但事实上这之中包含了以下的七个步骤:
(1)建立或处理连接:
基于tcp建立虚链路通信,或者关闭某些客户端请求。http属应用层协议,需要传输层协议先生效后,方才能建立http连接,且http协议本身是支持访问控制的
(2)接受请求:
接受来自于网络的请求报文中对某资源的一次请求。查询客户端发送的http请求报文,找到请求行,找到请求方法,找到资源定位符,找到协议版本号;确认用户访问的资源是否允许访问,是否支持此访问方法,如果允许的话就进行下一步。
此外,web服务器不仅只有一种响应模式。
例如,GET /phptp/pig.jpg HTTP/1.1
(3)处理请求:
对请求报文进行解析,并获知请求的资源及请求的方法等相关信息。
(4)访问资源
获取请求报文中请求的资源。
web服务器,即存放了web资源的服务器,负责对请求者提供对方请求的静态资源,或动态运行后生成的资源,这些资源放置与本地文件系统路径下,此路径通常被称为DocRoot
例如,默认根目录为/var/www/html且目录下有php/1.php,要是想要访问它,需要访问的路径是www.yyxx.com/php/1.php
(5)构建响应报文
封装响应报文,并指明其中的MIME类型
(6)发送响应报文
基于tcp协议的接受发送不同双信道,通过自己发送对方接受的信道发送响应报文
(7)记录日志
顾名思义,将用户所访问的资源的方法、内容、以及结果记录在服务器端
四、扩充补给:
1.web服务器响应客户端的多种IO模型:
服务器并发响应模型(Web I/O):
单进程I/O结构:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应
多进程I/O结构:并行启动多个进程,每个进程响应一个请求
复用型I/O结构:一个进程响应n个请求
复用的多进程I/O结构:启动多个m进程,每个进程响应n个请求
这是因为有这么多种I/O响应机制,所以在不同工作模式下接受并响应客户端请求的方式是不尽相同的。
2.获取资源的请求的方式:
元数据:请求报文首部
<method><URL><VERSION>
Host:www.xxyy.com 请求的主机名称
Connetion:
3.web服务器资源映射关系:
a)DocRoot
b)alias
c)虚拟主机docroot
d)用户家目录docroot