现象:
今天用苹果手机测试ajax请求一个nginx服务器上的一个json文件,发现返回的错误状态值是0,PC端和安卓端都可以正常访问,而且把json放到别的tomcat中
开始查找原因:
1.先测试PC和安卓端,发现正常,初步判断是苹果手机的问题
2.把json文件放到别的tomcat当中,发现苹果、安卓、PC都正常,这时候开始怀疑是nginx配置问题,但是第一步的测试的结果PC和安卓都没问题,说明nginx配置应该也没问题,那问题出在哪里呢?
3.查了一些资料,也没查到有用的信息,最后误打误撞给nginx配置了一下跨域,竟然发现OK了,好吧,具体为啥,也不清楚,以后待查,先记录一下
下面看html代码,很简单,就一个ajax请求
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
<script>
$(function () {
$.get("http://51baxue.com/config/hcanvas-config.json", function (data, status) {
console.log("状态: " + status);
console.log(data);
});
})
</script>
</head>
<body>
</body>
</html>
再看一下具体的nginx的配置
location / {
# 解决跨越问题,苹果手机里面用ajax访问nginx静态资源要加上这段代码,不然会返回状态0
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if ($request_method = 'OPTIONS') {
return 204;
}
}