【问题标题】:https-options request fails (400 bad request) only in Safari 10 Mac and iOS corshttps-options 请求仅在 Safari 10 Mac 和 iOS cors 中失败(400 错误请求)
【发布时间】:2017-05-24 15:56:45
【问题描述】:

options request 总是失败(400 bad request),尤其是在 MAC OSX 和 iOS 10 上的 HTTPS 环境中SAFARI 仅限。 Chrome 和其他浏览器运行良好 (200)。我们尝试了几乎所有我们知道的方法来解决它,但似乎没有任何效果。以下是带有跨域选项标头的 ajax 调用:

$.ajax(
    {
        headers: {
            Accept : "application/json",
            'Content-Type': "application/json"
        },
        type : "POST",
        url : userDataSource,
        contentType: "application/json",
        data : JSON.stringify(formData),
        dataType : 'json', 
        xhrFields :{
            withCredentials: true
        },
        crossDomain : true,
        success : function(data){........}}).....

我们尝试对 javascript 进行以下修改:

  • 修改预检标头(Accept 和 content-type)
  • 删除标题。
  • 将标题更改为小写,反之亦然。
  • 根据响应标头添加一些标头。

我们也在服务器端进行了类似的更改,并进行了一些代理级别的更改,但没有任何帮助。它不是一个公共网络应用程序,而是它的内部组织网络。

解决它对我们来说非常重要,因为它阻碍了交付。

请帮忙。

【问题讨论】:

  • 这个有一个喊标题来求答案。

标签: javascript ios macos safari cors


【解决方案1】:

这看起来像是一个服务器问题,当没有关于所用服务器平台的信息时很难弄清楚。 您是否尝试过调试抛出 400 Bad Request 的代码?日志文件中可能还有更多信息。 当您说这只是 Safari 和 iOS 中的问题时,可能是由请求中不同的 User-Agent 引起的(只是猜测)。

您是否检查过与工作请求相比,请求中是否有任何其他 HTTP 标头不同(确保比较 OPTIONS 请求,而不是 POST)。您可以尝试使用 Fiddler 或 Postman 对请求进行一些变体,以将问题缩小到特定原因。

很抱歉没有明确的答案,也许您可​​以提供有关服务器的更多信息。

【讨论】:

  • 很抱歉听到这个消息:/。如果您在 Fiddler/Postman 中创建与 Safari 请求具有相同内容(包括标头)的 OPTIONS 请求,它也会失败吗?
  • 我们尝试了您提到的几乎所有方法,但不幸的是似乎没有任何效果。服务器是 Apache,如屏幕截图所示。 Fiddler 在 MAC OSX 上不能很好地工作,并且尝试过 Postman 并没有太大帮助。我们甚至尝试模仿 CHROME 中的请求和响应标头,因为 chrome 返回 200,但这也无济于事。尝试在 safari 中更改 chrome 中的用户代理。 OPTIONS 在 SAFARI(iOS 和 OSX)中失败 - 400。谢谢
猜你喜欢
  • 2014-02-14
  • 1970-01-01
  • 2023-01-25
  • 2019-10-03
  • 2018-07-08
  • 2015-04-10
  • 1970-01-01
  • 2022-10-02
  • 1970-01-01
相关资源
最近更新 更多