Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
веб 7 лаб.docx
Скачиваний:
0
Добавлен:
23.06.2025
Размер:
56.75 Кб
Скачать

Пример заголовков ответа:

Copy

Download

HTTP/1.1 200 OK

Content-Type: application/json

Content-Length: 1024

Cache-Control: max-age=3600

Server: nginx/1.18.0

Date: Wed, 21 Oct 2023 14:28:00 GMT

Access-Control-Allow-Origin: *

5. Как выполнить HTTP запрос?

В JavaScript есть несколько способов выполнения HTTP-запросов:

1. XMLHttpRequest (старый способ):

javascript

Copy

Download

const xhr = new XMLHttpRequest();

xhr.open('GET', 'https://api.example.com/data', true);

xhr.setRequestHeader('Content-Type', 'application/json');

xhr.onload = function() {

if (xhr.status === 200) {

const response = JSON.parse(xhr.responseText);

console.log(response);

} else {

console.error('Ошибка:', xhr.statusText);

}

};

xhr.onerror = function() {

console.error('Ошибка сети');

};

xhr.send();

2. Fetch API (современный способ):

javascript

Copy

Download

fetch('https://api.example.com/data', {

method: 'POST',

headers: {

'Content-Type': 'application/json',

'Authorization': 'Bearer token123'

},

body: JSON.stringify({ key: 'value' })

})

.then(response => {

if (!response.ok) {

throw new Error('Ошибка сети');

}

return response.json();

})

.then(data => console.log(data))

.catch(error => console.error('Ошибка:', error));

3. Axios (популярная библиотека):

javascript

Copy

Download

axios.get('https://api.example.com/data', {

params: { id: 123 },

headers: { 'X-Custom-Header': 'value' }

})

.then(response => console.log(response.data))

.catch(error => console.error(error));

4. jQuery AJAX (если используется jQuery):

javascript

Copy

Download

$.ajax({

url: 'https://api.example.com/data',

type: 'GET',

dataType: 'json',

success: function(data) {

console.log(data);

},

error: function(xhr, status, error) {

console.error(error);

}

});

Основные шаги выполнения запроса:

  1. Создание запроса с указанием метода (GET, POST и т.д.)

  2. Установка необходимых заголовков

  3. Отправка запроса (с телом для POST/PUT)

  4. Обработка ответа (успешного или с ошибкой)

  5. Парсинг данных ответа (если нужно)

6. Что такое XMLHttpRequest и fetch и в чем их отличие?

XMLHttpRequest (XHR):

  • Год появления: 2006 (Internet Explorer 5)

  • Тип API: Старый, основанный на событиях

  • Синтаксис: Более сложный и многословный

  • Промисы: Не поддерживает, использует колбэки

  • Отмена запроса: Через метод .abort()

  • Поддержка CORS: Требует дополнительной настройки

  • Поддержка старых браузеров: Полная

Fetch API:

  • Год появления: 2015 (ES6)

  • Тип API: Современный, основанный на промисах

  • Синтаксис: Более чистый и понятный

  • Промисы: Полноценная поддержка

  • Отмена запроса: Через AbortController

  • Поддержка CORS: Встроенная, с настройками по умолчанию

  • Поддержка старых браузеров: Требует полифилов для IE

Ключевые различия:

Характеристика

XMLHttpRequest

Fetch

Возраст

Старый API

Современный API

Интерфейс

Основан на событиях

Основан на промисах

Синтаксис

Более сложный

Более простой

JSON

Требует ручного парсинга

Встроенные методы (.json())

Обработка ошибок

Проверка status

Проверка response.ok

Отмена запроса

xhr.abort()

AbortController

Загрузка файлов

Поддерживает

Поддерживает

Отправка формы

FormData

FormData

Поддержка браузеров

Все

Современные + полифиллы

Когда использовать что:

  • Fetch API: Для новых проектов, когда нужен чистый и современный код

  • XMLHttpRequest: Для поддержки очень старых браузеров или специфических задач (например, отслеживание прогресса загрузки)

7. Что такое CORS?

CORS (Cross-Origin Resource Sharing) - это механизм безопасности браузеров, который разрешает или запрещает запросы к ресурсам на другом домене (origin).

Как работает CORS:

  1. Браузер отправляет запрос на другой домен

  2. Сервер отвечает с соответствующими CORS-заголовками

  3. Браузер проверяет заголовки и решает, разрешить ли доступ к ответу

Основные понятия:

  • Origin (источник): Комбинация протокола, домена и порта (https://example.com:443)

  • Простой запрос (Simple request): GET/HEAD/POST с определенными заголовками

  • Предварительный запрос (Preflight): OPTIONS-запрос перед основным для сложных запросов

  • Учетные данные (Credentials): Куки, HTTP-аутентификация

CORS-заголовки:

Заголовки запроса:

  • Origin: Домен, с которого отправляется запрос

  • Access-Control-Request-Method: Метод для предварительного запроса

  • Access-Control-Request-Headers: Заголовки для предварительного запроса

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

  • Access-Control-Allow-Origin: Разрешенные домены (* или конкретный)

  • Access-Control-Allow-Methods: Разрешенные HTTP-методы

  • Access-Control-Allow-Headers: Разрешенные заголовки запроса

  • Access-Control-Allow-Credentials: Разрешение отправки учетных данных

  • Access-Control-Max-Age: Время кэширования предварительного запроса

Пример CORS-политики:

Copy

Download

Access-Control-Allow-Origin: https://example.com

Access-Control-Allow-Methods: GET, POST, PUT

Access-Control-Allow-Headers: Content-Type, Authorization

Access-Control-Allow-Credentials: true

Типичные ошибки CORS:

  • Отсутствие заголовка Access-Control-Allow-Origin

  • Попытка отправить учетные данные без Access-Control-Allow-Credentials: true

  • Использование запрещенных заголовков в запросе

Как решать проблемы с CORS:

  1. Настроить сервер для отправки правильных CORS-заголовков

  2. Использовать прокси-сервер

  3. Для разработки - отключить CORS в браузере (только для тестирования)

  4. Использовать механизм JSONP для GET-запросов (устаревший способ)

Важно: CORS - это защита на стороне браузера. Сервер может обрабатывать запросы от любого источника, но браузер не даст клиентскому JavaScript доступ к ответу без правильных CORS-заголовков

Соседние файлы в предмете Web технологии