收藏
回答

ios10系统微信浏览器打开H5,调用接口status = 0失败的问题?

具体问题如下:ios10系统的微信打开公众号H5页面,一开始用ajax请求调用接口能成功,后来为了数据安全,对数据进行加密,并且在头部添加了auth,具体header设置为{auth:一个token,Content-Type:"application/x-www-form-urlencoded;charset=UTF-8"},之后不管用ajax请求还是原生js的XMLHttpRequest 请求,都会访问不了接口,具体报错为{ReadyStatus:4,status:0}。

具体ajax代码如下:

 $.ajax({
              type: "post",
              url: "http://xxx.xx.xx/接口名",
              headers:{
                 "auth":"57B9D91164800C8925,getToken",//头部的token
                 "Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"
              },
              data: "JNutxR%2BRtGsHKrNEPXBEQwzhJ6NzahvBx6Cn%2B4V4%2Bd",//这是一串加密的入参
              dataType: "text",
              async: false,
          success:function(res){console.log(res},
          error:function(error){}
})


求各位大神解答解答,谢谢了

````````````````````````````````````````````````````````````````````````````````````````````````

找到解决办法了:

后面我找到了一篇文章,提供给后端同事,他改了下header跨域请求,将原本

Access-Control-Allow-Header:* 改成了具体内容:Access-Control-Allow-Header:content-type,auth(就是自定义头部的具体内容)

ios低版本浏览器就能正常访问,后面讨论了下,总结原理应该是这样:

在设置了自定义header后,浏览器到后端请求将分为两步进行。

1.发送option预请求

浏览器将先发送一个预请求OPTIONS到后端,这里后端需要对OPTIONS请求做出正确响应然后才会执行下一步。

2.发送真正的数据请求

浏览器接收到OPTIONS正确响应后会自动执行发送get或post请求。

但是呢,ios低版本(大概10以下)的浏览器内核,会不识别来自后端响应的 * 符号,所以就不会执行第2次的数据请求。

难怪客户戏称ios浏览器是移动端的IE版本。。。

参考资料:

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/OPTIONS

https://www.jianshu.com/p/e4d0e573c95c

最后一次编辑于  2023-06-14
回答关注问题邀请回答
收藏
登录 后发表内容