通信相关
1 数据交互方式的历史版本
- 表单
最基本、最简单的交互方式 - ajax
ajax不用刷新页面,跨域麻烦
单向通信,性能低 - jsonp
用来跨域,安全性差,了解即可 - WebSocket
性能高、双向(双工)通信、直接跨域
可以手动兼容(兼容性极强)
注:1 2 3 三种方式的http请求其实都是表单
2 http协议
2.1 http版本
http1.0:一次性连接
http1.1:保持连接——再所有请求完成后在断开(性能提升)
http2.0:1. 强制https 2. 自带双向通信 3. 多路复用
http——容易被攻击
https (security)——安全
2.2 三次握手,四次挥手
3 计算机网络体系结构
3.1 OSI七层交换"参考"模型
层 | 用途 | 协议 |
---|---|---|
1.物理层 | 跟材料相关 | |
2.链路层 | 内网寻址 | ARP、ICMP |
3.网络层 | 外网寻址 | IP |
4.传输层 | 通信稳定性 | TCP |
5.会话层 | × 记录状态 | |
6.表现层 | × 统一各个网络结构 | |
7.应用层 | 应用细节 | HTTP、FTP、SMTP、POP3 |
物链网传会表应
3.2 TCP
TCP——传输控制协议
特点:面向连接、面向字节流、全双工通信、可靠
优点:数据传输可靠
缺点:效率慢(建立连接、发送确认包)
基于TCP的协议:HTTP、FTP、SMTP、Telnet
TCP三次握手
同步标记 SYN、确认标记 ACK、随机起始序号 seq、确认号字段 ack
连接 | 报文段信息 | 描述 |
---|---|---|
C → S | SYN=1、seqc | 客户端给服务器发送连接请求(SYN包) |
S→ C | SYN=1、ACK=1、seqs、acks=seqc+1 | 服务器接收SYN包后,返回确认连接的报文段 |
C → S | ACK=1、seqc += 1、ackc=seqs+1 | 客户端向服务器发送确认包 |
为什么TCP连接需要三次握手
防止服务器端因接收了早已失效的连接请求报文,从而一直等待客户端请求,最终导致形成死锁、浪费资源
TCP四次挥手
终止控制位 FIN、确认标记位 ACK、随机起始序号 seq、确认号字段 ack
连接 | 报文段信息 | 描述 |
---|---|---|
C → S | FIN=1、seqc=u | 客户端给服务器发送连接释放的报文段 |
S → C | ACK=1、seqs=v、acks=u+1 | 服务器接收后,向客户端发回连接释放确认的报文段 |
S → C | FIN=1、ACK=1、seqs = w、acks=seqc+1 | 若服务器不向客户端发数据,就发出释放连接的报文段 |
C → S | ACK=1、seqc=u+1、ack=w+1 | 客户端接收后,向服务器发回连接释放确认的报文段 |
为什么TCP释放连接需四次挥手
为了保证通信双方都能通知对方 需释放 & 断开连接
3.3 UDP
UDP——用户数据协议
不保证到达、不保证质量、不保证顺序
用途:即时通信、IP电话、视频直播
特点:无连接、不可靠、传输数据报文段、传输效率高、所需资源少
4 表单
属性
属性 | 用途 |
---|---|
action | 提交到哪 |
method | 方式——GET、POST;PUT、HEADER、DELETE;自定义 |
name | 必须加、可以重复 |
submit | 提交 |
数据提交方法
GET | 数据放在url里 | 容量小≈32k、看得见、有缓存、利于收藏分享 |
---|---|---|
POST | 数据在http-body里 | 容量大≈1G、看不见、不缓存 |
get & post安全性完全一样,https才是真安全
校验
.onsubmit 事件里加判断
5 http状态码
值 | 意思 |
---|---|
1xx | 消息 |
2xx | 成功 |
3xx | 重定向 |
4xx | 请求错误(客户端) |
5xx | 服务端错误 |
6xx | 自定义 |
3xx 重定向:将网络转移到另一个地址
301:永久重定向——浏览器永远不会再次请求老的地址(不推荐)
302:临时重定向——浏览器下次还会请求老地址
304:重定向到硬盘(缓存)
缓存:
- 第一次向服务器请求a.txt文件,服务器返回200(成功)和文件内容
- 第二次向服务器请求a.txt文件时,会加上一个文件的时间,服务器用时间进行对比,如果文件版本相同则返回304
6 浏览器缓存
缓存策略:
cache-control: 告诉服务器要不要缓存
expire: 告诉服务器缓存的时效
缓存实现:
- Server -> Client: “Last-Modified: Sat, 02 Dec 2017 04:03:14 GMT”
第一次请求:服务器给浏览器一个最后修改时间 - Client -> Server: “If-Modified-Since: Sat, 02 Dec 2017 04:03:14 GMT”
第二次请求:浏览器给服务器一个上次缓存的文件的时间 - Server -> Client: 200 || 304
第三次请求:服务器将第二次得到的时间,与自身文件修改时间对比
1)timeServer > timeClient: 200,重新传输- timeClient >= timeServer: 304
7 http请求
- 浏览器DNS缓存
- 操作系统DNS缓存
- 本地HOST文件
- 浏览器发起一个DNS系统调用
1)宽带运营商服务器查看本身缓存
2)运营商服务器发起迭代DNS解析请求
(1)运营商服务器把结果返回操作系统内核 并缓存
(2)操作系统内核把结果返回给浏览器
(3)浏览器拿到IP地址 - 获得IP地址后,发起HTTP三次握手
- TCP/IP连接建立以后,浏览器可以向服务器发起HTTP请求
- 服务器接收到这个请求,将处理后的数据返回给浏览器
- 浏览器解析代码,用HTTP请求静态资源
- 浏览器根据拿到的资源对页面进行渲染,呈现
8 cookie/session
cookie 中带有服务器分配给浏览器的 sess_id
- cookie——保存在浏览器
容量有限——4K
不安全——用户、浏览器 - session——保存在服务器
容量不用担心
安全——