Request
=======

`Интерфейс Request` из Fetch API является запросом ресурсов или данных.

Создать новый объект `Request` можно, используя конструктор `Request()` (en-US), однако чаще всего встречается способ возврата объекта `Request` , как результат операции API. Например такой как service worker `FetchEvent.request` (en-US).

Конструктор
-----------

`Request()` (en-US)

Создаёт новый `Request` объект.

Параметры
---------

`Request.cache` (en-US) Только для чтения 

Содержит кешированное состояние запроса (напр., `default`, `reload`, `no-cache`).

`Request.context` (en-US) Только для чтения  
Устарело

Содержит контекст запроса (напр., `audio`, `image`, `iframe`, и т.д..)

`Request.credentials` (en-US) Только для чтения 

Содержит данные идентификации запроса (напр., `"omit"`, `"same-origin"`, `"include"`). Значение по умолчанию: `"same-origin"`.

`Request.destination` (en-US) Только для чтения 

Возвращает строку из `RequestDestination` (en-US) enum, описывая назначение запроса. Это строка, указывающая тип запрошенных данных.

`Request.headers` (en-US) Только для чтения 

Содержит назначенный `Headers` (en-US) объект запроса (заголовки).

`Request.integrity` (en-US) Только для чтения 

Содержит "subresource integrity (en-US)" значение запроса (напр., `sha256-BpfBw7ivV8q2jLiT13fxDYAe2tJllusRSZ273h2nFSE=`).

`Request.method` (en-US) Только для чтения 

Содержит метод запроса (`GET`, `POST`, и т.д.)

`Request.mode` Только для чтения 

Содержит режим запроса (напр., `cors`, `no-cors`, `same-origin`, `navigate`.)

`Request.redirect` (en-US) Только для чтения 

Содержит режим перенаправления. Может быть одним из следующих: `follow`, `error`, или `manual`.

`Request.referrer` (en-US) Только для чтения 

Содержит значение "referrer" ("ссылающийся") запроса (например., `client`).

`Request.referrerPolicy` (en-US) Только для чтения 

Содержит политику "ссылающегося" данного запроса (e.g., `no-referrer`).

`Request.url` (en-US) Только для чтения 

Содержит URL запроса.

`Request` имплементирует `Body`, таким образом наследуя следующие параметры:

`body` (en-US) Только для чтения 

Простой getter используемый для раскрытия `ReadableStream` (en-US) "тела" (body) содержимого.

`bodyUsed` (en-US) Только для чтения 

Хранит `Boolean` (en-US), декларирующее использовалось ли "тело" ранее в ответе.

Методы
------

`Request.clone()` (en-US)

Создаёт копию текущего `Request` объекта.

`Request` имплементирует `Body`, таким образом наследуя следующие параметры:

`Body.arrayBuffer()` (en-US)

Возвращает промис, который выполняется, возвращая `ArrayBuffer` репрезентацию тела запроса.

`Body.blob()` (en-US)

Возвращает promise

`Body.formData()` (en-US)

Возвращает promise который разрешается с помощью `FormData` представления тела запроса.

`Body.json()` (en-US)

Returns a promise that resolves with a `JSON` representation of the request body.

`Body.text()` (en-US)

Returns a promise that resolves with an `USVString` (en-US) (text) representation of the request body.


**Примечание:** The `Body` functions can be run only once; subsequent calls will resolve with empty strings/ArrayBuffers.

Examples
--------

In the following snippet, we create a new request using the `Request()` constructor (for an image file in the same directory as the script), then return some property values of the request:


```js
const request = new Request("https://www.mozilla.org/favicon.ico");

const URL = request.url;
const method = request.method;
const credentials = request.credentials;
```


You could then fetch this request by passing the `Request` object in as a parameter to a `fetch()` call, for example:


```js
fetch(request)
  .then((response) => response.blob())
  .then((blob) => {
    image.src = URL.createObjectURL(blob);
  });
```


In the following snippet, we create a new request using the `Request()` constructor with some initial data and body content for an api request which need a body payload:


```js
const request = new Request("https://example.com", {
  method: "POST",
  body: '{"foo": "bar"}',
});

const URL = request.url;
const method = request.method;
const credentials = request.credentials;
const bodyUsed = request.bodyUsed;
```


**Примечание:** Типом тела может быть только `Blob`, `BufferSource`, `FormData`, `URLSearchParams`, `USVString` (en-US) или `ReadableStream` (en-US) поэтому, для добавления объекта JSON в полезную нагрузку вам необходимо структурировать этот объект.

Вы можете получить этот запрос API, передав объект Request в качестве параметра для вызова `fetch()`, например, и получить ответ:


```js
fetch(request)
  .then((response) => {
    if (response.status === 200) {
      return response.json();
    } else {
      throw new Error("Что-то пошло не так на API сервере.");
    }
  })
  .then((response) => {
    console.debug(response);
    // ...
  })
  .catch((error) => {
    console.error(error);
  });
```

Specifications
--------------

| Specification |
| --- |
| Fetch Standard # request-class |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Читай также
-----------

* ServiceWorker API (en-US)
* HTTP access control (CORS) (en-US)
* HTTP