应用层常见协议
应用层的常见协议 | |
---|---|
超文本协议 | HTTP、HTTPS |
文件传输 | FTP |
电子邮件 | SMTP、POP3、IMAP |
动态主机配置 | DHCP |
域名系统 | DNS |
DNS
- DNS全称:Domain Name System:域名系统
- 利用DNS可以将域名解析成对应的IP地址
- DNS可以采用UDP协议,也可以基于TCP协议,服务器占用53端口
DHCP
- DHCP :(Dynamic Host Configuration Protocol)动态IP地址分配
- DHCP服务器会从IP池中,挑选一个IP地址
出租
给客户端一端时间,时间到期就回收 - 适用于移动设备、无线设备
- DHCP服务器会从IP池中,挑选一个IP地址
HTTP
- HTTP(Hyper Text Transport Protocol),超文本传输协议
- 是互联网中应用最广泛的应用层协议之一
Get Post区别
GET | 主要用于读取操作、请求参数直接拼接到URL后边(浏览器对URL长度有限制) |
---|---|
POST | 主要用于添加、删除、修改的操作,请求参数可以放到请求体中(没有大小限制) |
跨域问题
浏览器有个同源策略(Same-Origin Policy)
规定:默认情况下,AJAX请求只能发送同源的URL
同源指:协议、域名(IP)、端口
问题:前后端代码分离,部署在不同的服务器上,页面访问数据在不同服务器会产生跨域问题。
解决跨域问题:跨域资源共享(Cors: Cross-Origin Resource Shareing)
Cros需要浏览器、服务器共同实现。
客户端:所有浏览器都支持(IE至少是IE10版本)
服务器:响应头设置:Access-Control-Allow-Origin: *
Cookie和Session
- Cookie:
在客户端(浏览器)
存储一些数据,存储到本地磁盘(硬盘)
服务器返回Cookie交给客户端存储
请求数据时,浏览器自动带上Cookie。 - Session
在服务器中存储一些数据,存储在服务器内存中
HTTP不同版本之间的差别
-
HTTP1.0
- 支持POST、HEAD等请求方法、支持请求头、响应头、支持多种数据类型
- 浏览器每次请求都需要与服务器建立一个TCP连接,请求处理完毕以后立即断开TCP连接
-
HTTP1.1
- 支持PUT、DELETE等请求方法
- 传输的数据是文本格式
- 采用持久连接
Connection:keep-alive
,多个请求可以共用同一个TCP连接,但是是串行连接,一个连接只能对应一个请求。(针对同一个域名,大多数浏览器允许同时最多6个TCP并发连接)
- HTTP1.1缺点:
- 同一时间,一个连接只能对应一个请求
- 针对同一域名,大多数浏览器允许最多创建6个并发连接
- 同一个请求中,头信息会被重复传输
- 通常会给每个传输增加500~800字节的开销
- 如果使用Cookie,增加的开销有时会达到上千字节
- 同一时间,一个连接只能对应一个请求
-
HTTP/2
- HTTP/2的一些概念
- 数据流:
- 已经建立连接的双向数字流,可以承载一条或者多条消息,所有消息都在一个
TCP连接
上完成,此连接可以承载任意数量的双向数据流
- 已经建立连接的双向数字流,可以承载一条或者多条消息,所有消息都在一个
- 消息:
- 与逻辑HTTP请求或响应消息对应,由一系列帧组成
- 帧
- HTTP/2最小通信单位,每一帧都包含帧头(会标识出当前中帧所属的数据流)
- 来自不容同数据流的帧可以交错发送,然后再根据帧头的数据流标识符重新组装。
- 数据流:
- HTTP/2的特性
- 多路复用(Multiplexing)
- 客户端和服务器可以将HTTP消息分解为互不依赖的帧,然后交错发送,最后再在另一端把他们重新组装起来。
- 并行交错的发送多个请求,请求之间不受影响
- 并行交错的发送多个响应,响应之间互补干扰
- 使用一个连接并行发送多个请求和响应
- 优先级
- HTTP/2标准允许每个字节流都有一个关联的权重和依赖关系
- 可以向每个字节流分配一个介于1至256之间的整数
- 每个数据流与其他数据流之间可以存在显示依赖关系
- HTTP/2标准允许每个字节流都有一个关联的权重和依赖关系
- 头部压缩
- HTTP/2使用HPACK压缩请求头和响应头
- 可以极大的减少头部开销,进而提升性能
- 服务器推送
- 服务器可以对一个客户端请求发送多个响应
- 除了对最初请求的响应外,服务器还可以向客户端推送额外名额,而无需客户端额外明确的请求
- 多路复用(Multiplexing)
- HTTP/2的问题
- 队头阻塞
- 握手延迟
- HTTP/2的一些概念