会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话,它可以弥补http协议无状态的不足。常用的会话跟踪技术是cookie与session。cookie通过在客户端记录信息确定用户身份,session通过在服务器端记录信息确定用户身份。
cookie可以解决http的无状态的问题,与服务器进行交互,作为http规范存在。它具有极高的简便性、可扩展性和可用性,也可以通过加密和SSL技术来提高其安全性。因此推荐使用cookie作为标识而不是身份验证的工具。
(1) 大小和数目受限制。浏览器对一个域cookie的条目数有上限要求,且每个cookie的大小不得超过4kb。
(2)存在安全性问题,易被人拦截。
(3)需要指定域,不可以跨域
(4)浪费带宽,因为我每次请求一个新的页面,cookie都会被自动发送过去。
(5)有的移动端浏览器不支持cookie或浏览器禁用cookie
(6)有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。
在服务器端,以java为例,可以将同名cookie的maxAge属性置0;在客户端,可以将expires属性设置为过去的一个时间。即:
document.cookie = ‘name=’+cookie_name+’;expires=’+ passed_date
重绘是指的屏幕的一部分要重新绘制,比如元素的背景色发生了改变,但几何尺寸未发生改变。重排意味着元素的几何尺寸发生了改变,需要重新计算生成渲染树。
下面几种情况会发生重排:
(1)resize窗口时
(2)修改网页默认字体时
(3)修改CSS样式改变尺寸时
(4)JS操作dom树
(5)一些影响布局的动画
(6)使用JS脚本获得一些布局属性时,比如offsetTop
相应的,可以采取以下方法来减少重排:
(1)不要一条条的修改DOM样式,改变className来“统一修改”(注:现代浏览器会进行增量异步reflow,即“攒够”一些修改后再统一修改)
(2)把dom离线修改,比如将其至于内存或设置display:none。
(3)为html动画原件使用position:absolute布局或fixed布局,这样不会引起重排和重绘。
(4)不要使用table布局,因为稍加改动就会导致table的重新布局。
(5)将offsetTop等属性缓存成局部变量。
首先,浏览器会解析html\xhtml\svg,生成一个dom树,解析css文件生成css规则树,解析javascript以获得其对html和css的影响。解析完成后,浏览器会根据dom树和css规则树来生成渲染树。渲染树不包括像header元素这样页面中不会出现的元素。之后,会进行layout,定义元素的坐标。最后通过调用系统Native GUI的API绘制。
网页中优化图片的方式有:
(1)去掉没有意义的修饰
(2)使用CSS和矢量图代替位图
(3)惰性加载图片,使得图片可见后再进行加载
(4)使用CSS Sprites,将多张小图拼成一张大图
png属于无损压缩,而jpg则是有损压缩,这意味着一张图片多次使用jpg格式压缩的话会逐渐失真。png格式的图片存储空间明显大于jpg格式的图片
(1)跨站脚本攻击(XSS)
(2)分布式拒绝服务(DDOS)
基本方法是利用合理的请求占用服务器的大量资源,使正常用户无法得到服务器的相应。
(3)跨站请求伪造攻击(CSRF)
攻击者通过各种方法伪造一个请求,模仿用户提交表单的行为,从而达到修改用户的数据,或者执行特定任务的目的。解决方法是尽量使用post请求。
(4)sql注入
攻击主要针对后台使用sql拼接方式查询的情况,攻击者注入类似or 1 = 1的sql语句,致使表内的全部信息泄露。
(1) get请求一般用来获得数据,而post请求一般用来发送数据。人们期望,get请求不会对服务器造成任何影响,而post请求则可能会影响服务器端的数据。get请求消耗的资源较post请求而言,会少一些,但相对安全性较差。发送同样大小的数据,get请求的效率最高可以达到post请求的2倍。
(2)一般按照约定,使用get请求时,将数据通过url进行传递,而是用post请求时,将数据放在body里。但这并非硬性规定,因为method和data本身是正交的。post请求亦可将数据放在url中。
(3)就协议底层实现而言,在get请求中,只产生一个TCP数据包,浏览器会将header和data一并发送出去,等待服务器的回应;而在post请求中,会产生2个TCP数据包。,浏览器先发送header,服务器响应100 continue,浏览器再发送data。
(1)直观而言,站内跳转不会改变url,而外部重定向会改变url。
(2)重定向可以跳转到web应用以外的页面,而站内跳转则不行。
(3)站内跳转可以通过request传递数据,而重定向不可传递数据。