作者:c23235857 | 来源:互联网 | 2023-10-13 13:30
背景后端使用Nginx并更改本地host文件,起本地服务。将aaa.bbbb.com代理至本地IP地址(10.26.36.156)。使用$.ajax调用后端restful接口,要求
背景
后端使用Nginx并更改本地host文件,起本地服务。将#.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/#/vds/dsg',
type: 'PATCH',
data: JSON.stringify(data),
dataType: 'json',
success: function (response) {
},
error: function (msg) {
}
})
现象
后端使用postman 可以访问成功
浏览器network抓请求,结果如下,但是代码并没有触发后端的代码断点….
这是为什么呢?
原因
因为host文件的配置,骗过了浏览器,进行了一次options请求,但是对于js引擎来说,这里的ip地址与浏览器的域名不同,所以出现了跨域,因此设置到了Access-Control-Request-Headers里面。
解决方案
方案一:
不走IP(不写绝对路径),而是相对路径
方案二:
将IP地址加入白名单(node js里面是如此,其他语音应该也有相应的)。
借用凝雨关于跨域踩坑经验总结