Open py-tofee opened 3 years ago
出于安全考虑,浏览器遵守同源策略;
如果两个页面的协议、域名和端口都一致,那么它们具有相同的源;如果不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源;有效隔离了恶意文件的攻击。
跨域是浏览器行为,不是服务器行为;实际上,跨域请求已经到达服务器了,只不过返回的时候被浏览器拦截了;所以,需要配置代理,代理就是在客户端和目标服务器之间 有一台代理服务器,所有的请求都通过代理服务器转发;
module.exports = {
//...
devServer: {
proxy: {
'/api': {
target: 'http://localhost:3000',
changeOrigin: true,
}
}
}
};
正向代理即客户端代理,代理客户端,服务端不知道实际发起请求的客户端;如翻墙软件 反向代理即服务端代理,代理服务端,客户端不知道实际提供服务的服务端; 参考链接
存储会话数据,当会话关闭时会消失; 页面刷新或者崩溃并重启恢复 不受影响; sessionStorage与服务器会话紧密相关,所以在运行本地文件时不可用;
存储在localstorage中的数据,会永久保留,直到通过js删除或者用户清除浏览器缓存;
Window.history - 只读属性
History 对象提供了操作浏览器会话历史的接口
History.pushState 和 History.replaceState
可以改变网址(存在跨域限制)而不刷新页面,vue-router基于此实现
popstate事件
调用history.pushState()或history.replaceState()不会触发popstate事件。只有在做出浏览器动作时,才会触发该事件,如用户点击浏览器的回退和前进按钮(或调用history.back()、history.forward()、history.go()方法)时触发;
hash/hashchange
如果location.hash发生变化,也会导致历史记录栈的变化,并触发popstate事件;
hashchange是老API, 浏览器支持度高, 本来是用来监听hash变化的, 可以被利用来做客户端前进后退, 但应该不是这个API的存在的主要目的。而popstate, 及相关api, pushState等属于HTML5新标准, 产生的目的就是做客户端前进后退的, 不仅可以支持hash, 非hash的同源url也支持.所以一般用法是浏览器支持就用popstate, 不支持再降级使用hashchange。