gpt4 book ai didi

javascript - Axios POST 在 iOS 上失败

转载 作者:行者123 更新时间:2023-11-29 13:54:55 25 4
gpt4 key购买 nike

我正在尝试使用 Axios 从 domain1 到 domain2 进行简单的 ajax POST。这是一个跨域的简单 POST,因此没有 PREFLIGHT (OPTIONS) 调用。来自应用程序的响应是一个简单的 JSON 字符串。

在 Chrome、Android、Windows 和 iOS(不包括 iPhone)上,这工作正常。但是在 Safari 和 Chrome 上的 iPhone 6、7、8+ 上,我在控制台中收到来自 axios 响应的错误。我可以看到 POST 请求到达 domain2 上的应用程序并发送了一个 json 响应。但这是当我在 axios.catch 中控制台记录响应时显示的内容。没有其他详细信息。

Error: Network Error

我的 POST 是一个包含以下请求 header 的多部分/表单数据帖子:

Accept: application/json, text/plain, */*
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary81kouhSK7WgyVQZ3
Origin: https://domain1
Referer: https://domain1/test
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1

表单数据只是4个文本字段

------WebKitFormBoundary81kouhSK7WgyVQZ3
Content-Disposition: form-data; name="a"
12345
------WebKitFormBoundary81kouhSK7WgyVQZ3
Content-Disposition: form-data; name="b"
asdfasf
------WebKitFormBoundary81kouhSK7WgyVQZ3
Content-Disposition: form-data; name="c"
asdfadsf
------WebKitFormBoundary81kouhSK7WgyVQZ3
Content-Disposition: form-data; name="d"
adfasdfa
------WebKitFormBoundary81kouhSK7WgyVQZ3--

当从 Windows 和 Mac 上的 Chrome(或 IE 和 Firefox)发送 POST 时,我得到以下响应 header 和 HTTP 200:

access-control-allow-headers: Accept,Content-Type,Origin,Referer,User-Agent
access-control-allow-methods: GET, POST, PUT, DELETE, OPTIONS
access-control-allow-origin: *
cache-control: no-cache, private
content-type: application/json, text/plain, */*; charset=UTF-8
x-content-type-options: nosniff
x-ratelimit-limit: 60
x-ratelimit-remaining: 59
x-xss-protection: 1

我已经在 domain2 的应用程序上明确设置(Laravel 5.8 应用程序 - 中间件中设置的 CORS header )。

但是在 iPhone 上,Safari 和 Chrome(以及 Mac 上的 Safari 浏览器 - Chrome 在 Mac 上工作)我没有看到任何响应 - conole.log(error) 显示(见下面的 axios 代码)

Error: Network Error

在查看请求/响应的网络选项卡中,没有返回响应 header ,也没有 HTTP 状态代码。仅显示请求 header 。

我的 axios 代码如下:

axios.post('https://domain2/test', formData)           
.then(function (response) {

console.log("POST function of axios 1");
console.log(response);
console.log("POST function of axios 2");
})
.catch(function (error) {
console.log("Error in catch of axios post");
console.log(error);
console.log("End error");
});

使用 formData.append('a',12345) 等创建 formData...

我可以从 https://domain1 成功 POST 到测试上传至 https://domain1使用相同的 axios 代码,所以我相信来自 domain2 的响应 header 存在一些问题,iOS 不喜欢这些问题并终止了响应。

我已经尝试设置/更改所有响应 header ,在 Axios POST 上设置 header ,尝试使用简单的 xhr 而不是 Axios 等但无济于事......同样的错误。

有人指点吗?我已经用谷歌搜索等等...但没有找到任何有帮助的东西。甚至我如何从 iPhone 上的错误响应中获取更多信息?我正在 Mac 上调试 iPhone,因此可以看到 console.log 等...

非常感谢

最佳答案

原来这个错误是由于在响应中设置了升级 header apache。一旦我在 apache 配置中取消设置该 header ,问题就在 iOS 上得到解决。我在域的 apache 虚拟主机中的目录部分中设置了以下内容

Header unset Upgrade

关于javascript - Axios POST 在 iOS 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57163186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com