JSONP 的原理是什么?
-
1.Ajax直接请求普通文件存在跨域无权限访问的问题(静态页、动态页、web服务、wcf只要是跨域请求一律不准)
-
2.web的页面上调用js文件是不受跨域的影响(凡拥有src属性的标签都拥有跨域能力script img iframe)
-
3.可以判断 现在想通过纯web端(ActiveX控件、服务端代理、H5之Websocket等方式不算)跨域访问数据就只有一种可能,就是在远程服务器上设法把数据装进js格式的文件里,供客户度调用和进一步处理;
-
4.json的纯字符数格式可以简洁的描述复杂数据还被js原生支持
-
5.web客户端通过与调用脚本一样的方式来调用跨域服务器上动态生成的js格式文件(后缀.json),服务器之所以要动态生成json文件目的把客户端需要的数据装入进去
-
6.客户端在对json文件调用成功后获得自己所需的数据剩下的就按照自己需求进行处理和展现,这种获取远程数据的方式非常像ajax其实并一样
-
7.为了方便客户端使用数据逐渐形成非正式传输协议jsonp
该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住json数据 这样客户端就可以随意定制自己的函数来自动处理返回数据
异步加载JS的方式有哪些?
- defer,只支持
IE
async
:支持Ie8以上- 创建
script
,插入到DOM
中,加载完毕后callBack
defer
并行加载js
文件,会按照页面上script
标签的顺序执行async
并行加载js
文件,下载完成立即执行,不会按照页面上script
标签的顺序执行
常见web安全及防护原理
-
1.xss : 往web页面插入恶意的html标签或者js代码
解决方案: 1.尽量采用post而不使用get提交表单 2.避免cookie中泄漏用户的隐式
-
2.CSRF(跨站请求伪装):通过伪装来自受信任用户的请求
解决方案: 在客服端页面增加伪随机数,通过验证码
-
3.sql注入原理
就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
总的来说有以下几点
永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双"-"进行转换等
永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取
永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接
不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息 -
4.第三方依赖包 减少对第三方依赖包的使用
那些操作会造成内存泄漏?
1.意外的全局变量引起的内存泄漏
2.闭包引起的内存泄漏
3.没有清理的DOM元素引用
4.被遗忘的定时器或者回调
5.子元素存在引用引起的内存泄漏
new操作符到底干了什么?
1.在内存中创建一个匿名对象
2.调用构造函数
3.把构造函数里面的this指向第一步创建的对象
4.执行了构造函数里面的代码
5.把this指向的对象返回
如何实现浏览器内多个标签页之间的通讯
第一种——调用localStorage
在一个标签页里被添加、修改或删除时,都会触发一个storage事件,通过在另一个标签页里监听storage事件,即可得到localstorge存储的值,实现不同标签页之间的通信。
使用方式:直接在window对象上添加监听
第二种——调用cookie+setInterval()
将要传递的信息存储在cookie中,每隔一定时间读取cookie信息,即可随时获取要传递的信息。
事件传播的三个阶段是什么
- 1.第一阶段:从window对象传导带目标节点,称为"捕获阶段"
- 2.第二阶段:在目标节点上触发,称为"目标阶段"
- 3.第三阶段:从目标节点传导回window对象,称为"冒泡阶段"
同步和异步的区别?
- 同步:浏览器访问服务器请求,用户看得到页面刷新,重新发请求,等请求完,页面刷新,新内容出现,用户看到新内容,进行下一步操作
- 异步:浏览器访问服务器请求,用户正常操作,浏览器后端进行请求。等请求完,页面不刷新,新内容也会出现,用户看到新内容
前端如何压缩图片
一般使用canvas的drawImage()方法
因为前端压缩图片的实际意义是对于大尺寸图片上传时,图片占用内存太大,这样会降低流畅性导致用户体验感极差.
WebSocket和HTTP的区别
Websocket
1.可以让客户端主动发消息给服务端,也可以服务端主动发消息给客户端,是真正的双向平等对话
2.数据格式比较轻量,性能开销小,通信高效。
3.没有同源限制,客户端可以与任意服务器通信
HTTP有一个缺陷,通信只能由客户端发起
HTTP协议做不到主动发给客户端消息,只能是客户端向服务端发送请求,服务器返回结果