理清ajax跨域问题

什么是跨域问题

跨域问题与浏览器的同源策略有关,那么什么是浏览器的同源策略呢?两个页面地址中的协议、域名和端口号一致,则表示同源。例如地址 https://www.google.com 和以下地址对比:
这里写图片描述
大多数情况下,在前后端分离的项目中,前端调用后端接口,当前后端不在一个域,就会产生跨域问题。
产生跨域问题的原因:(三个条件同时满足才会产生跨域问题)
浏览器限制
跨域
XMLHttpRequest请求

解决思路

  • 浏览器方面,让浏览器不做校验、限制(价值不大,客户端要改动,一般不用)
  • 避免发xhr请求(jsonp)用的越来越少,有很多弊端,无法满足现在的开发要求,只能发get请求
  • 跨域方面:让被调用方支持跨域(支持跨域)或者调用方使用代理(隐藏跨域);这一解决方法是目前使用最多的
    支持跨域:让被调用方修改代码,让其支持跨域,在b域名返回的信息中加入一些字段,告诉浏览器允许a域名的调用
    隐藏跨域:(被调用方无法被修改)通过代理,从浏览器发出的都是a域名的请求,在代理里面把指定的url转到b域名中

各解决方案详解

  • 在打开浏览器时设置一个参数,禁止浏览器的检查

  • jsonp解决跨域

    • 弊端——使用jsonp后台需要做改动、只支持get请求、发出去的不是xhr请求
  • 跨域解决
    这里写图片描述
    这里写图片描述

这里写图片描述
被调用方(服务端代码)设置响应头信息允许前端8081端口的调用,以及允许调用的方法等
这里写图片描述
后端允许所有域所有方法访问的写法
这里写图片描述
浏览器在发送跨域请求时,会先判断是简单请求还是非简单请求,如果是简单请求。就先执行后判断,如果是非简单请求就回先发一个预检命令,检查通过之后才会真正的把请求发送出去。
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值