http 与 https:
基本概念:
- HTTP:是客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
- HTTPS:是以安全为目标的HTTP通道,即HTTP下加入SSL层,HTTPS的安全基础是SSL,其主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
主要区别:
- HTTP(超文本传输协议)被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密。因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
- HTTPS(安全套接字层超文本传输协议)为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
- https协议需要到ca申请证书
- http信息是明文传输,https则是具有安全性的ssl加密传输协议。
- http端口是80,https端口是443。
- http的连接很简单,是无状态的;https协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议
HTTPS的工作原理:
https://blog.csdn.net/sean_cd/article/details/6966130 (这位兄台说的很详细)
HTTPS的优点:
- 使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
- HTTPS协议要比HTTP协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
- HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
HTTPS的缺点:
- HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;
- HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;
- SSL证书比较昂贵;
- SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗;
- HTTPS协议的加密范围也比较有限。SSL证书的信用链体系并不安全,当可以控制CA证书的情况下,中间人攻击可行。
TCP的三次握手:
- TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务端保存的一份关于对方的信息,如ip地址、端口号等。
- 一个TCP连接由一个4元组构成,分别是两个IP地址和两个端口号。一个TCP连接通常分为三个阶段:连接、数据传输、退出。通过三次握手建立一个链接,通过四次挥手来关闭一个连接。
- 当一个连接被建立或被终止时,交换的报文段只包含TCP头部,而没有数据。
- 三次握手过程:https://blog.csdn.net/ThinkWon/article/details/104903925
- 四次挥手过程:https://blog.csdn.net/ThinkWon/article/details/104903925
TCP与UDP区别:
-
TCP面向连接(如打电话要先拨号建立连接); UDP是无连接的,即发送数据之前不需要建立连接
-
TCP提供可靠的服务。通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
-
TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流; UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低
-
每一条TCP连接只能是点到点的; UDP支持一对一,一对多,多对一和多对多的交互通信
-
TCP首部开销20字节; UDP的首部开销小,只有8个字节
-
TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
WebSocket:
(1)什么是WebSocket?
WebSocket是HTML5中的协议,支持持久连续, http协议不支持持久性连接。Http1.0和HTTP1.1都不支持持久性的链接, HTTP1.1中的keep-alive, 将多个http请求合并为1个
(2)WebSocket是什么样的协议,具体有什么优点?
- HTTP的生命周期通过Request来界定,也就是Request一个Response。在Http1.1中进行了改进,有一个connection: Keep-alive, 也就是说,在一个Http连接中,可以发送多个Request,接收多个Response。但是必须记住,在Http中一个Request只能对应有一个Response, 且这个Response是被动的,不能主动发起。
- WebSocket是基于Http协议的,或者说借用了Http协议来完成一部分握手,在握手阶段与Http是相同的。
HTTP请求的方式,HEAD方式:
- head:类似于get请求,只不过返回的响应中没有具体的内容,用户获取报头
- options:允许客户端查看服务器的性能,比如说服务器支持的请求方式等等。
BOM:
- 什么是Bom? Bom是浏览器对象。
- location对象:
- location.href -- 返回或设置当前文档的URL
- location.search -- 返回URL中的查询字符串部分。
- location.hash -- 返回URL # 后面的内容,如果没有#,返回空
- location.host -- 返回URL中的域名部分
- location.hostname -- 返回URL中的主域名部分
- location.pathname -- 返回URL的域名后的部分
- location.port -- 返回URL中的端口部分
- location.protocol -- 返回URL中的协议部分
- location.assign -- 设置当前文档的URL
- location.replace() -- 设置当前文档的URL ,并且在history对象的地址列表中移除这个URL location.replace(ur);
- location.reload() -- 重载当前页面
- history对象
- history.go() -- 前进或后退指定的页面数 history.go(num);
- history.back()-- 后退一页
- history.forward() -- 前进一页
- Navigator对象
- navigator.userAgent -- 返回用户代理头的字符串表示(就是包括浏览器版本信息等的字符串)
- navigator.cookieEnabled -- 返回浏览器是否支持(启用)cookie
HTML5 drag api
- dragstart: 事件主体是被拖放元素,在开始拖放被拖放元素时触发。
- drag: 事件主体是被拖放元素,在正在拖放被拖放元素时触发。
- dragenter: 事件主体是目标元素,在被拖放元素进入元素时触发。
- dragover: 事件主体是目标元素,在被拖放元素在某元素内移动时触发。
- dragleave: 事件主体是目标元素,在被拖放元素移出目标元素时触发。
- drop: 事件主体是目标元素,在目标元素完全接受被拖放元素时触发。
- dragend:事件主体是被拖放元素,在整个拖放操作结束时触发
HTTP2.0:
- 简要概括: http2.0是基于http1.0之后的首次更新。提升了访问速度(请求资源所需时间更少,访问速度更快,相比http1.0)
- 允许多路复用: 多路复用允许同时通过单一的 HTTP2 连接发送多重请求-响应信息。
- 改善了: 在http1.1中, 浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制(连接数量),超过限制会被阻塞。
- 二进制分帧: HTTP2.0会将所有的传输信息分割为更小的信息或者帧,并对他们进行二进制编码
400、401、403状态码:
- 400状态码: 请求无效 ;产生原因: 前端提交数据的字段名称和字段类型与后台的实体没有保持一致,前端提交到后台的数据应该是json字符串类型,但是前端没有将对象JSON.stringify转化成字符串。解决方法: 对照字段的名称,保持一致性,将obj对象通过JSON.stringify实现序列化
- 401状态码: 当前请求需要用户验证
- 403状态码: 服务器已经得到请求,但是拒绝执行
Cookie、sessionStorage、 localStorage的区别:
- 共同点: 都是保存在浏览器端,并且是同源的
- Cookie: cookie数据始终在同源的http请求中携带,即cookie在浏览器和服务器间来回传递。 而sessionStorage和localStorage不会自动把数据发给服务器, 仅在本地保存。Cookie数据还有路径(path) 的概念,可以限制cookie只属于某个路径下,存储的大小很小只有4K左右。
- SessionStorage: 仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持,localStorage: 始终有效,窗口或浏览器关闭也一直保存, 因此用作持久数据; cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。
- localStorage: localStorage 在所有同源窗口中都是共享的; cookie也是在所有同源窗口中都是共享的。(key: 同源窗口都会共享,并且不会失效,不管窗口或者浏览器关闭与否都会始终生效) .
cookie的作用:
- 保存用户登录状态。例如将用户id存储于一个cookie内, 这样当用户下次访问该页面时就不需要重新登录了。
- 跟踪用户行为。
- HTTP是一个无状态协议,因此Cookie的最大作用就是存储sessionId用来唯一标志用户
web worker:
- 在HTML页面中,如果在执行脚本时,页面的状态是不可响应的,直到脚本执行完成后,页面才变成可响应的。web worker是运行在后台的js,独立于其他脚本,不会影响页面的性能。并且通过postMessage将结果回传到主线程。这样在进行复杂操作的时候,就不会阻塞主线程了。
Doctype:
- Doctype声明于文档最前面,告诉浏览器以何种方式来渲染页面, 这里有两种模式:严格模式和混杂模式。
- 严格模式的排版和JS运作模式是以该浏览器支持的最高标准运行。
- 混杂模式,向后兼容, 模拟老式浏览器,防止浏览器无法兼容页面。
Cookie如何防范XSS攻击:
XSS (跨站脚本攻击) 是指攻击者在返回的HTML中嵌入javascipt脚本, 为了减轻这些攻击, 需要在HTTP头部配上, set-cookie:
httponly-这个属性可以防止XSS, 它会禁止javascript脚本来访问cookie。
secure -这个属性告诉浏览器仅在请求为https的时候发送cookie。
click在 ios 上有300ms延迟如何解决?
- 粗暴型:禁用缩放 user-scalable=no
- 利用FastClick,其原理是: 检测到touchend事件后,立刻触发模拟click事件, 且把浏览器300毫秒之后真正出发的事件给阻断掉
addEventListener参数
- addEventListener(event, function, useCapture)
- 其中,event指定事件名; function指定要事件触发时执行的函数; useCapture指定事件 是否在捕获或冒泡阶段执行。