> ## Documentation Index
> Fetch the complete documentation index at: https://docs.1unic.com/odatav4/llms.txt
> Use this file to discover all available pages before exploring further.

# CORS

> Доступ из браузера: список источников и заголовки

Браузерное приложение на другом домене может обращаться к сервису, если его источник есть в списке CORS.

## Список источников

На вкладке «Адреса» формы настроек заполните список «Источники CORS», по одному значению в строке:

```
https://app.example.com
http://localhost:5173
```

Формат — `scheme://host[:port]`. Значения `*` и `null` не принимаются, список проверяется при записи.

<Frame caption="Вкладка «Адреса»: список «Источники CORS»">
  <img src="https://mintcdn.com/o-data-v4/8iesiGXq06VGcZxz/images/admin/settings-addresses.png?fit=max&auto=format&n=8iesiGXq06VGcZxz&q=85&s=99bfcd5355b04c3c8ff74f2087380c27" alt="Вкладка «Адреса»: список «Источники CORS»" width="1094" height="680" data-path="images/admin/settings-addresses.png" />
</Frame>

## Заголовки ответа

Ответ на запрос с источником из списка содержит:

* `Access-Control-Allow-Origin` — этот источник;
* `Vary: Origin`;
* `Access-Control-Expose-Headers` — `Location`, `ETag`, `OData-EntityId`, `Preference-Applied`, `OData-Version`, `Retry-After`.

Ответ на предварительный запрос `OPTIONS` дополнительно содержит:

* `Access-Control-Allow-Methods` — `GET, POST, PUT, PATCH, MERGE, DELETE, OPTIONS`;
* `Access-Control-Allow-Headers` — в том числе `X-OData4-Token`, `Content-Type`, `If-Match`, `If-None-Match`, `Prefer`;
* `Access-Control-Max-Age`.

`Access-Control-Allow-Credentials` не выдаётся: токен в заголовке не требует учётных данных браузера.

## Почему браузеру нужны токены

Предварительный запрос браузера к публикации с Basic-аутентификацией не доходит до сервиса: веб-модуль 1С сам отвечает `401` на `OPTIONS` без учётных данных. Поэтому браузерные клиенты работают с публикацией токенов `odatat`, где `OPTIONS` доходит до расширения, и передают токен в заголовке `X-OData4-Token`.

```js theme={null}
const res = await fetch("https://server/base-svc/hs/odatat/v4/Catalog_Контрагенты?$top=10", {
  headers: { "X-OData4-Token": token, "Accept": "application/json" }
});
const { value } = await res.json();
```

<Warning>
  Токен, встроенный в код браузерного приложения, виден любому пользователю этого приложения. Выдавайте такому токену профиль с минимальными правами, ограничением по IP и правилами частоты. Подробнее — на странице [Токены](/odatav4/security/tokens).
</Warning>

Публикация токенов настраивается по странице [Публикация для токенов](/odatav4/install/token-publication).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.