即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术,以便节省带宽资源。
通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
产生跨域是由于浏览器的安全策略,JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对JS和ajax的,html本身没有跨域问题,比如a标签、script标签、甚至form标签(可以直接跨域发送数据并接收数据)等。所谓的同源,指的是域名、协议、端口均相等。
异步,JavaScript,XML
同源策略里面的资源是指Web客户端的资源,一般来说,资源包括:HTTP消息头、整个DOM树、浏览器存储(如:Cookies、Flash Cookies、localStorage等),客户端安全威胁都是围绕这些资源进行的。
它是一种与平台和语言无关的应用程序接口(API),它可以动态地访问程序和脚本,更新其内容、结构和www文档的风格(目前,HTML和XML文档是通过说明部分定义的)。文档可以进一步被处理,处理的结果可以加入到当前的页面。DOM是一种基于树的API文档,它要求在处理过程中整个文档都表示在存储器中。另外一种简单的API是基于事件的SAX,它可以用于处理很大的XML文档,由于大,所以不适合全部放在存储器中处理。web客户端攻击都几乎离不开DOM操作
是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
常用的社工辅助技巧有:Google Hack、SNS垂直搜索,各种信息收集的数据库查询等。
CSRF是跨站请求伪造
通过URL请求可以查到唯一的资源,格式如下:
<scheme>://<netloc>/<path>?<query>#<fragment>比如一个最普通的URL:
http://www.foo.com/path/f.php?id=1&type=cool#new
对应的是:
scheme - http : 网络协议
netloc - www.foo.com: 服务器位置(也有可能是用户信息)
path - /path/f.php: 网页文件在服务器中的位置
params - : 可选参数
query - id=1&type=cool : &连接键值对(包括<参数名=参数值>对)
fragment - new:
URL编码方式有三类:escape encodeURL encodeURLComponent
对应的解码函数是:unescape decodeURL decodeURIComponent
三个编码函数是有差异的,甚至浏览器在自动URL编码中也存在差异。
强制每次请求直接发送给源服务器,而不经过本地缓存版本的校验。这对于需要确认认证应用很有用(可以和public结合使用),或者严格要求使用最新数据 的应用(不惜牺牲使用缓存的所有好处)
Pragma 当"no-cache"出现在请求消息中时,应用程序应当向原始服务器推送此请求,即使它已 经在上次请求时已经缓存了一份拷贝。这样将保证客户端能接收到最权威的回应。它也用来 在客户端发现其缓存中拷贝不可用或过期时,对拷贝进行强制刷新。
max-age>0 时 直接从游览器缓存中 提取 max-age<=0 时 向server 发送http 请求确认 ,该资源是否有修改 有的话 返回200 ,无的话 返回304.
是请求端在发送请求时的头部信息,这个标识的是当前客户端可以接受的字符编码(所谓字符编码就是对于可见或者不可见字符的编码方式,如utf-8,GBK等)。
也是请求端在发送请求的时候头部的信息,这个表示的是当前客户端可以接受的页面编码,这个编码与字符编码不是一个该概念,(我们经常会用到压缩文件,将正常文件进行压缩就是一种利用文件的底层编码进行的再编码,比如有一个文件的数据转化成二进制以后有很多的相同结构的连续编码,此时就可以用一个比较短的编码表示这个长的编码,比如对 0000001000000这个二进制串用1110表示,这就是压缩,然后再解压缩的时候再反过来将编码还原,这就是解码)服务器在发个客户端数据的时候会将数据先根据请求数据中的Accept-Charset进行编码,然后对数据进行压缩,也就是说通过Accept-Encoding中可以接受的压缩算法进行压缩,这会有效减小网络压力,同时也减小了对客户端的延时,因为段数据在服务器进行压缩所用的时间与在网络上传输的时间相比还是比较理想的。
JSP中经常能见到这两行代码,在实际应用中默认的编码是ISO-8859-1,如果不设置就是默认的编码,如果改变其中任何一个两一个也跟着改变,但是我对这个的理解是 pageEncoding:表示的是页面编码完成以后在发送数据的时候的编码方式,这里可以是压缩格式,比如ZIP,但是目前还没有见过。
对于Post请求,XMLHttpRequest对象就是一个非常方便的方式,可以模拟表单提交,有异步同步之分,差别在于XMLHttpRequest实例化的对象xhr的open方法的第三个参数,true表示异步,false表示同步,如果使用异步方式就是AJAX。异步则表示请求发出后,JavaScript可以去做其他的事情,待响应回来后会自动触发xhr对象的onreadystatechange事件,可以监听这个事件以处理响应内容。同步则表示请求发出去后JavaScript需要等待响应回来,这期间就进入阻塞阶段。