跨域

跨域

1.如果是跨域,浏览器会报一个固定格式的错误

Access to XMLHttpRequest at ‘ajax请求URL’ from origin ‘null’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

2.什么是跨域

浏览器使用AJAX发送请求,如果请求地址与当前页面地址不同源,称之为跨域

  • ajax请求:只有ajax请求才会出现跨域,请他请求方式不会有跨域 src href
  • 请求地址:需要请求的服务器地址
  • 当前页面地址:地址栏地址(window.location.href)
  • 不同源:协议名,主机名或端口号,有任何一个不一致
3.同源

两个url 地址的 协议名(http),主机名(ip),端口号完全一致

4.同源策略

同源策略的目的是为了防止恶意网站窃取用户的数据信息冒充用户做一些操作。同源限制只是提高攻击成本。

5.解决方案

工作中难免会使用AJAX向不同源的地址发送请求,以下是两种常见的解决方式:

(1)cors : 目前主流解决方案

  • cors方案与前端没有任何关系,是服务端实现

  • 核心原理:服务端设置一个特殊的响应头,res.setHeader(‘Access-Control-Allow-Origin’);通俗说就是告诉服务器,我是安全的,不要拒绝我。

  • express中间件:cors 给所有的接口设置响应头。
    (2)JSONP

  • 核心工作原理:利用浏览器漏洞,(利用script标签的src属性,服务器返回的是一个函数的调用,则浏览器会自动调用这个函数)。

  • 工作流程
    a:浏览器声明一个函数
    b:浏览器使用script标签的src属性发送请求,将函数名作为参数,格式是:callback=函数名
    c:服务器获取请求之后,拿到callback参数的值(前端的函数名),响应返回这个函数调用,将响应的数据做为这个函数的参数。

(3)jquery使用JSONP
把ajax请求中的dataType设置为jsonp

  • 动态的添加一个script标签,将url作为script标签的src属性
  • jq会自动在src后面拼接一个参数:callback=success
  • 服务器响应之后,jq会自动移除script.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

️不倒翁

你的鼓励就是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值