网络OSI七层模型
- 应用层
文件传输/电子邮件/文件服务/虚拟终端
TFTP,HTTP,SNMP,FTP,SMTP,DNS - 表示层
数据格式化/代码转换/数据加密 - 会话层
解除或建立别的节点的联系 - 传输层
提供端对端的接口
TCP/UDP - 网络层
为数据包选择路由器
IP,ICMP,IGMP,ARP,RARP - 数据链路层
传输有地址的帧以及错误检测能力 - 物理层
以二进制数据形式传输数据
常见请求方式
get:发送一个请求来取得服务器上的某一资源,参数在url上,浏览器长度有限制,不安全
post:向URL指定的资源提交数据或附加新的数据,参数不可见,长度不受限制
put:PUT指定了资源在服务器上的位置,而POST没有
delete:删除服务器上的某资源
options:JavaScript的XMLHttpRequest对象进行CORS跨域资源共享时,就是使用OPTIONS方法发送嗅探请求,以判断是否有对指定资源的访问权限
head:只请求页面的首部,不返回相应主体,主要用于客户端查看服务器性能
connect:把请求连接转换到透明的TCP/IP通道
trace:TRACE方法被用于激发一个远程的,应用层的请求消息回路
Post 和 Get 的区别
安全:Post 相对安全一点,因为Get 请求都包含在 URL 里,且会被浏览器保存历史纪录。
数据:Post 可以通过 request body来传输更多的,URL有长度限制,会影响 Get请求。
编码:GET只允许ASCII字符,POST没有限制
缓存:Get请求能缓存,Post 不能。
常见状态码
2XX 成功
200 OK,表示从客户端发来的请求在服务器端被正确处理
204 No content,表示请求成功,但响应报文不含实体的主体部分
205 Reset Content,表示请求成功,但响应报文不含实体的主体部分,但是与 204 响应不同在于要求请求方重置内容
206 Partial Content,进行范围请求
3XX 重定向
301 moved permanently,永久性重定向,表示资源已被分配了新的 URL
302 found,临时性重定向,表示资源临时被分配了新的 URL
303 see other,表示资源存在着另一个 URL,应使用 GET 方法丁香获取资源
304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况
307 temporary redirect,临时重定向,和302含义类似,但是期望客户端保持请求方法不变向新的地址发出请求
4XX 客户端错误
400 bad request,请求报文存在语法错误
401 unauthorized,表示发送的请求需要有通过 HTTP认证的认证信息
403 forbidden,表示对请求资源的访问被服务器拒绝
404 not found,表示在服务器上没有找到请求的资源
5XX 服务器错误
500 internal sever error,表示服务器端在执行请求时发生了错误
501 Not Implemented,表示服务器不支持当前请求所需要的某个功能
503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求
HTTP 报文
请求报文结构
首行是Request-Line包括:请求方法,请求URI,协议版本,CRLF
首行之后是若干行请求头,包括general-header,request-header或者entity-header,每个一行以CRLF结束
请求头和消息实体之间有一个CRLF分隔
根据实际请求需要可能包含一个消息实体
响应报文结构
首行是状态行包括:HTTP版本,状态码,状态描述,后面跟一个CRLF
首行之后是若干行响应头,包括:通用头部,响应头部,实体头部
响应头部和响应实体之间用一个CRLF空行分隔
最后是一个可能的消息实体
DNS预解析流程
本地hosts文件
本地DNS缓存
DNS服务器缓存
DNS服务器递归查找
WebSocket
WebSocket是一种双向通信协议。在建立连接后,WebSocket服务器端和客户端都能主动向对方发送或接收数据
TCP和UDP的区别
| 区别 | UDP | TCP |
|---|---|---|
| 是否连接 | 无连接 | 面向连接 |
| 是否可靠 | 不可靠传输,不使用流量控制和拥塞控制 | 可靠传输,使用流量控制和拥塞控制 |
| 连接对象个数 | 支持一对一,一对多,多对一和多对多交互通信 | 只能是一对一通信 |
| 传输方式 | 面向报文 | 面向字节流 |
| 首部开销 | 首部开销小,仅8字节 | 首部最小20字节,最大60字节 |
| 适用场景 | 适用于实时应用(IP电话、视频会议、直播等) | 适用于要求可靠传输的应用,例如文件传输 |
HTTPS是如何进行加密的
- 认证服务器
- 协商会话密钥
- 加密通讯
- 加密
- 对称加密 两方的密钥都相同
- 非对称加密 公钥是都可以知道,但私钥只有分发公钥的人知道
HTTP和HTTPS有何区别
- http是超文本传输协议,信息是明文传输,https 则是具有安全性的SSL/TLS加密传输协议,安全性更高
- http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443
- 握手过程
客户端发起HTTPS请求
服务端的配置
传送证书
客户端解析证书
传送加密信息
服务段解密信息
传输加密后的信息
客户端解密信息
HTTP/2.0新特性
-
二进制分帧层(HTTP1.x 协议以换行符作为纯文本的分隔符,而 HTTP2 将所有传输的信息分割为更小的消息和帧,并采用二进制格式对它们编码)
-
多路复用(解决针对同一域名下的请求有一定数量的限制)
-
原理:即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
-
头部压缩(使用了专门为首部压缩设计的HPACK算法,避免了重复header的传输,又减小了需要传输的大小。)
-
服务器端推送(就是服务器可以对一个客户端请求发送多个响应,服务器向客户端推送资源无需客户端明确的请求。)