跨域的起因和思路

2 篇文章 0 订阅

跨域问题

老早之前就想了解一下跨域到底是怎么产生的,后面一直没去了解,现在了解一下,顺手记录一下
本文主要是看了慕课课程 ajax跨域完全讲解 写的.

本文结构

  • 跨域生成的原因
  • 跨域的解决方案

跨域生成的原因

  1. 浏览器限制(可以理解为浏览器安全机制在作祟,浏览器默认会对跨域做拦截)
  2. 跨域(其实就是请求域名不同的服务器)
  3. xhr请求(可以理解为ajax请求,你的网站加载其他网站的图片啥的就没有这个问题)

以上三个条件同时满足,请求才会有问题,所以破坏任何一个条件请求就没有问题

解决思路


思路有三种:

  • 破坏条件一(让浏览器访问网页,不用校验这些烂七八糟的),下面的解决方案一
  • 破坏条件三(xhr请求),下面的解决方案二
  • 破坏条件一(让浏览器通过校验,告知浏览器我这个服务器是允许跨域访问的)响应头加上允许跨域访问的头部,下面的解决方案三、四

  1. 限制浏览器不做校验
    - 破坏条件1
    - 浏览器启动的时候加上不校验跨域的参数
    - 最简单,但不推荐
    - 因为1.用户来说就不安全了2.你不可能要求所有用户启动的时候还加上乱起八糟的参数
  2. xhr—>jsonp请求
    - 破坏条件3
    - 服务端同时也需要修改,接受方式也需要修改成jsonp
    - 比较简单
    - 好处:只针对某个请求,改动小,影响面也小同时也有限
    - 限制条件:就是服务端自己能修改
  3. 跨域(被调用方修改)
    - 场景:服务器是自己的,
    - 解决方案:那么直接在自己返回的请求加上允许跨域访问的 参数
    - eg:java的话可以搜一下,跨域 在拦截器在响应头加上参数
  4. 跨域(调用方修改)
    - 场景:服务方不是自己的,
    - 解决方案:那么需要自己启动一个服务,然后再转发到别人那边,请求响应的时候再加上参数返回给浏览器
    - 这种方案基于你调用的是其他人的服务,没办法改别人的服务
    - 例子:大概思路就是访问自己的nginx服务器,然后转发请求到别人的服务器,然后在响应头加上允许跨域的参数
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值