Файл cookie для извлечения JavaScript не установлен в Chrome и Firefox для iPhone

Я пытаюсь понять это поведение для университетского проекта.

У меня есть реактивное веб-приложение, развернутое в облаке Google, и сервер Go, также развернутый в облаке Google.

Веб-приложение использует API, обслуживаемый моим сервером Go.

Кажется, что приложение работает довольно хорошо с браузерами Хром и Fire Fox в среде рабочего стола и на смартфонах Android, но когда я использую его с теми же браузерами на iOS (iPhone8), API вызывает не содержат cookie, который мне нужен для аутентификации пользователя на моем сервере Go. Safari также работает хорошо, поэтому я наблюдаю такое поведение только с Chrome и Firefox на моем iPhone.

Это заголовки двух вызовов одного и того же API, первый из которых выполнен с помощью Safari, а второй - с помощью Firefox:

Safari (iOS 12.0.1)

GET /example/users HTTP/1.1
Host: api-server.com
Connection: close
Accept-Language: en-gb
Cookie: default=MTU0MDM3MTA0... /*COOKIE IS SET HERE*/
Dnt: 1
Origin: https://example.com
Referer: https://example.com/
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 12_0_1 like Mac OS X) 
            AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 
            Mobile/15E148 Safari/604.1
X-Cloud-Trace-Context: 38640...

Firefox (версия 14.0)

GET /example/users HTTP/1.1
Host: api-server.com
Connection: close
Accept-Language: en-gb
Origin: https://example.com
Referer: https://example.com/
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 12_0_1 like Mac OS X) 
            AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/14.0b12646 
            Mobile/16A404 Safari/605.1.15
X-Cloud-Trace-Context: cb5ff...

Когда я отправляю запрос с помощью fetch, я устанавливаю параметр учетные данные: "включить", но, как вы можете видеть, второй вызов не устанавливает файл cookie, который мне нужен ...

Что мне не хватает?

Спасибо за помощь

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
0
1 116
1

Ответы 1

Думаю, вы могли столкнуться с Эта проблема.

Ключевой вывод:

Safari ships with a conservative cookie policy which limits cookie writes to only the pages chosen ("navigated to") by the user. This default conservative policy may confuse frame based sites that attempt to write cookies and fail.

Слегка запутанный обходной путь заключается в использовании iframe для загрузки страницы, которая устанавливает файлы cookie, вместо того, чтобы делать это с помощью JavaScript. Об этом подробнее здесь.

В зависимости от того, чего вы пытаетесь достичь, возможно, файлы cookie - это не то, что вам нужно в первую очередь. Например, когда я столкнулся с той же проблемой, я в конечном итоге использовал вместо этого Отпечаток пальца, но мне нужны были файлы cookie только для телеметрии; дактилоскопия определенно не подходит для всех случаев использования файлов cookie.

Но Safari работает, он устанавливает cookie. Firefox и Chrome этого не делают!

Ve9 29.10.2018 16:52

Вы должны знать, что сторонние браузеры, написанные для iPhone, по сути, используют «встраиваемую» версию движка рендеринга Safari Mobile - то есть, если вы запустите Chrome / Firefox / Edge на iPhone, они по-прежнему будут Safari Mobile, только с другим пользовательским интерфейсом. и, возможно, более ограниченный доступ к системе, чем сам Safari Mobile (собственное приложение). Поэтому, если у вас возникла проблема только на iPhone (это то, что я понял из вашего исходного вопроса), даже если только в сторонних браузерах, то ссылки, которые я предложил, все же стоит проверить :)

Dániel Kis-Nagy 29.10.2018 18:23

Другие вопросы по теме