Я довольно новичок в AWS, и сейчас я изучаю несколько различных учебных курсов, и одна из интересных вещей, на которые я наткнулся, – это возможность добавлять пользовательские заголовки в Cloudfront. Тем не менее, я не могу понять (или найти простую для понимания документации), как использовать / использовать возможности этой функции.
Может кто-нибудь, пожалуйста, дайте мне знать, как:
Если это важно, я программирую на PHP. Будем очень благодарны за любые объяснения, примеры кода или ссылки на полезную документацию. Спасибо за помощь.
Как получить доступ к заголовкам, которые я установил?
«Вы» пользователь браузера / завитка не видит их. Они закрыты между CloudFront и сервером происхождения, отправленным с запросом.
Вы можете получить к ним доступ с вашего PHP-кода сервера с помощью getallheaders()
.
Я смущен, как использовать эти заголовки
То, что они позволяют вам делать, это одна из двух вещей:
если в запрос входит соответствующий заголовок, и он будет отправлен в начало координат, но вы не хотите, чтобы он был отправлен в полученный, перезапишите его новым значением
если соответствующий заголовок не входит в запрос, добавьте его перед отправкой на исходный сервер.
Но если вы не знаете, что с ними делать, у вас может не быть необходимости в них.
Некоторые потенциальные приложения:
Если вы хотите использовать подписанные URL-адреса CloudFront или подписанные файлы cookie, вы можете добавить заголовок с секретным значением, который доказывает вашему веб-серверу, что запрос пришел из CloudFront и, в частности, из вашего дистрибутива CloudFront, потому что значение соответствует. Раньше ваш исходный сервер должен был быть общедоступным, потому что не было возможности проверить, что запросы были получены (и были разрешены) CloudFront – стандартные заголовки могут быть подделаны кем угодно, и даже если вы проверили IP-адрес входящего спросите, вы могли бы доказать, что это был «некоторый» дистрибутив CloudFront, но не ваш дистрибутив CloudFront. (Злоумышленник может настроить дистрибутив CloudFront и получить доступ к вашему контенту, если вы внедрили такой сценарий наивного доверия). Поскольку заголовки и их значения неизвестны / невидимы браузером, вы можете убедиться, что заголовок присутствует с ожидаемым значением, используя те же механизмы в вашем коде, которые вы использовали бы для чтения любого другого входящего заголовка запроса. Это также можно использовать, если вы хотите отклонить запросы, которые не были получены через CloudFront по какой-либо другой причине, кроме проверки подлинности и контроля доступа для безопасного контента. См. http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/forward-custom-headers.html#forward-custom-headers-restrict-access .
Вы можете использовать их для изменения заголовков CORS на пути к началу. См. http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html#header-caching-web-cors
Вы можете использовать их для отслеживания того, какой из нескольких дистрибутивов CloudFront отправлен запрос, для целей выставления счетов, если у вас было несколько дистрибутивов CloudFront, указывающих на один и тот же исходный сервер.
Вы могли бы использовать их, чтобы восполнить какое-то ограничение на исходном сервере, где по какой-то причине ему нужно было увидеть определенный заголовок, но вы не хотели на самом деле пересылать этот заголовок, так как это повредило бы коэффициент попадания в кеш – CloudFront кэширует ответы на весь запрос, отправленный в начало, включая путь, пересылаемые заголовки (если разрешено), строку запроса (если разрешено) и / или файлы cookie (если разрешено). Он будет обслуживать запрос только из кеша, если запрос, который он пересылает в начало, точно совпадает с запросом, который он отправил, чтобы получить ответ, который он кэшировал (и, таким образом, CloudFront может кэшировать несколько вариантов одного и того же ресурса на основе параметров запроса что вы разрешаете пересылать через). Причина этого в том, что кэш имеет обязательство не делать предположений о том, как сервер может изменять ответ на основе разных параметров запроса. Если два запроса не являются семантически эквивалентными, они не могут считаться эквивалентными для целей кэширования.