绕不过的就突破

参考文档
1、跨域
  同源策略,IE有例外 eg 端口不作为是否同源的条件
    没有同源策略的接口请求和DOM查询
  正确姿势
  JSONP 
    JSONP的优势在于支持老式浏览器,以及可以向不支持CORS的网站请求数据 
    HTML标签里,一些标签比如script、img这样的获取资源的标签是没有跨域限制
      服务端收到url后回调前端定义的方法
      post方法通过js构造iframe form表单提交模拟
  CORS W3C标准  cross-origin resource sharing(IE浏览器不能低于IE10)
    请求头origin 不许可的话 --> 浏览器看响应头是否包含 Access-Control-Allow-Origin字段
      如果要发送Cookie,Access-Control-Allow-Origin就不能设为星号
      
      预检preflight
        request
          origin
          Access-Control-Request-Headers
          Access-Control-Request-Method
        response
          Access-Control-Allow-Origin: *     
            
Access-Control-Allow-Methods: GET, POST, PUT (必须)

         Access-Control-Allow-Headers: X-Custom-Header (requestHeader有)

         Access-Control-Allow-Credentials: true

         Access-Control-Max-Age: 1728000

 
    简单请求:同时满足1、2     (浏览器自动增加请求头origin)
    (
      1、HEAD GET POST
      2、HTTP的头信息不超出以下几种字段:

        Accept、Accept-Language、Content-Language、Last-Event-ID

  •         Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain

     )

      // *时cookie不会在http请求中带上
        ctx.set('Access-Control-Allow-Origin', '*')
    复杂请求
      非简单请求会发出一次预检测请求,返回码是204,预检测通过才会真正发出请求,这才返回200。
  nginx转发
    location是NginxHttpCoreModule的重要指令,为匹配的URI进行配置
      字符串、正则(须指定前缀) = ~ ~* !~ !~*
        精确
        不精确匹配
          区分大小写
        不匹配
 
  DOM查询
  1.postMessage
    window.postMessage() 是HTML5的一个接口,专注实现不同窗口不同页面的跨域通讯。
  2、document.domain
    这种方式只适合主域名相同,但子域名不同的iframe跨域。
    比如主域名是http://crossdomain.com:9099,子域名是http://child.crossdomain.com:9099,
    这种情况下给两个页面指定一下document.domain即document.domain = crossdomain.com就可以访问各自的window对象了。
  3.canvas操作图片的跨域问题  回家赶紧找出 《css世界》读读  
 
ps
  www.baidu.com
  主机名+DNS域名+一个点(.)
  www是主机名也是默认的主机域名
  一级(顶级)、二级、子域名
  最右边.com是顶级域名(一级域名),其他 .cn,.net,.org,.gov,.edu,.tv
  .com.cn  .com是.cn下的二级域名
  任何人都注册.com域名
  image.baidu.com  image是子域名
posted @ 2019-05-15 21:09  翰弟  阅读(195)  评论(0编辑  收藏  举报