同源策略
- 同源策略:浏览器规定,如果js运行在源A里,那么就只能获取源A的数据,不能获取源B的数据,即不允许跨域 —————— 不同源的页面之间不准相互访问数据
- 源:window.origin或location.origin可以获得当前页面的源
- 源 = 协议 + 域名 + 端口号
- 如果两个URL的协议、域名、端口号完全一致,那么这两个URL是同源的
为什么可以跨域使用css,js,图片
- 同源策略限定的是数据访问,引用css,js,图片的时候,其实并不知道他的内容,只是在引用。
如何跨域
CORS (跨域资源共享)
- 请求头里添加
- response.setHeader(
Access-Control-Allow-Origin,允许访问的源)
- response.setHeader(
- 告诉浏览器,允许域名访问
- CORS不支持IE
jsonp(和json无关)
- 步骤(frank.com访问qq.com)
- qq.com将数据写到friend.js
- frank.com用script标签引用friend.js
- frank.com事先定义好window.xxx函数
- friends.js执行window.xxx({friends:[...]})
- 然后frank.com就通过window.xxx获取到数据
- window.xxx就是一个回调
jsonp定义:
-
当前网站发起一个script去请求另一个网站的js
-
js里会夹带一些数据
-
这些数据会在我的网站上调用一个全局函数运行
-
优点:
- 支持IE
- 可以跨域
-
缺点:
- 因为他是一个script函数,所以他写不到状态码,拿不到Header
- 不支持post(上传)
静态服务器
定义:我只返回现存的文件
动态服务器
判断依据:是否请求了数据库
读取/db/user.json数据
- fs.readFileSync('./db/user.json').toString
- JSON.parse(反序列化),得到数组
存写/db/user.json
- JSON.stringify(序列化),得到字符串
- fs.writeFileSync('./db/user.json',data)
Cookie
定义:
- Cookie是服务器下发到浏览器的一段字符串
- 浏览器必须保存这个Cookie(除非用户删除)
- 之后发起二级域名请求时,浏览器必须附上Cookie
例:
- response.setHeader('set-Cookie','xxx=1',HttpOnly)
- 设置Cookie,禁止前端访问(HttpOnly)