美文网首页
AJAX 跨域解决方案

AJAX 跨域解决方案

作者: 海贼王Lorrin | 来源:发表于2022-04-01 11:40 被阅读0次

    一、跨域基础知识

    #前后端分离(服务器)

    - 前端资源(html)- server-a 提供前端静态资源

    - 后端数据(商品信息……)- server-b 提供基于http的api

    #同源策略

    当我们通过 xhr 的方式从一个源去获取另外一个源的数据的时候,就会触发同源策略的协议

    **源**

    域:协议+主机(ip、域名)+端口,比如 http://localhost:8888

    **同源策略**

    **浏览器**的安全设定,避免浏览器中通过脚本等方式去获取非同源的数据

    二、CORS解决跨域

    官方文档:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS

    这套机制建立在一个核心内容基础之上:**http header**,这套机制定义了一系列的http头,通过这些http头来控制资源的访问。这些http头基本都是以 `access-control-?` 来进行命名的,不同的http头有不同的作用。

    #普通资源请求

    **[Access-Control-Allow-Origin](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS#access-control-allow-origin)**

    控制当前允许访问该资源的源(origin)

    # 非普通的资源请求

    **简单请求 & 非简单请求**

    当请求满足一定规则的时候,为简单请求

    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS#%E7%AE%80%E5%8D%95%E8%AF%B7%E6%B1%82

    **预检请求**

    如果当前请求满足了非简单请求,那么就会先发送一个 method 为 options 的请求(浏览器),称为**预检**,后端需要对这个预检请求进行处理,根据业务返回对应的头信息,来告知客户端是否允许发送非简单请求,我们需要在预检请求中返回一系列的头信息,来控制之前发送的非简单请求是否继续

    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS#%E9%A2%84%E6%A3%80%E8%AF%B7%E6%B1%82

    **附带身份凭证的请求**

    cookie 实际也是会受到同源策略的限制的,如果非同源请求,cookie是默认被禁止携带处理的。

    解决:

    - 客户端在请求中要设置:withCredentials: true

    - 服务端要在cors中设置:ctx.set('Access-Control-Allow-Credentials', 'true');

    ## 利用 koa-server-http-proxy 实现服务端代理

    利用 koa-server-http-proxy 来处理正向代理

    ## 基于jwt鉴权(jsonwebtoken)

    **cookie**

    使用cookie来实现用户鉴权

    - 目前cookie限制太多

    - cookie会在一些情况下被禁用

    **放置另外一个地方**

    - 请求必须是可控的(ajax)

    - 基于前后端开发的应用基本都是使用ajax方式进行

    **jwt**

    https://jwt.io/introduction

    附前后端的一些解决跨域的源代码供参考使用


    服务端处理跨域问题 客户端axios请求设置跨域请求 手动代理和正向代理(koa-server-http-proxy)

    相关文章

      网友评论

          本文标题:AJAX 跨域解决方案

          本文链接:https://www.haomeiwen.com/subject/sfhajrtx.html