Странное время ожидания после запроса на удаление в приложении iOS

#ios #ruby-on-rails #ruby-on-rails-5

#iOS #ruby-on-rails #ruby-on-rails-5

Вопрос:

У меня есть приложение для iOS с серверной частью rails 5.2. В приложении пользователи могут добавлять лайки к публикациям и удалять их. Когда пользователь удаляет лайк из приложения, запрос завершается, однако все последующие запросы заканчиваются тайм-аутом. Через несколько минут все возвращается в нормальное состояние, и приложение может взаимодействовать с сервером.

Пока приложение выдает тайм-ауты, сервер работает нормально, в журналах нет ничего особенного, поэтому похоже, что проблема в приложении. Как ни странно, если я пытаюсь связаться с веб-сервером (в то время как приложение возвращает тайм-ауты) в той же сети, этот запрос также выдает тайм-аут (но к нему можно получить доступ из другой сети без проблем). Локально, даже в рабочем режиме rails и при очень быстром интернет-соединении проблема не возникает (оптоволокно).

Также, когда приложение выбрасывает тайм-ауты, отладчик Xcode показывает, что используется 0% процессора, и приложение не отправляет / получает никаких запросов.

Сервер Rails возвращается после действия удаления:

 2019-03-08T13:40:08.849867461Z app[web.1]: [4002a8f5-d322-41b7-8e00-ac2fed71296e] Started DELETE "/api/v3/likes/remove.json?likeable_id=492amp;likeable_type=Post" for 37.47.129.26 at 2019-03-08 13:40:08  0000
2019-03-08T13:40:08.861245329Z app[web.1]: I, [2019-03-08T13:40:08.861060 #296]  INFO -- :
2019-03-08T13:40:08.861279390Z app[web.1]: I, [2019-03-08T13:40:08.861184 #296]  INFO -- : Started DELETE "/api/v3/likes/remove.json" at 2019-03-08 13:40:08  0000
2019-03-08T13:40:08.861289850Z app[web.1]: I, [2019-03-08T13:40:08.861221 #296]  INFO -- : Processing by Api::V3::Likes/likes/remove
2019-03-08T13:40:08.861336511Z app[web.1]: I, [2019-03-08T13:40:08.861278 #296]  INFO -- :   Parameters: {"likeable_id"=>"492", "likeable_type"=>"Post", "format"=>"json"}
2019-03-08T13:40:08.922335770Z app[web.1]: [4002a8f5-d322-41b7-8e00-ac2fed71296e] HEADERS: {"Version"=>"HTTP/1.1", "Connection"=>"upgrade", "Host"=>"host.net", "X-Forwarded-Proto"=>"http", "X-Forwarded-For"=>"37.47.129.26, 192.168.2.57", "X-Forwarded-Port"=>"80", "X-Request-Start"=>"1552052408.848", "X-Client-Ip"=>"37.47.129.26", "X-Real-Ip"=>"37.47.129.26", "Accept"=>"*/*", "User-Agent"=>"AppName/3.8.3 (iPhone; iOS 12.2; Scale/2.00)", "Accept-Language"=>"en", "Authorization"=>"Bearer access_token", "Accept-Encoding"=>"gzip, deflate"}
2019-03-08T13:40:08.922492953Z app[web.1]: I, [2019-03-08T13:40:08.922411 #296]  INFO -- : Completed 200 in 61.53ms
2019-03-08T13:40:08.922522623Z app[web.1]: I, [2019-03-08T13:40:08.922465 #296]  INFO -- :
  

форма журнала Xcode во время ожидания выглядит следующим образом:

 2019-03-08 14:41:39.712252 0100 AppName[19582:365699] Task <FA2C12EF-434F-4BF4-AC74-F779C1A86D36>.<1> finished with error - code: -1001
2019-03-08 14:41:39.712490 0100 AppName[19582:365702] Task <FA2C12EF-434F-4BF4-AC74-F779C1A86D36>.<1> load failed with error Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={_kCFStreamErrorCodeKey=-2102, NSUnderlyingError=0x600003ffe3d0 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <FA2C12EF-434F-4BF4-AC74-F779C1A86D36>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalDataTask <FA2C12EF-434F-4BF4-AC74-F779C1A86D36>.<1>"
), NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=http://host.net/api/v3/users_registrations.json, NSErrorFailingURLKey=http://host.net/api/v3/users_registrations.json, _kCFStreamErrorDomainKey=4} [-1001]
  

Ответ №1:

Оказалось, что маршрутизатор блокировал все действия по удалению без использования https.