前言
在TCP协议原理中已经讲过HTTP通讯的完整的一个过程,这里不再将过多的tcp内容,详细见TCP协议原理,这里仅介绍一下tcp的报文和特点.
HTTP定义
http(Hyper Text Transfer Protocol) 超文本传输协议,HTTP是应用层协议,叫做传输协议实际传输是由传输层协议tcp完成的.http协议的数据会封装到tcp的数据部分.
特点:
- 无状态,http协议不会存储用户信息,如果后续请求需要前面的数据,需要重传或者通过cookie和session来实现存储信息
- 无连接,http是基于tcp协议的,无连接指的是一次连接只处理一个请求,处理完之后就断开连接,但这样显然会使http在建立tcp和断开tcp上花费大量工作,在http1.1中默认是keep-alive的,也就是保活,但由于连接时并行的,如果一个连接阻塞,这个连接将一直被占用,所有后来又有了多路复用通过steamId来区分的方式.
- 可扩展,指http请求的头部字段可以扩展,这也就提高了http请求的应用场景.
- 自描述,http消息可以是多种的,可以是图片,音频,文本等等,这些类型是可以在http头部自己描述的.
- 以请求应答方式运行
HTTP报文格式
http请求的格式
由请求行,请求头,请求体构成.请求头和请求体之间需要有空行
http响应格式
由状态行,响应头,响应正文构成,响应头和响应正文之间需要有空行
HTTP通讯过程
以从浏览器访问http://www.bing.com 为例
- 通过DNS得到IP,根据浏览器输入的域名
www.bing.com
(主机名)查询本地(浏览器,host文件,路由器)有无DNS缓存信息,没有缓存将调用DNS协议(详细原理及过程见DNS协议原理)向DNS服务器查询ip. - 建立TCP连接,根据DNS返回的结果获得ip之后, 浏览器与服务器建立TCP连接(详细原理及过程见TCP协议原理)
- HTTP请求和应答,建立好TCP连接之后,将组装好http报文发起HTTP请求来获取index.html页面
- TCP断开连接,客户端接收到http响应,回复确认.四次挥手断开连接(可以不断开).
- 浏览器继续请求其他资源,浏览器解析获取到的html,解析出还需要的资源,如果是静态资源则继续请求资源.如果服务器返回304(服务器未修改资源),浏览器就会读取本地缓存
- 浏览器渲染,浏览器渲染相应页面信息