cookie与跨域的方法
1.跨域方法
在浏览器中因为受到同源策略的影响,我们不能跨服务器进行数据的访问。因此接下来要说到的就是几种关于浏览器跨域的几种方式。
1.flash现目前不常用,因此不做讨论
2.服务器代理中转
3.jsonp
4.document.domain(针对基础域名相同的情况)
bj.58.com document.domain = '58.com'
tj.58.com document.domain = '58.com'
各种跨域的实现原理与方法
服务器代理中转:
首先明白的一点就是同源策略是浏览器与服务器中间存在的,而服务器与服务器之间不存在同源策略问题。因此如果
想要实现从浏览器跨域到其他服务器,可以采用的方式是先将浏览器中的请求发送给与自己端口、协议、域名相同的
服务器当中,再通过这个服务器与其他服务器进行数据之间的请求,从而就能实现跨域的过程
document.domain(针对基础域名相同的情况)
采用这种方式去处理跨域问题时,必须有一个要求就是基础域名必须是相同的情况下,才能够用这种方式
JSONP原理
1.在web页面上用<script>引入js文件时则不受是否跨域的影响。不仅如此,我们还发现,凡是拥有src这个属性的标签
都拥有跨域的能力,比如 script img iframe
2.于是就可以把数据放在服务器上,并且数据为json形式(因为js可以轻松的处理json数据)
3.因为无法监控script的src属性是否把数据获取完成,所以我们需要做一个处理
4.实现定义好处理跨域获取数据的函数,如function doJSON(data){}
5.用src获取数据的时候提那一个参数cb = 'doJSON'(服务端会根据参数cn的值返回 对应的内容) 此内容为以cb对应
的值doJSON为函数真实要传递的数据为函数的参数的一串字符
在这里需要注意一点的就是,在使用src引入文件的时候,src其实不管文件的格式是什么类型,只要文件中含有需要的数据
就可以进行引入。
注意jsonp的请求方式都是get请求
2.cookie
Cookie是由服务器端生成,发送给USer-Agent(一般是浏览器),浏览器会将Cookie以key/value保存到某个
目录下的文本文件内,下次请求同一个网站时就会发送该Cookie给服务器
记录数据的几种形式
1.标记用户身份http头部请求
以form:email的形式,这种方式的缺点是有的恶意网站会将用户的邮件保存下来,用于发送垃圾文件
以user-agent的形式,只能识别浏览器,不能具体识别用户
referer,用于记录上一次浏览过的网站,用于链接的跳转
2.通过ip地址对其进行识别
1.ip地址描述的是机器不是用户,2.ip地址不唯一,会随机生成不同的ip值
3.用户登录的方式
4.胖URL表示对已有的URL中进行拓展,缺点1.url过长 2.对浏览器会有过多的负载 3.不能共享 4.所存在
的生命周期是页面是否存在,重新生成后会产生一个新的url
5.cookie服务器端生成,发送给USer-Agent(一般是浏览器),浏览器会将Cookie以key/value保存到某个
目录下的文本文件内
cookie的生成与访问流程
首先,进入网页后给服务器发送信号,将设置cookie的信号告诉给浏览器,在此时服务器本身也会创建一个cookie
浏览器就会在本地设置好cookie待下次访问时,浏览器就会将本地的cookie发送给服务器,此时服务器就会将相同
的cookie拿出来返回到浏览器当中
Cookie内存大小受限制,不同版本浏览器,Cookie值是不相同的,但大小一般都是4K
IE6.0 IE7.0 Opera FF Safari chrome
Cookie个数 每个域名下20个 每个域名下50个 每个域名下30个 每个域名下50个 无限制 每个域名下53个
Cookie大小 4095字节 4095字节 4096字节 4097字节 4097字节 4097字节
不同浏览中Cookie的存储方式是不一样的
在ie中的存储方式是以字段的形式存储 ****** ******** *********的样式储存
在Chrome中储存的方式是按照 Name Value Domain Path Expires/Max-Age Size 的形式储存
下面就来了解Cookie中的增添删改
在chrome中,其Cookie的每段中的内容分别表示
Name Value表示该cookie的名称和值 Path表示储存路径 Domain表示访问的服务器之间的位置
Expires 表示cookie具体的存储到某个什么日期,Max-age表示储存的时间为多少秒就结束其单位用秒来表示
document.cookie = 'age=18;max-age=2000';在Cookie中每个字段之间用分号表示对应字段是否结束。