关于跨域踩的坑,浏览器 status code为200,但其实是跨域了

背景

后端使用Nginx并更改本地host文件,起本地服务。将aaa.bbbb.com代理至本地IP地址(10.26.36.156)。
使用$.ajax调用后端restful接口,要求content-type为application/json格式,并要求在request headers里加一些内容。前端

前端代码:

$.ajax({
        headers : {
          'Accept': 'application/json',
          'Content-Type': 'application/json',
          'user-id':'123',
          'ghf-id': '456'
        },
        url: 'https://10.26.36.156/aaa/vds/dsg',
        type: 'PATCH',
        data: JSON.stringify(data),
        dataType: 'json',
        success: function (response) {
           
        },
        error: function (msg) {
          
        }
  })

现象

后端使用postman 能够访问成功
浏览器network抓请求,结果以下,可是代码并无触发后端的代码断点....
这是为何呢?node

clipboard.png

缘由

由于host文件的配置,骗过了浏览器,进行了一次options请求,可是对于js引擎来讲,这里的ip地址与浏览器的域名不一样,因此出现了跨域,所以设置到了Access-Control-Request-Headers里面。git

解决方案

方案一:
不走IP(不写绝对路径),而是相对路径
方案二:
将IP地址加入白名单(node js里面是如此,其余语音应该也有相应的)。
借用凝雨关于跨域踩坑经验总结github

相关文章
相关标签/搜索