由于http是无状态的,所以每次浏览器访问服务器,http都不知道你是谁,第一次访问服务器你是一个新来的人,第二次访问服务器还是一个新来的人。
那怎么样才能确定关系呢?保持相识的关系呢?通过+标记和打标签,在http头里有东西,比如 User-Agent(UA)
UA会提交到服务器上,服务器也可以拿到UA的信息,但是UA无法标记这个用户是谁,所以不能用UA来标记用户。
所以,就出现了请求打进来之后,服务器会生成一个唯一的字符串绑定用户(session),存到服务器端,然后下发到客户端(浏览器存住下次再通过浏览器访问,服务器就知道是谁来访问了)(这个存在于客户端的字符串写入到cookies里)。字符串包括了过期时间等等。这里过期时间在shiro中的Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。这个功能就是cookie的过期时间,永不过期就是记住我,设置session的有效期就是永不过期。
这样的话,就可以每次访问网站的时候留下相同的轨迹,我就知道你是谁了,这个和登录不登录没关系,不登陆也能记住你
服务器不再下发给浏览器一个字符串,去把这个字符串写入cookies里,不去这样做。而是直接下发一个字符串,这个字符串可以写入cookies里,也可以不写入cookies里,如果浏览器禁用了cookies,那么就每一次请求点击的时候都加上这个字符串去访问服务器,这个字符串就是token。比如说xxx.action?token="sajdhjsakd" token也是一个服务器端生成的session字符串。token不基于cookies,token可以跨平台
浏览器同源指的是,协议,域名,端口号都相同,http和https属于不同的协议,端口号就不说了都懂,域名不一样例如,一个是.com,另一个是.cn
服务端生成的字符串,作用于同源,访问了一个网站使用了token,cookies,那么访问和刚才那个网站差不多的网站要不要再使用这个字符串,相同的源使用相同的会话机制 ,假如访问了1号网站http:// 再访问2号网站https:// 即使剩下的网址都一样,那么也是不同源,也就不能再使用上面所说的字符串了。登录了1号网站再登录2号网站就不好使了,作用域作用不到2号网站。举个例子说一下什么叫同源:
http:// baidu.com/vip.html
http是协议,不同协议的,不属于同源
http://baidu.com是域名 vip.baidu.com 不是同源
/vip.html 这属于资源地址,无所谓的 例如 http: // baidu.com/v1/vip.html 这是同源的
浏览器的同源策略是一种安全功能,同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。所以http://a.com下的js脚本采用ajax读取http://b.com里面的文件数据是会报错的。
不同源就形成了跨域,跨域的都是不同源的。
在 http:// baidu.com/vip.html 页面里,用iframe src img js ajax 引用了
http:// baidu.com/vip1.html 这个里面的东西,这样会话是可以带过去的,但是引用的不同源的话,会话是带不过去,但是能访问
也就是 不同源 能读,但是会话带不过去
<script> <img> <iframe> <link> <video> 这些标签都可以发起跨域请求
不同源的跨域请求,浏览器提供的安全机制 。
此方法只能发起GET请求,通过jsonp发送的请求,会随带 cookie 一起发送。
在浏览器中指定Origin来源,如果在服务器接受范围,请求则成功
CORS与JSONP的使用目的相同,但是比JSONP更强大。
JSONP只支持GET
请求,CORS支持所有类型的HTTP请求。JSONP的优势在于支持老式浏览器,以及可以向不支持CORS的网站请求数据。
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
添加我为好友,拉您入交流群!
请使用微信扫一扫!