HTTP-вызов с использованием УДАЛЕНИЯ завершается неудачно на iOS, успешно выполняется на Android

#ios #cordova #vue-resource

Вопрос:

Я вызываю API из приложения Cordova (Monaca), используя Vue.js. Код не зависит от платформы и хорошо работает с Android и предварительным просмотром браузера. Соответствующая часть просто вызывает this.$http.delete(url, config) и регистрирует ответ. this.$http происходит от https://github.com/pagekit/vue-resource.

На iOS я получаю это, когда регистрирую ответ:

 {
  "url": "https://domain.whatever?KEY=12345amp;receipt_id=12345",
  "ok": false,
  "status": 0,
  "statusText": "",
  "headers": {
    "map": {
      "": [
        ""
      ]
    }
  },
  "body": "",
  "bodyText": ""
}
 

Тот же вызов на Android дает такой результат:

 {
  "url": "https://domain.whatever?KEY=12345amp;receipt_id=12345",
  "ok": true,
  "status": 200,
  "statusText": "OK",
  "headers": {
    "map": {
      "connection": [
        "Keep-Alive"
      ],
      "content-encoding": [
        "gzip"
      ],
      "content-length": [
        "17"
      ],
      "content-type": [
        "application/json"
      ],
      "date": [
        "Mon, 12 Apr 2021 12:51:56 GMT"
      ],
      "keep-alive": [
        "timeout=5, max=100"
      ],
      "server": [
        "Apache"
      ],
      "vary": [
        "Accept-Encoding"
      ]
    }
  },
  "body": {
    "status": "OK"
  },
  "bodyText": "{"status": "OK"}"
}
 

(Журналы слегка редактируются, чтобы удалить личные данные, и имеют отступы для удобства чтения.)

Чем можно объяснить сбой с iOS? Существует ли какой-то фильтр по умолчанию, применяемый iOS для блокировки HTTP-запросов на УДАЛЕНИЕ? Запросы на отправку и ПОЛУЧЕНИЕ, похоже, ведут себя согласованно на всех мобильных платформах.

Комментарии:

1. это только УДАЛЕНИЕ, которое не удается ? Занимаетесь почтовой работой ?

2. Да @Эрик. Только УДАЛИТЬ.

Ответ №1:

По умолчанию iOS блокирует небезопасные HTTP — запросы:

https://developer.apple.com/documentation/security/preventing_insecure_network_connections

Проверьте раздел Настройка исключений Только при необходимости; Предпочитайте Исправления сервера, чтобы узнать, как вы добавляете переопределение этого поведения.

Комментарии:

1. Спасибо, это проницательно! Все соединения являются HTTPS, хотя есть ли какая-либо причина, по которой запрос на удаление может быть заблокирован, а запрос на ПОЛУЧЕНИЕ будет регулярно проходить?

2. извините, я пропустил, что ваши запросы являются HTTPS. Не уверен, что это ваш случай, но была ошибка, влияющая на WKWebView в iOS: developer.apple.com/forums/thread/653662 Недостаточно установить значение ‘Access-Control-Allow-Origin’ в’*’, вы должны установить его в то же значение, что и заголовок запроса «Origin».

3. Это может быть! Все еще нелегко выяснить, является ли это виновником, потому что я погребен под огромным количеством фреймворков, библиотек и т. Д., И нелегко выяснить, какая фактическая конфигурация применяется.