美文网首页
前端跨域问题的解决思路

前端跨域问题的解决思路

作者: 639c12a85b17 | 来源:发表于2022-06-24 17:50 被阅读0次

前言

做了一个简单页面,做了一些数据埋点,想通过企业微信机器人来推送数据,遇到了一些问题,顺便记录下。

跨域问题的解决思路

由于是项目比较简单,直接使用了ajax去请求,代码如下

$.ajax({
  type: 'POST',
  url: 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=b38aa4d8-a08e-4a91-',
  async: true,
  data: $.toJSON(data),
  contentType:'application/json;charset=utf-8',
  dataType: 'json',
  success: function (data) {
    console.log("data",data)
  },
  error: function (error) {
    console.log("error",error);
  }
})

请求的时候发现了跨域问题

Access to XMLHttpRequest at 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=b38aa4d8-a08e-4a91-' from origin 'null' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

这里为什么会跨域呢?因为我在我自己域名上去请求其他域名。

一般跨域的解决方案

  • • jsonp(维信机器人接口只支持json)

  • • 后端设置跨域 (改不了微信接口的后台)

  • 那有什么方案呢?

    思路决定出路。

    先明白问题所在,是因为浏览器同源政策导致跨域的问题,那我请求的域名是同源的不就好了吗?

    下面说下具体方法

  • • 使用nginx进行转发

  • 我只需要把ajax请求的url更换成自己的域名,然后使用nginx转发到企业微信接口,就完美绕开了跨域问题

    $.ajax({
      type: 'POST',
      url: 'https://domain/test',
      async: true,
      data: $.toJSON(data),
      contentType:'application/json;charset=utf-8',
      dataType: 'json',
      success: function (data) {
        console.log("data",data)
      },
      error: function (error) {
        console.log("error",error);
      }
    })
  • • nginx配置

  •  location /test/ {
            proxy_pass https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=b38aa4d8-a08e-4a91;
            proxy_method POST;}
  • • 这样就解决了跨域的问题,通过服务器转发来实现

  • nginx转发请求从POST变成GET

    可以看到上面的配置是post请求到nginx,nginx在把请求转发到企业微信接口

    第一次http请求是post,第二次居然自动转换成get。

    原来nginx在配置location的时候,如果多了/,那么会自动变成get

    修改后如下

     location /test {
            proxy_pass https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=b38aa4d8-a08e-4a91;
            proxy_method POST;}

    相关文章

    • 跨域解决方案(史上最易懂)

      跨域总结 1.跨域思路 跨域解决方案一般分为两种:前端解决,后端解决 1.1 前端解决方案 通过前端解决的思想就是...

    • Day 100/100 Vue3.0 & Vue-cli4.5

      写在前端的话 除了后端解决跨域问题前端可以解决吗?答案是可以~~~ (一)问题 遇到了跨域问题,本地的URL是 h...

    • 跨域访问

      参考文献:jsonp解决跨域问题 . cors解决跨域问题 . (java+前端小白)第一次碰到跨域问题,小伙伴们...

    • 前端跨域问题的解决思路

      前言 做了一个简单页面,做了一些数据埋点,想通过企业微信机器人来推送数据,遇到了一些问题,顺便记录下。 跨域问题的...

    • Django 后端解决跨域问题

      前端后端分离的项目,经常会遇到跨域请求的问题。解决跨域问题,有从前端的代理解决的方案,和用后端的解决方案。这里介绍...

    • Ajax跨域问题

      一、跨域问题 二、跨域的定义以及产生原因 三、解决思路 四、JSONP 五、跨域解决的方向 五、浏览器禁止检查

    • koa2解决跨域请求和options请求

      跨域 使用koa-cors解决跨域问题 添加一个中间件 解决options请求 由于做了跨域,所以前端用post请...

    • [mark]九种跨域方式实现原理

      前端如何使用proxyTable和nginx解决跨域问题 前言 前后端数据交互经常会碰到请求跨域,什么是跨域,以及...

    • 新增-后端跨域

      前端程序 后端程序 现在请求无法,到达需要解决跨域问题 每个servlet单独做跨域设置 跨域过滤器

    • 跨域

      博客 说说跨域那些事儿 不要再问我跨域的问题了 前端常见跨域解决方案(全) 同源策略 JSONP(填充式JSON)...

    网友评论

        本文标题:前端跨域问题的解决思路

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