- web页面和后台的交互都使用BS架构:Browser/Server模式
- web浏览器根据地址栏中制定的URL,从web服务器端获取文件资源等信息,从而显示出web页面。像这种通过发送请求获取浏览器资源的web浏览器等,都可称之为客户端
- web使用http协议作为规范,完成从客户端到服务器等一系列运作流程
http协议
- 简单灵活可扩展
- 可靠传输(其实是tcp的可靠传输)
- 无状态,明文传输
- 处于应用层,使用请求-应答的通信模式
http请求的运转流程
- 客户从客户端发起http请求,即我要浏览某个页面
应用层 - 生成HTTP请求报文
- 通过dns解析域名,获取目标服务器地址
传输层 - tcp协议将报文分割成多段,并按序号传递给网络层。某段接收失败会进行重传,从而保证可靠性。(传递数据前会先进行三次握手,建立连接)
网络层 - ip协议增加作为通信目的的mac地址后传给链路层,从而在中转过程中搜索对方地址并传送
- 接收端从链路层接收到数据,并依次经历网络层,传输层,应用层将请求传递给服务器。至此,发送请求完成;
注:发送数据时,每经过一层必定会打上该层的首部信息。接收数据时,每经过一层都会将该层的首部信息去掉
图片来自《图解HTTP》
一个完整的http请求过程
- 浏览器根据域名解析地址
- 客户端与服务端建立tcp连接
- 客户端(浏览器)发起http请求
- 服务器响应请求,并返回html到客户端(浏览器)
- 客户端解析html,并请求html中的资源(js,图片等)
- 关闭tcp连接,客户端(浏览器)将页面进行渲染,呈现给客户
- 发起http请求后的抓包内容,这里没有4次挥手。是因为长连接特性,默认不会立即断开连接
解析URI
URI–统一资源标识符,用字符串标识某一互联网资源
URL–统一资源定位符,表示资源的地址
可见,URL是URI的子集。在http中,URL就可以理解为URI
URI格式
URI的标准格式如上图所示
- 协议方案名,必填字段。指定了协议
- 登陆信息,选填
- 服务器地址,必填。域名或IP地址都可以
- 服务器端口,选填。省略就使用默认端口号
- 带层次的文件路径,必填。指定服务器上的文件路径来定位特制的资源
- 查询字符串,选填。参数
- 片段标识符,选填。
为了解决特殊字符的问题,URI引入了编码机制。
转义原理:把字符(unicode)编码成utf-8,utf-8是用1-4个字节表示的,所以每个字节转换成16进制并在前面用百分号(%)连接,最后并把每个字节转换的结果连接起来。
常见字符(空格 %20;? %3F)
常见协议的默认端口
协议 | 端口 | 备注 |
---|---|---|
ftp | 21 | 文件传输协议 |
ssh,scp | 22 | |
Pop3 | 110 | 它是因特网电子邮件的第一个离线协议标准 |
Smtp | 25 | 简单邮件传输协议 |
http | 80 | 超文本传输协议 |
https | 443 | 即HTTP下加入SSL层,简单讲是HTTP的安全版 |
Telnet | 23 | 远程登录 |
oracle | 1521 | |
mysql | 3306 | |
redis | 6379 | |
mongo | 27017 | |
sqlserver | 1433 |