← Cloudflare Waiting Room / waiting-room / additional-options
Встраивание в iframe
Из-за того, как зал ожидания отслеживает продвижение посетителей, вам нужно укажите определённые атрибуты cookie чтобы правильно встроить Waiting Room в iframe.
Контекст
SameSite атрибут cookie-файла ↗ определяет, можно ли передавать этот cookie-файл другим доменам, загружаемым на той же странице (рекламные баннеры, iframe). По умолчанию браузеры не отправляют cookie-файлы при межсайтовых подзапросах, чтобы злоумышленники не могли похищать или изменять данные из ваших cookie-файлов.
Однако такое поведение может помешать залу ожидания правильно поставить пользователя в очередь, если этот зал ожидания встроен в iFrame. Зал ожидания зависит от __cfwaitingroom cookie чтобы отслеживать пользователя в очереди. Но поскольку браузер по умолчанию блокирует передачу этого cookie-файла в Waiting Room, активный Waiting Room с очередью не может поставить пользователя в очередь и никогда не пропустит его к приложению.
Доступные варианты
Чтобы настроить, как зал ожидания реагирует на cookie-файлы, добавьте cookie_attributes объект, когда вы создать зал ожидания (доступно только через API).
Доступные варианты:
-
samesite: настраиваетSameSiteатрибут cookie-файла зала ожидания:- auto (по умолчанию): максимально гибкий вариант, использующий по умолчанию lax но становится нет если вы включили Always Use HTTPS.
- lax: cookie-файлы не отправляются при обычных межсайтовых подзапросах (например, при загрузке изображений или фреймов на стороннем сайте), но отправляются, когда пользователь переходит на исходный сайт
- strict: cookie-файлы отправляются только в контексте первой стороны.
- нет: cookie-файлы отправляются всегда.
-
secure: настраиваетSecureатрибут cookie-файла зала ожидания, который требует, чтобы запрос выполнялся поhttps:- auto (по умолчанию): максимально гибкий вариант, использующий по умолчанию никогда но становится всегда если вы включили Always Use HTTPS.
- всегда: cookie-файлы можно отправлять только с помощью
httpsзапросы. - никогда: cookie-файлы можно отправлять с помощью
httpилиhttpsзапросы.
Разрешить передачу cookie-файлов через iFrame
Если вы встраиваете зал ожидания в iFrame, укажите следующие значения в cookie_attributes объект, когда создание зала ожидания (доступно только через API):
samesite:nonesecure: Если у вас есть Always Use HTTPS включено, задайте значениеauto. Если она отключена, установите значениеalways.
Пример
Запрос
Необходимые разрешения API-токена
Хотя бы одно из следующих права доступа токена требуется:Waiting Rooms Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/waiting_rooms" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "shop_waiting_room",
"description": "Waiting room for webshop",
"host": "shop.example.com",
"path": "/shop",
"queue_all": true,
"new_users_per_minute": 200,
"total_active_users": 300,
"session_duration": 1,
"disable_session_renewal": false,
"json_response_enabled": false,
"queueing_method": "FIFO",
"cookie_attributes": {
"samesite": "none",
"secure": "auto"
}
}'Ответ
{
"success": true,
"errors": [],
"messages": [],
"result": [
{
"id": "1111111111111111111111",
"created_on": "2021-01-01T05:20:00.12345Z",
"modified_on": "2021-01-01T05:20:00.12345Z",
"name": "shop_waiting_room",
"description": "Waiting room for webshop",
"host": "shop.example.com",
"path": "/shop",
"queue_all": true,
"new_users_per_minute": 200,
"total_active_users": 300,
"session_duration": 1,
"disable_session_renewal": false,
"json_response_enabled": false,
"queueing_method": "FIFO",
"cookie_attributes": {
"samesite": "none",
"secure": "auto"
}
}
]
}Ограничения
Основные веб-браузеры ввели ограничения на сторонние cookie-файлы, и это тот же тип cookie-файлов, который используют залы ожидания, встроенные в iframe. Waiting Room использует Cookies Having Independent Partitioned State (CHIPS) ↗ чтобы обойти эти ограничения, но у этого есть некоторые недостатки:
- Если пользователь просматривает зал ожидания одновременно внутри iframe и вне его, каждый такой случай учитывается как отдельный пользователь: оба могут выйти из очереди в разное время и отдельно засчитываться в аналитике.
- Чтобы зал ожидания можно было встроить в iframe, доступ и к встраиваемой странице, и к странице, в которую выполняется встраивание, должен осуществляться по HTTPS.
- CHIPS не поддерживается в Safari и браузерах на основе Safari, таких как Orion и большинство браузеров для iOS, если в их настройках не отключена блокировка сторонних cookie. Такие пользователи застревают в конце очереди и не могут продвинуться, пока очередь не опустеет, а также могут учитываться в аналитике несколько раз.
В целом, если возникает проблема с установкой и получением cookie-файла зала ожидания, следует ожидать, что пользователи будут застревать в конце очереди и учитываться в аналитике как несколько разных пользователей.
Эти ограничения могут не применяться, если встроенная страница и страница, в которую она встроена, используют общее доменное имя. Например, страница по адресу example.com встраивания зала ожидания на shop.example.com может считаться браузерами первой стороной и не подпадать под ограничения на cookie третьих сторон.