← Cloudflare Waiting Room / waiting-room / how-to
Получение JSON Response для мобильного и другого небраузерного трафика
Если нужно управлять трафиком в среде без браузера, например в мобильном или веб-приложении, Cloudflare предоставляет JSON-совместимый зал ожидания, доступ к которому можно получить через ваши конечные точки API:
- Когда пользователь поставлен в очередь, мы возвращаем собственный JSON-ответ.
- Когда пользователь покидает зал ожидания, мы передаём запрос исходному серверу и возвращаем его ответ, будь то JSON, XML, HTML-страница и так далее.
Чтобы получать ответ зала ожидания в формате JSON, выполните следующие действия:
Шаг 1: включение JSON Response
Чтобы получать ответ в формате JSON, сначала включите переключатель JSON Response в зале ожидания.
- Через панель управления: Когда настройка зала ожидания, включите JSON Response.
- Через API: Когда создание зала ожидания, задайте
json_response_enabledв true.
Шаг 2: получение данных JSON
Отправьте запрос к конечной точке своего зала ожидания с заголовком Accept: application/json. Обратите внимание, что заголовок должен точно соответствовать Accept: application/json. Если это что-то иное или содержит дополнительный контент, например Accept: application/json, text/html ответ не будет возвращён в формате JSON. Повторяйте запрос каждые refreshIntervalSeconds чтобы пользователи продвигались в очереди.
curl "https://example.com/waitingroom" \
--header "Accept: application/json"{
"cfWaitingRoom": {
"inWaitingRoom": true,
"waitTime": 5,
"waitTimeKnown": true,
"waitTimeFormatted": "5 minutes",
"queueIsFull": false,
"queueAll": false,
"lastUpdated": "2021-08-03T23:46:00.000Z",
"refreshIntervalSeconds": 20
}
}Cookie-файлы в заголовке запроса
Работа Waiting Room строится на cookie-файле зала ожидания, который определяет позицию пользователя в очереди. Поэтому этот cookie-файл обновляется в заголовках ответа при каждом запросе. Для каждого запроса к конечной точке, защищённой Waiting Room, приложение должно передавать актуальный cookie-файл, полученный при предыдущем запросе. Это обязательно независимо от того, находился пользователь в очереди или нет. Если запрос не содержит cookie-файла, зал ожидания сочтёт пользователя новым и вернёт новый cookie-файл в заголовке ответа, из-за чего пользователь окажется в конце очереди. Поэтому при использовании зала ожидания вне браузера важно передавать cookie-файл зала ожидания в заголовке запроса и обновлять его после каждого запроса.
См. Файлы cookie Waiting Room, где приведены дополнительные сведения.
Продвижение по очереди
В среде браузера страница автоматически обновляется каждые refreshIntervalSeconds чтобы пользователь продвигался в очереди. В среде без браузера, где используется JSON-совместимый API Waiting Room, ожидается, что ваша серверная служба (или API) также обновляет запрос к настроенной конечной точке Waiting Room каждые refreshIntervalSeconds чтобы обеспечить продвижение пользователя в очереди.
Ниже перечислены некоторые места, где можно использовать ответ в формате, удобном для JSON (список не является исчерпывающим):
-
Для трафика мобильных приложений
- Интеграция переменных Waiting Room: создайте новый шаблон в мобильном приложении для получения ответа в формате JSON. Полный список этих переменных приведён в разделе
json_response_enabledпараметр в Документация Cloudflare API. - Разрешить cookie-файлы: как уже упоминалось, зал ожидания требует cookie-файлов, и вашему мобильному приложению потребуется поддержка cookie-файлов. Для удобства рассмотрите использование менеджера cookie-файлов, например CookieJar ↗.
- Обработка данных JSON : отправьте запрос к конечной точке Waiting Room с
Accept: application/jsonзаголовок.
- Интеграция переменных Waiting Room: создайте новый шаблон в мобильном приложении для получения ответа в формате JSON. Полный список этих переменных приведён в разделе
-
Внутри Cloudflare Workers (или в собственном серверном сервисе)
-
Интеграция переменных Waiting Room: ожидайте ответ в формате JSON в серверном API. Полный список этих переменных приведён в разделе
json_response_enabledпараметр в Документация Cloudflare API. -
Включение cookie-файлов в заголовок запроса: как уже упоминалось, зал ожидания требует cookie-файлов, и вашему серверному API потребуется поддержка cookie-файлов. Для удобства рассмотрите использование менеджера cookie-файлов, например CookieJar ↗.
-
Включение JSON Response : через панель управления или через API.
-
Обработка данных JSON : отправьте запрос к конечной точке Waiting Room с
Accept: application/jsonзаголовок.Ниже приведён пример использования конечной точки зала ожидания внутри Worker. Заголовки запроса включают необходимый
acceptиcookieзначения заголовков, которые требуются для Waiting Room API. Заголовок accept обеспечивает возврат ответа в формате JSON, если пользователь находится в очереди. В противном случае, если запрос отправляется источнику, пользователю возвращается тот ответ, который вернул источник. В этом примере жёстко заданный__cfwaitingroomзначение встроено в поле cookie. Однако в реальном приложении мы ожидаем, что cookie-файл, возвращённый API Waiting Room, будет использоваться во всех последующих запросах, чтобы пользователь корректно занимал место в очереди и был пропущен к источнику, когда наступит его очередь.
-
const waitingroomSite = "https://examples.cloudflareworkers.com/waiting-room";
export default {
async fetch(request, env, ctx) {
const init = {
headers: {
accept: "application/json",
cookie: "__cfwaitingroom=F)J@NcRfUjXnZr4u7x!A%D*G-KaPdSgV",
},
};
return fetch(waitingroomSite, init)
.then((response) => response.json())
.then((response) => {
if (response.cfWaitingRoom.inWaitingRoom) {
return Response("in waiting room", { "content-type": "text/html" });
}
return new Response(response);
});
},
};