HTTP协议介绍
用户访问网站流程
客户端 --- 浏览器输入网址信息点击回车
客户端 --- 完成域名的解析过程(DNS)
客户端 --- 直接访问相应网站服务器 --- 建立TCP三次握手过程
客户端 --- 访问网站服务器 --- 发送HTTP请求报文
服务端 --- 响应客户端请求 --- 回复HTTP响应报文
客户端 --- 浏览器看到网站页面
客户端 --- 结束访问网站过程 --- 完成TCP四次挥手过程
DNS域名解析过程
打开浏览器:输入www.baidu.com
在本地主机上寻找域名对应IP地址信息
本地DNS缓存
寻找本地hosts文件
寻找LDNS服务器
LDNS查看本地缓存中是否有百度的IP地址
根域名服务器
顶级域名服务器
二级域名服务器
DNS结构图
DNS解析流程图
OSI七层模型
TCP/IP五层模型
TCP报文格式
TCP三次握手
syn(1):请求建立连接控制字段
fin(1):请求断开连接控制字段
ack(1):数据信息确认控制字段
seq:序号
LISTEN --- 侦听来自远方TCP端口的连接请求;
SYN-SENT --- 在发送连接请求后等待匹配的连接请求;
SYN-RECEIVED --- 在收到和发送一个连接请求后等待对连接请求的确认
ESTABLISHED --- 代表一个打开的连接,数据可以传送给用户;
CLOSED --- 没有任何连接状态;
TCP三次握手过程
- 第一次握手
发送syn请求建立连接控制字段,发送seq序列号信息(0),第一个数据包的序列号默认为0 - 第二次握手
发送syn请求建立连接控制字段,同时还会发送ack确认控制字段,发送seq序列号信息也为0,还会发送ACK确认号(上一个seq序列号)信息(对上一个数据序列号信息进行确认) - 第三次握手
发送ack确认控制字段,发送seq序列号信息(1),发送ack确认号(1)
TCP四次挥手
TCP四次挥手过程
-
第一次挥手 发送fin请求断开连接控制字段
-
第二次挥手 发送ack确认控制字段
-
第三次挥手 发送fin请求断开连接字段,发送ack确认字段
-
第四次挥手 发送ack控制字段
TCP的十一种状态集
TCP三次握手:
LISTEN | 侦听来自远方TCP端口的连接请求; |
---|---|
SYN-SENT | 在发送连接请求后等待匹配的连接请求; |
SYN-RECEIVED | 在收到和发送一个连接请求后等待对连接请求的确认; |
ESTABLISHED | 代表一个打开的连接,数据可以传送给用户; |
CLOSED | 没有任何连接状态; |
TCP四次挥手:
ESTABLISHED | 代表一个打开的连接,数据可以传送给用户; |
---|---|
FIN-WAIT1 | 等待远程TCP的连接中断请求,或先前的连接中断请求的确认; |
FIN-WAIT2 | 从远程TCP等待连接中断请求; |
CLOSE-WAIT | 等待从本地用户发来的连接中断请求; |
CLOSING | 等待远程TCP对连接中断的确认;* |
LAST-ACK | 等待原来发向远程TCP的连接中断请求的确认; |
TIME-WAIT | 等待足够的时间以确保远程TCP接收到连接中断请求的确认; |
CLOSED | 没有任何连接状态; |
HTTP协议
HTTP协议,全程HyperTextTtansferProtocol,中文名为超文本传输协议,是互联网中最常用的一种网络协议.HTTP的重要应用之一是www服务,设计HTTP协议最初的目的就是提供一种发布和接受HTML(一种页面标记语言)页面的方法(请求 返回)
HTTP协议是互联网上最常用的通信协议之一,她有很多应用,但最流行的是基于Web浏览器和Web服务器之间的通信,即www应用或Web应用.
WWW,全程World Wide Web,通常为Web.HTTP协议的WWW服务应用的80(端口的概念)
另外一个加密的www服务应用https的默认端口为443,主要用于网银,支付和钱相关的业务.
HTTP协议版本
HTTP:1.0 TCP短连接
HTTP:1.1 TCP长连接
HTTP:2.0 TCP长连接 --- 提高用户并发(同时)访问的效率
HTTP协议资源信息
URL:全称为Uniform Resource Location,中文翻译为统一资源定位符
URI:全称为Uniform Resource Identifier,中文翻译为统一资源标识符
docs.ansible.com / ansible/latest/user_guide/playbooks.html
URL URI
静态资源
特点说明:
- 网页内容是固定不变的,因此,容易被搜索引擎收录(容易被用户找到)(优点)。
- 因为网页没有数据库的支持,所以在网站制作和维护方面的工作量较大,当网站信息量很大时,
完全依靠静态网页比较困难(缺点)。 - 网页的交互性较差,在程序的功能实现方面有较大的限制(缺点)。
- 当客户端向服务器请求数据时,服务器会直接从磁盘文件系统上返回数据(不做任何解析)。
动态资源
- 采用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、投票、用户管理、订单处理、发博文等。
- 动态资源页面会出现 "?" "&", 不便于被搜索引擎收录
- 接收到用户请求,需要让动态服务和数据库服务进行处理
伪静态资源
- 可以便于搜索引擎进行收录
- 有数据库服务支持,实现网页交互功能
HTTP协议响应过程
HTTP请求方法
HTTP方法 | 作用描述 |
---|---|
GET | 客户端请求指定资源信悤,服务器返回指定资源 |
HEAD | 只请求响应报文中的 HTTP首部 |
POST | 将客户端的数据提交到服务器,例:注册表单 |
PUT | 用从客户端向服务器传送的数据取代指定的文档内容。 |
DELETE | 请求服务器删除 Request-URI所表示的资源。 |
MOVE | 请求服务器将指定的页面移至另一个网络地址。 |
HTTP的响应状态码分类
常见响应状态码解释
使用curl查看状态码
curl -I -s -w "%{http_code}
" -o /dev/null www.baidu.com
HTTP请求报文
请求头信息说明
请求头内容 | 说明 |
---|---|
Host | 接受请求的服务器地址,可以是IP:端口号,也可以是域名 |
User-Agent | 发送请求的应用程序名称 |
Connection | 指定与连接相关的属性,如Keep-Alive |
Accept-Charset | 通知服务端可以发送的编码格式 |
Accept-Encoding | 通知服务端可以发送的数据压缩格式 |
HTTP响应报文
响应头信息说明
响应头 | 说明 |
---|---|
Server | 服务器应用程序软件的名称和版本 |
Content-Type | 响应正文的类型(是图片还是二进制字符串) |
Content-Length | 响应正文长度 |
Content-Charset | 响应正文使用的编码 |
Content-Encoding | 响应正文使用的数据压缩格式 |
Content-Language | 响应正文使用的语言 |
用户访问流程总结
1.用户输入域名->浏览器跳转->浏览器缓存->Hosts 文件->DNS 解析( 递归查询 | 迭代查询 )
客户端向服务端发起查询->递归查询
服务端向服务端发起查询->迭代查询
2.由浏览器向服务端发起 TCP 连接(三次握手)
客户端 -->请求包连接-syn=1 seq=x 服务端
服务端 -->向应客户端 syn=1 ack=x+1 seq=y 客户端
客户端 -->建立连接 ack=y+1 seq=x+1 服务端
3.客户端发起 http 请求:
1.请求的方法是什么: Get 获取
2.请求的 Host 主机是: www.opesn.com
3.请求的资源是什么: /index.html
4.请求的端口是什么: 默认 http 是 80 https 443
5.请求携带的参数是: 属性(请求的类型、压缩、认证、浏览器信息、等等)
6.请求最后的空行
4.服务端响应的内容是
1.服务端响应使用的 WEB 服务软件
2.服务端响应请求文件的类型
3.服务端响应请求的文件是否进行压缩
4.服务端响应请求的主机是否进行长连接
5.客户端向服务端发起 TCP 断开(四次挥手)
客户端 --> 断开请求 fin=1 seq=0 --> 服务端
服务端 --> 响应断开 ack=1 --> 客户端
服务端 --> 断开连接 fin=1 seq=0 --> 客户端
客户端 --> 确认断开 ack=1 --> 服务端