Cordova iOS отправляет запрос HEAD вместо POST - PullRequest
0 голосов
/ 13 сентября 2018

Я запускаю приложение ionic v1 с простым экраном входа в систему, который принимает имя пользователя и пароль и выполняет POST для удаленного API через HTTP. При успешном входе пользователь переходит на домашний экран в приложении.

Когда я развертываю приложение на любом устройстве Android, оно работает просто отлично. Но когда я развертываю одно и то же приложение на любом устройстве ios, нажатие на кнопку входа ничего не дает. Когда я проверяю логи xcode, он показывает

IC TCP Conn Failed [3:0x600000173e00]: 1:60 Err(60)
2018-09-13 02:16:07.004607+0530 MyApp[15053:1613654] Task <5E324292-7D81-481B-B905-2522BC11A23E>.<0> HTTP load failed (error code: -1001 [1:60])
2018-09-13 02:16:07.005251+0530 MyApp [15053:1612177] NSURLConnection finished with error - code -1001

NSLURLC Ошибка соединения 1001 относится к тайм-ауту. Поэтому я проверил журналы веб-сервера, чтобы проверить запросы, когда-либо поступавшие к API. Я вижу, что запросы доходят до сервера. Журналы сервера показывают, что со всех устройств ios запросы на вход в систему генерируют запрос HEAD вместо POST. Это заставляет веб-сервер возвращать HTML-страницу на запрос, который приложение не может обрабатывать дальше, поскольку ожидает ответа JSON.

Веб-сервер регистрирует при входе с любого устройства ios

[root@ip-10-0-0-151 log]# cat production.log 
I, [2018-09-12T20:38:35.976774 #12603]  INFO -- : Started HEAD "/users/sign_in" for 69.162.124.237 at 2018-09-12 20:38:35 +0000
I, [2018-09-12T20:38:35.977758 #12603]  INFO -- : Processing by Devise::SessionsController#new as HTML
I, [2018-09-12T20:38:35.979483 #12603]  INFO -- :   Rendering devise/sessions/new.html.erb within layouts/login
I, [2018-09-12T20:38:35.981128 #12603]  INFO -- :   Rendered devise/shared/_links.html.erb (0.3ms)
I, [2018-09-12T20:38:35.981456 #12603]  INFO -- :   Rendered devise/sessions/new.html.erb within layouts/login (1.9ms)
I, [2018-09-12T20:38:35.981987 #12603]  INFO -- : Completed 200 OK in 4ms (Views: 2.7ms | ActiveRecord: 0.0ms)

Веб-сервер Журналы при входе с любого устройства Android. Это работает и в приложении пользователь попадает на домашний экран. Это показывает, что API работает правильно. Обратите внимание на разницу в первом запросе (HEAD) от устройств ios и (POST) от устройств Android.

[root@ip-10-0-0-151 log]# cat production.log 
I, [2018-09-12T20:39:25.064640 #12603]  INFO -- : Started POST "/api/users/sign_in" for 110.227.177.4 at 2018-09-12 20:39:25 +0000
I, [2018-09-12T20:39:25.065825 #12603]  INFO -- : Processing by Api::SessionsController#create as HTML
I, [2018-09-12T20:39:25.065903 #12603]  INFO -- :   Parameters: {"user"=>{"email"=>"johndoe@gmail.com", "password"=>"[FILTERED]"}, "request_type"=>"json", "session"=>{"user"=>{"email"=>"johndoe@gmail.com", "password"=>"[FILTERED]"}, "request_type"=>"json"}}

Ионный код JS

    $scope.login = function() {
        $http({
            method: 'POST',
            headers: 
             {
                'Content-Type': 'application/json',
             },
            url: config.apiUrl+"users/sign_in",
            data: {user: {email: $scope.data.email, password: $scope.data.password}, request_type: 'json' }

        }).then(function successCallback(response) {
                $state.go('tab.nearby');

}, function(err) {
                alert('code: '    + err.code    + '\n' +
                    'message: ' + err.message + '\n');
                console.log(err);
                $state.go('tab.nearby');
            });


            }, function errorCallback(response) {
                // called asynchronously if an error occurs
                // or server returns response with an error status.

                $ionicPopup.alert({
                    title: 'Problem with authentication',
                    template: '<div style="text-align:center">'+response.data.message+'</div>',

                });
            });

Итак, моя проблема в том, что если код кроссплатформенный и работает правильно для устройств Android, почему ios генерирует другое поведение? Что может быть причиной этого?

...