【HTTP协议】简单的HTTP协议(2)
一:URI和URL
- URI(统一资源标识符)
- URI格式
表示指定的uri,要使用绝对的URI,绝对的URL以及相对的URL。相对的URL,是指从浏览器基本URI处指定的URL。
绝对的URI格式:
查询字符串:可以针对指定的路径传入参数。
片段标识符:使用片段标识符可以标记处已获取资源的子资源。
- URL(统一资源定位符)
关系:URI用字符串标识某一个互联网资源,而URL表示资源的地点(互联网所处的位置)。可见URL是URI的子集。
二:HTTP协议用于客户端和服务器端
在网络中,请求文本或者图像资源的一端称为客户端,而提供资源响应的一端称为服务器端。
在两台电脑进行通信时,必定有一端是客户端,另一端是服务器端。就单条线路来说HTTP协议能够区分哪里是客户端服务器端。
三:通过请求和响应的交换达成通信
HTTP协议规定:由客户端发出请求响应,服务器端在没有接收到请求之前不会发送响应。
例子:
先来看发送报文:
GET表示请求访问服务器的类型称为方法,,随后的/index.html表示请求访问的资源对象(URI),最后的就是HTTP的版本。
HTTP协议中host的作用:
Host 是 HTTP 1.1 协议中新增的一个请求头,主要用来实现虚拟主机技术。
虚拟主机(virtual hosting)即共享主机(shared web hosting),可以利用虚拟技术把一台完整的服务器分成若干个主机,因此可以在单一主机上运行多个网站或服务。
举个栗子,有一台 ip 地址为 61.135.169.125 的服务器,在这台服务器上部署着谷歌、百度、淘宝的网站。为什么我们访问 https://www.google.com 时,看到的是 Google 的首页而不是百度或者淘宝的首页?原因就是 Host 请求头决定着访问哪个虚拟主机。
请求报文由请求方法,请求URI,协议版本,可选的请求首部字段和内容实体构成。
再来看请求报文的构成
在起始是版本的HTTP/1.1表示版本。
紧接着200 OK表示请求处理结果的状态码和原因短语。
响应报文基本上由协议版本,状态码,用以解释状态码的原因短语,可选的响应首部字段以及实体主体构成。
四:HTTP是不保存状态的协议
HTTP是一种不保存的状态,即无状态协议。HTTP协议自身不对请求或响应之间的通信状态进行保存。
HTTP/1.1虽然是无状态协议,但是为了实现期望的保存状态功能,于是引入了Cookie技术。有了Cookie再用HTTP进行通信,就可以管理状态了。
五:请求URI定位资源
HTTP协议使用URI定位互联网上的资源。正是因为URI的特定功能,使得在互联网上的任意位置的资源都能访问到。
请求的例子:
除此之外,如果不是访问特定资源而是对服务器本身发起请求,可以用一个*代替请求URI。
六:使用方法下达命令
例子说明:
GET:获取资源
POST:传输实体主体
PUT:传输文件
HEAD:获取报文首部
DELETE:删除文件
OPTIONS:询问支持的方法
TRACE:追踪路径
Trace方法是让Web服务器将之前的请求通信环回给客户端的方法。
发送请求时,在Max-Forwards首部填入数值,没经过一个服务器就将该数字减1.当数字减为0时,就停止继续传输。
客户端通过TRACE方法可以查询发送出去的请求是怎样被加工修改的。
CONNECT:要求用隧道协议连接处理
CONNECT主要进行代理服务器通信时建立隧道,实现 用隧道协议进行TCP通信。主要使用SSL(Secure Sockets Layer,安全套接字)和TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道进行传输。
七:持久连接节省通信量
HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。
在现在这个网络中,HTML文档中不仅包含文本,还包含多张图片。
这样就需要多次进行TCP连接和断开连接,需要消耗大量CPU。
所以需要进行持久化连接,持久连接的特点是:只要任意一端没有明确提出断开连接,则保持TCP连接。
八:管线化
持久连接使得多次请求以管线化方式成为可能。管线化使得各次请求之间不需要等待。
九:使用Cookie的状态管理
Cookie会根据从服务器端发送的响应报文内的一个叫Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往服务器端发送请求时,客户端会自动在请求报文中加入Cookie值后发送回去。
报文中的信息: