1. 什么是http协议?
HTTP定义
-
stateless(无状态):服务器不会在两个请求之间保存任何数据(状态)。
实际问题:用户没有办法在同一个网站中进行连续的交互,比如在一个电商网站里,用户把某个商品加入到购物车,切换一个页面后再次添加了商品,这两次添加商品的请求之间没有关联,浏览器无法知道用户最终选择了哪些商品。
解决方法:使用HTTP的头部扩展,HTTP Cookies
就可以解决这个问题。把Cookies添加到头部中,创建一个会话让每次请求都能共享相同的上下文信息,达成相同的状态。 -
application-level(应用层):
OSI参考模型和TCP/IP五层模型 - request/response
- extensible semantics(可扩展语义):兼容旧版本
- self-descriptive(自描述):从请求中能知道传递的内容类型(图片、视频)
2. HTTP组件系统
-
Client(客户端):
大多数情况下,这个用户代理都是指浏览器,当然它也可能是任何东西,比如一个爬取网页生成维护搜索引擎索引的机器爬虫。 -
Proxy(代理服务器):
在浏览器和服务器之间,有许多计算机和其他设备转发了HTTP消息。由于Web栈层次结构的原因,它们大多都出现在传输层、网络层和物理层上,如路由器、调制解调器等。
还有一部分是表现在应用层上的,被称为代理(Proxies),如网关,caches等。 -
Server(服务器):
Server只是虚拟意义上代表一个机器。
可以是共享负载(负载均衡)的一组服务器组成的计算机集群,也可以是一种复杂的软件,通过向其他计算机(如缓存,数据库服务器,电子商务服务器 etc)发起请求来获取部分或全部资源。
Server 不一定是一台机器,但一个机器上可以装载的众多Servers。在HTTP/1.1 和Host
头部中,它们甚至可以共享同一个IP地址。
- 没有输完完整的URL浏览器引擎就能联想出完整的地址。因为历史中录入的URL保存在浏览器的数据库中。
- 渲染引擎通过网络模块发起第一个请求来获取页面的HTML文档,解析文档中的资源信息(超链接)发送其他请求,获取可执行脚本或CSS样式来进行页面布局渲染,以及一些其它页面资源(如图片和视频等)。
- 浏览器将这些资源整合到一起,调用UI后端绘制完整界面,也就是网页。
- 浏览器执行的脚本可以在之后的阶段获取更多资源,并相应地更新网页。
3. HTTP会话
在像 HTTP 这样的Client-Server(客户端-服务器)协议中,会话分为三个阶段:
- 客户端建立一条 TCP 连接(如果传输层不是 TCP,也可以是其他适合的连接)。
- 客户端发送请求并等待应答。
- 服务器处理请求并送回应答,回应包括一个状态码和对应的数据。
从 HTTP/1.1 开始,连接在完成第三阶段后不再关闭,客户端可以再次发起新的请求。这意味着第二步和第三步可以连续进行数次。
3.1 发送客户端请求
一旦连接建立,用户代理 就可以发送请求 (用户代理通常是 Web 浏览器,但也可以是其他的,例如爬虫)。
HTTP请求举例
3.2 服务器响应结构
当收到用户代理发送的请求后,Web 服务器就会处理它,并最终送回一个响应。
HTTP响应举例