《跨域,静态服务器,动态服务器》

82 阅读2分钟

同源策略

  • 同源策略:浏览器规定,如果js运行在源A里,那么就只能获取源A的数据,不能获取源B的数据,即不允许跨域 —————— 不同源的页面之间不准相互访问数据
  • 源:window.origin或location.origin可以获得当前页面的源
    • 源 = 协议 + 域名 + 端口号
    • 如果两个URL的协议、域名、端口号完全一致,那么这两个URL是同源的

为什么可以跨域使用css,js,图片

  • 同源策略限定的是数据访问,引用css,js,图片的时候,其实并不知道他的内容,只是在引用。

如何跨域

CORS (跨域资源共享)

  • 请求头里添加
    • response.setHeader(Access-Control-Allow-Origin,允许访问的源)
  • 告诉浏览器,允许域名访问
  • CORS不支持IE

jsonp(和json无关)

  • 步骤(frank.com访问qq.com)
    1. qq.com将数据写到friend.js
    2. frank.com用script标签引用friend.js
    3. frank.com事先定义好window.xxx函数
    4. friends.js执行window.xxx({friends:[...]})
    5. 然后frank.com就通过window.xxx获取到数据
    6. window.xxx就是一个回调

jsonp定义:

  • 当前网站发起一个script去请求另一个网站的js

  • js里会夹带一些数据

  • 这些数据会在我的网站上调用一个全局函数运行

  • 优点:

    1. 支持IE
    2. 可以跨域
  • 缺点:

    1. 因为他是一个script函数,所以他写不到状态码,拿不到Header
    2. 不支持post(上传)

静态服务器

定义:我只返回现存的文件

动态服务器

判断依据:是否请求了数据库

读取/db/user.json数据

  1. fs.readFileSync('./db/user.json').toString
  2. JSON.parse(反序列化),得到数组

存写/db/user.json

  1. JSON.stringify(序列化),得到字符串
  2. fs.writeFileSync('./db/user.json',data)

Cookie

定义:

  • Cookie是服务器下发到浏览器的一段字符串
  • 浏览器必须保存这个Cookie(除非用户删除)
  • 之后发起二级域名请求时,浏览器必须附上Cookie

例:

  • response.setHeader('set-Cookie','xxx=1',HttpOnly)
  • 设置Cookie,禁止前端访问(HttpOnly)