Современные веб-страницы используют больше внешних скриптов и ресурсов, чем когда-либо прежде. По умолчанию JavaScript следует политике одного и того же происхождения и может вызывать только URL-адреса в том же домене, что и запущенный скрипт. Итак, как мы можем заставить наши страницы на базе JavaScript использовать внешние скрипты?
CORS — вот ответ.
Cross- совместное использование ресурсов origin (CORS) — это механизм, который позволяет веб-страницам получать доступ к API или ресурсам, работающим в другом ограниченном домене.
Сегодня мы ‘ Я подробно изучу CORS и узнаю, как активировать его в различных интерфейсных фреймворках.
Вот что мы рассмотрим сегодня:
- Что такое CORS?
- Как работает CORS?
- Типы запросов CORS
- Быстрый руководство по внедрению CORS
- Что изучать дальше
- Расширьте свой набор навыков внешнего интерфейса
- Что такое CORS?
- Живой пример CORS
- Какие ресурсы могут запрашивать CORS?
- Как работает CORS?
- Типы запросов CORS
- Простые запросы
- Продолжайте изучать интерфейс разработки.
- Предварительные запросы
- Краткое руководство по внедрению CORS
- Чему научиться дальше
- Продолжить изучение интерфейсного JavaScript
Расширьте свой набор навыков внешнего интерфейса
Станьте пользователем вдвое быстрее, не просматривая обучающие видео.
Станьте Front End разработчиком
Что такое CORS?
Совместное использование ресурсов между разными источниками (CORS) — это механизм браузера, который позволяет веб-страница для использования ресурсов и данных с других страниц или доменов.
Большинству сайтов необходимо использовать ресурсы и изображения для запуска своих скриптов. Эти встроенные ресурсы представляют угрозу безопасности, поскольку они могут содержать вирусы или открывать доступ к серверу хакеру.
Политики безопасности снижают риски безопасности при использовании ресурсов. Политика определяет, какие ресурсы может загружать запрашивающий сайт, в зависимости от источника или содержимого и регулирует объем доступа, предоставляемый запрашивающему сайту. Каждая политика должна иметь достаточно ограничений для защиты веб-сервера, но не настолько, чтобы повредить функциональность.
Same-origin — это наиболее безопасный тип политики, предотвращающий доступ к любой внешний сервер. Все ресурсы сайта должны иметь одно и то же происхождение. В большинстве случаев вариант с одинаковым происхождением является хорошим выбором, поскольку большинство скриптов могут работать только с локальными ресурсами. Однако иногда нам нужно разрешить доступ к внешним ресурсам, таким как видео, прямые трансляции или изображения.
Что такое источник?
Происхождение относится к 3 частям: протоколу, хосту и номеру порта. Протокол относится к протоколу прикладного уровня, часто HTTP. Хост — это основной домен сайта, к которому относятся все страницы, например, Educative.io. Наконец, номер порта — это конечная точка связи для запроса, по умолчанию это порт 80..
Многие сайты используют форму политики перекрестного происхождения, называемую совместное использование ресурсов между источниками (CORS), которая определяет способ для веб-страницы и хост-сервер для взаимодействия и определения, безопасно ли для сервера разрешить доступ к веб-странице.
CORS — это политика среднего уровня между безопасностью и функциональностью, поскольку сервер может утверждать определенные внешние запросы без небезопасность утверждения всех запросов.
Живой пример CORS
Наиболее распространенным примером CORS является реклама на неродных сайтах.
Например, представьте, что вы смотрите видео на YouTube и видите рекламу Android. Серверы YouTube зарезервированы для их основных ресурсов и не могут локально хранить всю возможную рекламу.
Вместо этого все объявления хранятся на серверах рекламной компании. Рекламная компания предоставила доступ для просмотра к YouTube, чтобы веб-страница YouTube могла воспроизводить сохраненное рекламное видео Android.
Преимущество этой системы заключается в том, что YouTube может использовать контент с другого сервера без использования локального хранилища. . Кроме того, это позволяет рекламной компании быстро развертывать новые рекламные объявления, поскольку им нужно только обновить то, какое объявление передается на YouTube со своего сервера.
Какие ресурсы могут запрашивать CORS?
Сайты используют запросы CORS для загрузки:
- Fetch-запросы или HTTP-запросы, такие как
XMLHTTPRequests
- Веб-шрифты и шрифты TrueType доступны только для межсайтовой загрузки
- Текстуры Web GL
- Изображения и видео
- CSS-формы
Вы можете использовать CORS чтобы свободно встраивать эти типы ресурсов в свой сайт и избегать создания локальных копий.
Нравится статья? Прокрутите вниз, чтобы подписаться на нашу бесплатную рассылку новостей раз в два месяца.
Как работает CORS?
CORS добавляет новые заголовки HTTP в список стандартных заголовков. Новые заголовки CORS позволяют локальному серверу хранить список разрешенных источников.
Все запросы от этих источников удовлетворяются, и им разрешается использовать ограниченные ресурсы. Заголовок, который нужно добавить в список приемлемых источников: Access-Control-Allow-Origin
.
Есть много разных типов заголовков ответов, которые обеспечивают разные уровни доступа. Вот еще несколько дополнительных примеров заголовков CORS HTTP:
-
Access-Control-Allow-Credentials
Access-Control-Allow-Headers
-
Access-Control-Allow-Methods
Access-Control-Expose-Headers
-
Access-Control-Max-Age
Access-Control-Request-Headers
-
Access-Control-Request-Method
Origin
Когда веб-браузер хочет получить доступ к сайту, он отправляет серверу сайта CORS GET
запрос. Если это разрешено, запрос GET
позволит браузеру просматривать страницу, но не более того.
Большинство серверов позволяют GET
запросы из любого источника, но будут блокировать другие типы запросов.
Сервер либо отправит обратно значение подстановочного знака, *
, что означает неограниченный доступ к запрошенным данным, либо сервер проверит список разрешенных источников.
Если источник запроса находится в списке, веб-странице разрешено просматривать веб-страницу, и сервер повторяет имя разрешенного источника.
Если нет, сервер вернет отклоненное сообщение, в котором указано, запрещен ли исходный код для любого доступа или ему запрещено выполнять определенное действие.
Типы запросов CORS
Указанный выше запрос GET
— это простейшая форма запроса, разрешающая только просмотр. Существуют различные типы запросов, которые допускают более сложное поведение, например, запросы на изменение или удаление данных из разных источников.
Эти разные запросы существуют, потому что мы можем захотеть предоставить разные уровни доступа в зависимости от источника . Возможно, мы хотели бы, чтобы все запросы GET
были удовлетворены, но только наша партнерская рекламная компания может редактировать активы.
Разделение типов запросов позволяет нам определять точное уровень допуска источника и убедитесь, что каждый источник может выполнять только запросы, необходимые для его функции.
Большинство запросов делятся на две основные категории:
- Простые запросы : эти запросы не запускают предпечатную проверку и используют только «безопасные» заголовки CORS.
- Предварительные запросы : эти запросы отправляют «предпечатное» сообщение, в котором излагается, что запрашивающая сторона хотела бы сделать перед исходным запросом. Запрошенный сервер просматривает это предполетное сообщение, чтобы убедиться, что запрос безопасен, чтобы разрешить.
Простые запросы
Простые запросы не требуют предварительной проверки и используют один из трех методов: GET
, POST
и HEAD
. Эти запросы поступают до того, как был изобретен CORS, и поэтому им разрешено пропустить предварительную проверку CORS.
GET
Запрос GET
просит просмотреть представление общего файла данных с определенного URL-адреса. Его также можно использовать для запуска загрузки файлов.
Примером может быть посещение любого сайта в Интернете. Как внешний пользователь, мы можем видеть только содержимое сайта и не можем изменять текст или визуальные элементы.
GET/index.html
HEAD
Запрос HEAD
предварительно просматривает заголовки, которые будут отправлены с запросом GET
. Он используется для выборки того, какой контент существует по определенному URL-адресу без доступа к нему.
Например, вы можете HEAD
загрузить URL-адрес для получения его Заголовок Content-Length
. Это позволит вам узнать размер загружаемого файла, прежде чем вы согласитесь загрузить его.
HEAD/index.html
POST
Запрос POST
просит передать данные на запрошенный сервер, что может привести к смене сервера. Если запрос POST
запускается несколько раз, он может иметь неожиданное поведение.
Примером этого является добавление комментария в ветку форума.
Браузер отправляет запрос на добавление вашего входного комментария на сервер. После принятия сервер форума берет недавно полученные данные (комментарий) и сохраняет их для просмотра другими.
POST/test HTTP/1.1Host: foo.example.comContent -Type: application/x-www-form-urlencodedContent-Length: 27field1 = value1 & field2 = value2
Продолжайте изучать интерфейс разработки.
Изучите навыки интерфейса, которые ищут работодатели для. Программа Educative’s Paths дает вам доступ ко всем лучшим интерфейсам и практическим примерам из нашей библиотеки курсов.
Станьте Front End разработчиком
Предварительные запросы
Некоторые методы генерируют дополнительный предпечатный запрос, который отправляется перед исходным запросом. Запросы предварительной проверки автоматически генерируются с помощью метода OPTIONS
для функций, которые могут влиять на данные пользователя или вносить серьезные изменения в сервер.
OPTIONS
используется для сбора дополнительной информации о том, как запрашивающей стороне разрешено взаимодействовать с сервером. Он возвращает параметры метода, для которых одобрен запросчик..
OPTIONS
— это безопасный метод, означающий, что он не может изменить ничего, к чему осуществляется доступ. , поскольку он будет отправлен за кулисами, если вы используете метод предпечатной проверки.
Вам не нужно вручную вызывать метод OPTIONS
. Запросы предварительной проверки автоматически отправляются из браузера, когда вы пытаетесь запросить метод, помеченный как «для предварительной проверки».
Наиболее распространенным методом предварительной проверки является DELETE
, который удаляет выбранный файл или актив с сервера.
Предварительный запрос включает источник запроса и желаемый метод, указанный с помощью Access-Control-Request-Method
. Сервер анализирует предварительный запрос, чтобы проверить, есть ли у этого источника доступ для выполнения такой метод.
Если да, сервер возвращает все методы, которые разрешено использовать источнику, и указывает, что вы можете отправить исходный запрос.
Если нет, то исходный запрос игнорируется.
Запрос Затем браузер может кэшировать это предварительное одобрение, пока оно действительно.
Вы можете увидеть дату истечения срока одобрения, проверив значение Access-Control-Max- Возраст
.
Браузер запрашивающего может затем кешируйте это предполетное одобрение до тех пор, пока оно действительно. Вы можете увидеть дату истечения срока действия разрешения, проверив значение Access-Control-Max-Age
.
Краткое руководство по внедрению CORS
Чтобы начать работу с CORS, вам необходимо включить его в своих приложениях. Ниже представлен код из разных фреймворков, который сделает ваше приложение готовым к CORS.
Приложение Nodejs Express
app.use (function (req, res, next) {res.header ("Access-Control-Allow-Origin", "YOUR-DOMAIN.TLD");//обновляем в соответствии с доменом вы сделаете запрос из res.header ("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next ();}); app.get ('/ ', function (req, res, next) {//Обработка получения для этого маршрута}); app.post ('/', function (req, res, next) {//Обработка публикации для этого маршрута});
Установите пакет:
$ pip install -U flask-cors
Затем добавьте его в свое приложение Flask:
# app. pyfrom flask import Flaskfrom flask_cors import CORSapp = Flask (__ name __) cors = CORS (app)
Apache
Добавьте следующую строку внутри
,
,
или Разделы
конфигурации вашего сервера.
Набор заголовков Access-Control-Allow-Origin "*"
Чтобы изменения были применены правильно, запустите apachectl -t
, затем перезагрузите Apache, используя sudo service apache2 reload
.
Приложения Spring Boot в Kotlin
Следующий блок кода Kotlin включает CORS в приложениях Spring Boot.
import org.springframework.http.HttpMethodimport org.springframework.http.HttpStatusimport org.springframework.stereotype.Componentimport org.springframework.web.server. .springframework.web.server.WebFilterC hainimport response.core.publisher.Mono@Componentclass CorsFilter: WebFilter {переопределить забавный фильтр (ctx: ServerWebExchange ?, цепочка: WebFilterChain?): Mono {if (ctx! = null) {ctx.response.headers.add ( «Access-Control-Allow-Origin», «*») ctx.response.headers.add («Access-Control-Allow-Methods», «GET, PUT, POST, DELETE, OPTIONS») ctx.response.headers. add ("Access-Control-Allow-Headers", "DNT, X-CustomHeader, Keep-Alive, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type, Content-Range , Range ") if (ctx.request.method == HttpMethod.OPTIONS) {ctx.response.headers.add (" Access-Control-Max-Age "," 1728000 ") ctx.response.statusCode = HttpStatus.NO_CONTENT return Mono.empty ()} else {ctx.response.headers.add ("Access-Control-Expose-Headers", "DNT, X-CustomHeader, Keep-Alive, User-Agent, X-Requested-With, If-Modified -Since, Cache-Control, Content-Type, Content-Range, Range ") цепочка возврата? .Filter (ctx)?: Mono.empty ()}} else { цепочка возврата? .filter (ctx)?: Mono.empty ()}}}
Nginx
Следующий блок кода включает CORS с поддержкой предпечатных запросов..
## Широко открытая конфигурация CORS для nginx # location/{if ($ request_method = 'OPTIONS') {add_header 'Access-Control-Allow-Origin' '*' ; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; # # Пользовательские заголовки и заголовки в различных браузерах * должны * быть в порядке, но не # add_header 'Access-Control-Allow-Headers' DNT, User-Agent, X-Requested-With, If-Modified-Since, Cache- Control, Content-Type, Range '; # # Сообщите клиенту, что эта предполетная информация действительна в течение 20 дней # add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' текст/простой; charset = utf-8 '; add_header 'Content-Length' 0; возврат 204; } если ($ request_method = 'POST') {add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' DNT, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type, Range '; add_header 'Access-Control-Expose-Headers' Content-Length, Content-Range '; } если ($ request_method = 'GET') {add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' DNT, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type, Range '; add_header 'Access-Control-Expose-Headers' Content-Length, Content-Range '; }}
Чему научиться дальше
Поздравляем, вы сделали первые шаги к мастерству CORS. Этот мощный интерфейсный инструмент необходим для найма ведущими работодателями в области веб-разработки, такими как Google и Amazon.
Чтобы продолжить свое путешествие по CORS, следует изучить следующие темы:
- Запросить аутентификацию с учетными данными
- Запросы Ajax с CORS
- CORS в PHP
- Сторонние файлы cookie в CORS
Чтобы и дальше расширять ваш набор навыков внешнего интерфейса, компания Educative создала путь Стать разработчиком внешнего интерфейса . Этот путь включает в себя учебные пособия и примеры в браузере по написанию и стилизации интерфейсов веб-сайтов. К концу вы отработаете несколько реальных проектов и даже запустите свой личный веб-сайт.
Удачного обучения!
Продолжить изучение интерфейсного JavaScript
- Начало работы с React и TypeScript
- Введение в разработку полнофункционального JavaScript
- Что такое Node.js? Введение в среду выполнения JavaScript для новичков.