INTEGRITY Документация

Вывод заголовков в консоль

Если вы хотите быстро начать, нажмите на кнопку ниже.

Deploy to Cloudflare

Это создаёт репозиторий в вашем аккаунте GitHub и разворачивает приложение в Cloudflare Workers.

export default {
	async fetch(request) {
		console.log(new Map(request.headers));
		return new Response("Hello world");
	},
};
export default {
	async fetch(request): Promise<Response> {
		console.log(new Map(request.headers));
		return new Response("Hello world");
	},
} satisfies ExportedHandler;
from workers import WorkerEntrypoint, Response

class Default(WorkerEntrypoint):
    async def fetch(self, request):
        print(dict(request.headers))
        return Response('Hello world')
use worker::*;

#[event(fetch)]
async fn fetch(req: HttpRequest, _env: Env, _ctx: Context) -> Result<Response> {
    console_log!("{:?}", req.headers());
    Response::ok("hello world")
}
import { Hono } from 'hono';

const app = new Hono();

app.get('*', (c) => {
  // Different ways to log headers in Hono:

  // 1. Using Map to display headers in console
  console.log('Headers as Map:', new Map(c.req.raw.headers));

  // 2. Using spread operator to log headers
  console.log('Headers spread:', [...c.req.raw.headers]);

  // 3. Using Object.fromEntries to convert to an object
  console.log('Headers as Object:', Object.fromEntries(c.req.raw.headers));

  // 4. Hono's built-in header accessor (for individual headers)
  console.log('User-Agent:', c.req.header('User-Agent'));

  // 5. Using c.req.headers to get all headers
  console.log('All headers from Hono context:', c.req.header());

  return c.text('Hello world');
});

export default app;

Вывод заголовков в консоль

Используйте Map если вам нужно залогировать Headers объект в консоль:

console.log(new Map(request.headers));

Используйте spread оператор, если вам нужно быстро преобразовать в строку Headers объект:

let requestHeaders = JSON.stringify([...request.headers]);

Используйте Object.fromEntries чтобы преобразовать заголовки в объект:

let requestHeaders = Object.fromEntries(request.headers);

Проблема

При отладке Workers проверяйте заголовки запроса или ответа. Распространенная ошибка: попытка вывести заголовки в консоль разработчика с помощью такого кода:

console.log(request.headers);

Или вот так:

console.log(`Request headers: ${JSON.stringify(request.headers)}`);

Оба варианта на первый взгляд дают пустой объект: строку "{}" : даже несмотря на то, что вызов request.headers.has("Your-Header-Name") может вернуть true. Это то же поведение, что реализовано в браузерах.

Это происходит потому, что Headers объекты не хранят заголовки в перечисляемых свойствах JavaScript, поэтому консоль разработчика и сериализатор JSON не могут прочитать имена и значения заголовков. На самом деле это не пустой объект, а непрозрачный (opaque) объект.

Headers объекты являются итерируемыми, что можно использовать для написания нескольких коротких однострочников для отладочного вывода заголовков.

Передайте заголовки через Map

Первый распространённый приём для того, чтобы сделать Headers console.log()-дружественный способ: создать Map объект из Headers объект и выводит в лог Map объект.

console.log(new Map(request.headers));

Это работает по следующей причине:

Разверните заголовки в массив

Map подход работает для вызовов console.log(). Если нужно преобразовать заголовки в строку, вы обнаружите, что преобразование Map даёт не более чем [object Map].

Несмотря на то что Map хранит свои данные в перечисляемых свойствах, эти свойства Символ-ключами. Из-за этого JSON.stringify() будет игнорировать свойства с ключами Symbol и вы получите пустой {}.

Вместо этого можно воспользоваться возможностью перебора Headers объект по-новому, применяя spread-оператор (...) к нему.

let requestHeaders = JSON.stringify([...request.headers], null, 2);
console.log(`Request headers: ${requestHeaders}`);

Преобразование заголовков в объект с помощью Object.fromEntries (ES2019)

ES2019 предоставляет Object.fromEntries это вызов, который преобразует заголовки в объект:

let headersObject = Object.fromEntries(request.headers);
let requestHeaders = JSON.stringify(headersObject, null, 2);
console.log(`Request headers: ${requestHeaders}`);

В результате получится примерно следующее:

Request headers: {
  "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
  "accept-encoding": "gzip",
  "accept-language": "en-US,en;q=0.9",
  "cf-ipcountry": "US",
  // ...
}"