Я создал мобильное приложение, используя React Native. Это приложение соединяется с API-интерфейсом REST, который я создал с использованием инфраструктуры Laravel. Этот API размещен на VPS и обслуживается по HTTPS.
Мобильное приложение работает так, как я и ожидаю, за исключением следующего варианта использования:
У пользователя iPhone 8+. Оператор этого пользователя - AT & T. 5Ge, чтобы быть точным. Этот пользователь может загрузить приложение и установить его без проблем. Когда они открывают приложение, оно подключается к API и получает данные для отображения на главном экране. Пользователь может войти в систему, используя свои учетные данные, которые отправляются в API, и API возвращает маркер доступа при действительном входе в систему.
Каждый последующий запрос отправляется с заголовком авторизации: Bearer [токен] Эти запросы, в частности, никогда не достигают сервера. Все аутентифицированные маршруты для API недоступны для этого пользователя.
У пользователей других сетей, таких как Verizon и TMobile, такой проблемы нет.
Мобильное приложение использует библиотеку Axios для отправки HTTP-запросов. Таймаут 25000 (максимум, что может быть отправлено на iOS?) Передается в качестве опции для аутентифицированного действия. Действие не выполнено для этого пользователя.
Ошибка перехватывается, а затем отправляется в открытый маршрут по API без заголовка авторизации в запросе. Этот запрос достигает сервера и добавляет сообщение об ошибке из запроса от мобильного приложения в журнал ошибок на моем сервере.
Когда я проверяю ошибку, возникшую из-за сбоя аутентифицированного действия, он читает «Сетевая ошибка» с кодом 0.
Если тайм-аут установлен на 15000, ошибкаВ результате сбоя аутентифицированного действия произошла ошибка тайм-аута, превысившая 15000.
Я связался с AT & T сегодня, и они сказали, что мы должны связаться с Apple.
После того, как они подключили нас к Apple, Apple сказала, что проблема звучит так, как будто это проблема сотовой связи, и предложила запустить диагностику на телефоне.
Мой вопрос таков: почему запросы, содержащие маркер носителя заголовка авторизации, не могут достичь моего сервера, когда пользователь находится в сети AT & T. Токен-носитель делает запрос громоздким и замедляет запрос туда, куда наши башни не могут его отправить? Или у AT & T есть какое-то промежуточное программное обеспечение, которое по какой-то причине могло бы уничтожить запрос? Может ли заголовок авторизации заставить AT & T обрабатывать запрос по-другому и отправлять его другим способом, и таким образом ошибки DNS могут привести к сбою запроса таким способом.
Пожалуйста, помогите, надеюсь, я объяснил это достаточно хорошо.
Редактировать: Laravel Passport генерирует access_token для аутентифицированного API длиной более 1000 символов. Похоже, я могу уменьшить это примерно вдвое. Я собираюсь попробовать это дальше.