http 和 https
1、http:超文本传输协议;https: 是以安全为目标的HTTP通道,在HTTP的基础下添加了SSL
2、http:明文传输;https:通过SSL进行加密,安全性比http要好
3、http是80端口;https是443端口
4、https:需要ca证书,费用高
5、https协议的工作原理
- 客户端使用 https url 访问服务器(要求web服务器建立ssl链接)
- web服务器接收到客户端的请求后,会将网站的证书(证书包含了公钥),返回给客户端。
- 客户端接收后,客户端和web服务器开始协商 ssl 链接的安全等级(加密等级)
- 达成一致后,建立会话密钥,然后通过网站的公钥来加密会话密钥,并传送到网站
- web服务器通过自己的私钥解密出会话密钥
- web服务器通过会话密钥加密与客户端之间的通信

6、https的缺点
- 握手阶段比较费事
- 缓存不如http高效,会增加数据开销
- SSL证书费用高
TCP 和 UDP 的区别
1、TCP是面向连接;UDP是无连接的(即发送数据前无需先建立链接)‘
2、TCP提供可靠的服务(通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达)
3、UDP尽最大努力交付
4、TCP面向字节流;UDP面向报文,并且网络出现拥塞不会使得发送速率降低(因此会出现丢包,对实时的应用)
5、TCP只能1对1的;UDP支持1对1,1对多
6、TCP的首部较大为20字节,而UDP只有8字节
webSocket的实现和应用
1、什么是 WebSocket
- WebSocket是一种协议,可以在单个TCP连接上进行全双工通信(可以让服务端主动向客户端推送数据)
- 在WebSocket中,浏览器与服务器只需要完成一次握手,两者之间就可以创建持久性的连接并进行双向数据传输
2、Websocket握手环节
- 客户端向服务端发送请求
- 服务端根据客户端的请求切换到WebSocket 协议
- 服务端告知客户端服务器可以发起WebSocket连接
- 客户端发起连接的约定
- 客户端检查服务端的响应
- 服务端处理客户端连接
HEAD请求与GET请求的区别
- HEAD请求跟GET请求相同,同样能够拿到响应头,但是不返回数据实体
- HEAD请求通常是用来在下载文件之前,获取远程服务器上的文件信息
BOM属性方法
1、location 对象
- location.href – 返回或设置当前文档的URL
- location.search – 返回URL中的查询字符串部分(?id=5&name=haohao)
- location.hash – 返回 URL#后面的内容
- location.host – 返回URL中域名部分(www.baidu.com)
- location.hostname – 返回URL中主域名部分(baidu.com)
- location.pathname – 返回URL域名后的部分(www.baidu.com/a 返回/a)
- location.port – 端口号
- location.port – 协议
- location.assign – 设置当前文档的URL
- location.replace – 设置当前文档的URL(并且在history对象的地址列表中移除这个url)
- location.reload() – 重载当前页面
2、history 对象
- history.go() – 前进或后退指定的页面数
- history.back() – 后退一页
- history.forward() – 前进一页
3、navigator 对象
HTML5 拖拽 api
- dragstart: 事件主体是被拖放元素,在开始拖放时触发
- drag:事件主体是被拖放元素,正在拖放时触发
- dragenter:事件主体是目标元素,在被拖放元素进入某元素时触发
- dragover:事件主体是目标元素,在被拖放元素在某元素内移动时触发
- dragleave:事件主体是目标元素,在被拖放元素移出某元素时触发
- drop:事件主体是目标元素,在目标元素完全接受被拖放元素时触发
- dragend:事件主体是被拖放元素,在整个拖放操作结束时触发
http2.0
1、http2.0是基于1999年发布的http1.0之后的首次更新
2、请求资源所需时间更少,访问速度更快
3、二进制分帧(在应用层(HTTP)和传输层(TCP)之间增加一个二进制分帧层)
- 帧:HTTP2.0通信的最小单位,所有帧都共享一个8字节的首部
- 消息:比帧大的通信单位,是指逻辑上的HTTP消息,比如请求、响应等。由一个或多个帧组成
- 流:比消息大的通信得。是TCP连接中的一个虚拟通道,可以承载双向的消息。每一个流都有唯一的整数标识符
在 http1.x 中传输数据使用的是文本传输数据;基于文本传输数据存在很多缺陷。而二进制不同,只有0和1的组合
在http2.0中所有传输的数据都会被分割为更小的消息和帧,并采用二进制格式编码
在http1.x的首部信息会被封装到Headers帧中,而Rquest Body则封装搭配Data帧中。
4、首部压缩
http1.x中并不支持首部压缩;在http2.0中则支持,使用首部压缩的算法是HPACK算法
在http1.x中,使用的是文本形式进行传输,如果在header中需要携带cookie,则每次传输都传输重复数据
在http2.0中,除了通过使用压缩算法压缩首部信息外,在客户端以及服务端都会维护一张索引表(用于记录曾经出现过的header),在后面请求过程中可以重复使用header。而对于接收端就可以通过键名找到对应的值
5、多路复用
在http1.x中由于浏览器限制同一个域名下的请求数量。因此,在页面需要请求很多资源时,队头会出现阻塞,只有等待前面资源加载完毕后才会加载下一个资源。
而在http2.0中,基于二进制分帧,将http消息拆分成独立的帧(在不破坏信息的前提下),交错发出。而在另外一端根据流标识符和首部将这些帧重新组装。
6、请求优先级
把HTTP消息分为很多独立帧之后,就可以通过优化这些帧的交错和传输顺序进一步优化性能。
7、服务器推送
服务器可以对一个客户端请求发送多个响应
比如:
- 客户端请求资源1,服务端在响应资源1的同时再次推送资源2、资源3
- 如果该请求是从主页发出的,服务端可能会响应主页内容、logo以及样式表
缺点:所有推送资源必须遵守同源策略
400、401、403状态码
1、400:请求无效
- 可能产生的原因:前端提交数据的字段名称和字段类型与后台的实体没有保持一致
2、401:当前请求需要用户验证
3、403:服务器已经得到请求,但拒绝执行