Настройка Статических веб-приложений Azure
Конфигурацию для Статические веб-приложения Azure можно определить в файле staticwebapp.config.json, который управляет следующими параметрами:
- Маршрутизация
- Аутентификация
- Авторизация
- Резервные правила
- Переопределения ответа HTTP
- Глобальные определения заголовков HTTP
- Пользовательские типы MIME
- Сеть
Примечание.
Файл routes.json, который ранее использовался для настройки маршрутизации, объявлен нерекомендуемым. Настраивать маршрутизацию и другие параметры статического веб-приложения следует теперь в файле staticwebapp.config.js, как описано в этой статье.
В этом документе описывается настройка Статические веб-приложения Azure, которая является автономным продуктом и отделена от функции размещения статических веб-сайтов служба хранилища Azure.
Расположение файла
Мы рекомендуем размещать файл staticwebapp.config.json в папке, которая указана в качестве app_location
в файле рабочего процесса. Однако файл можно поместить в любую вложенную папку в папке, заданной app_location
в качестве . Кроме того, если есть шаг сборки, необходимо убедиться, что шаг сборки выводит файл в корневой каталог output_location.
Дополнительные сведения см. в примере файла конфигурации.
Внимание
Нерекомендуемый файл routes.json игнорируется, если существует файл staticwebapp.config.json.
Маршруты
Вы можете определить правила для одного или нескольких маршрутов в статическом веб-приложении. Правила маршрутизации позволяют ограничить доступ к пользователям в определенных ролях или выполнять такие действия, как перенаправление или перезапись. Маршруты определяются как массив правил маршрутизации. Примеры определения см. в примере файла конфигурации.
- Правила определяются в массиве
routes
, даже если имеется только один маршрут. - Правила оцениваются в порядке их отображения в массиве
routes
. - Оценка правила останавливается при первом совпадении. Совпадение происходит, когда
route
свойство и значение в массивеmethods
(если указано) соответствуют запросу. Каждый запрос может соответствовать по крайней мере одному правилу.
Вопросы маршрутизации в значительной степени связаны с такими понятиями, как проверка подлинности (идентификацией пользователя) и авторизация (назначению возможностей пользователю). При изучении этой статьи обязательно ознакомьтесь также с руководством по проверке подлинности и авторизации.
Определение маршрутов
Каждое правило состоит из шаблона маршрута, а также одного или нескольких необязательных свойств правила. Правила маршрута определяются в массиве routes
. Примеры определения см. в примере файла конфигурации.
Внимание
route
Используются только свойства и methods
(если указанные), чтобы определить, соответствует ли правило запросу.
Свойство правила | Обязательное поле | Default value | Comment |
---|---|---|---|
route |
Да | Н/Д | Шаблон маршрута, запрошенный вызывающим объектом.
|
methods |
No | Все методы | Определяет массив методов запроса, соответствующих маршруту. Доступные методы: GET , HEAD , POST , PUT , DELETE , CONNECT , OPTIONS , TRACE и PATCH . |
rewrite |
No | Н/Д | Определяет файл или путь, возвращенные из запроса.
|
redirect |
No | Н/Д | Определяет назначение перенаправления для файла или пути в запросе. |
statusCode |
No | 301 или 302 для перенаправлений |
Код состояния HTTP для ответа. |
headers |
No | Н/Д | Набор заголовков HTTP, которые добавляются в ответ.
|
allowedRoles |
No | анонимное | Определяет массив имен ролей, необходимых для доступа к маршруту.
|
Каждое свойство имеет определенное назначение в конвейере "запрос — ответ".
Характер использования | Свойства |
---|---|
Сопоставление маршрутов | route , methods |
Процесс, выполняемый после сопоставления и авторизации правила. | rewrite (изменяет запрос).redirect , headers , statusCode (изменяет ответ). |
Авторизация после сопоставления маршрута. | allowedRoles |
Указание шаблонов маршрутов
Свойство route
может быть точным маршрутом или шаблоном подстановочных знаков.
Точный маршрут
Чтобы определить точный маршрут, поместите полный путь файла в route
свойство.
{
"route": "/profile/index.html",
"allowedRoles": ["authenticated"]
}
Это правило соответствует запросам файла /profile/index.html. Так как index.html является файлом по умолчанию, правило также соответствует запросам к папке (/profile или /profile/).
Внимание
Если вы используете путь к папке (/profile
или /profile/
) в свойстве route
, он не будет соответствовать запросам файла /profile/index.html. При защите маршрута, который служит файлом, всегда используйте полный путь к файлу, например /profile/index.html
.
Шаблон подстановочного знака
Правила подстановочных знаков соответствуют всем запросам в шаблоне маршрута и поддерживаются только в конце пути. Примеры определения см. в примере файла конфигурации.
Например, для реализации маршрутов в приложении календаря можно перенаправить все URL-адреса, соответствующие маршруту calendar, к одному файлу.
{
"route": "/calendar*",
"rewrite": "/calendar.html"
}
Тогда файл calendar.html может использовать маршрутизацию на стороне клиента для предоставления разных представлений для различных вариантов URL-адресов, например /calendar/january/1
, /calendar/2020
и /calendar/overview
.
Примечание.
Шаблон маршрута соответствует всем запросам /calendar/*
в /calendar/ path. Однако он не будет соответствовать запросам путей /calendar или /calendar.html. Используется /calendar*
для сопоставления всех запросов, начинающихся с /calendar.
Вы можете фильтровать совпадения с подстановочными знаками по расширению файла. Например, можно добавить правило, которое соответствует только HTML-файлам по указанному пути:
{
"route": "/articles/*.html",
"headers": {
"Cache-Control": "public, max-age=604800, immutable"
}
}
Чтобы фильтровать совпадения по нескольким расширениям файлов, перечислите все нужные варианты в фигурных скобках, как в следующем примере:
{
"route": "/images/thumbnails/*.{png,jpg,gif}",
"headers": {
"Cache-Control": "public, max-age=604800, immutable"
}
}
Вот несколько типичных примеров использования для маршрутов с подстановочными знаками:
- обслуживание определенного файла для всего шаблона пути;
- применение правил проверки подлинности и авторизации;
- Реализация специализированных правил кэширования
Защита маршрутов с помощью ролей
Маршруты защищаются путем добавления одного или нескольких имен ролей в массив allowedRoles
правила. Примеры определения см. в примере файла конфигурации.
Внимание
Правила маршрутизации могут защищать только HTTP-запросы к маршрутам, обслуживающимся из Статические веб-приложения. Многие интерфейсные платформы используют клиентская маршрутизация, которая изменяет маршруты в браузере без выдачи запросов на Статические веб-приложения. Правила маршрутизации не защищают клиентские маршруты. Клиенты должны вызывать API HTTP для получения конфиденциальных данных. Убедитесь, что API проверяют удостоверение пользователя перед возвратом данных.
По умолчанию каждый пользователь принадлежит к встроенной роли anonymous
, а все вошедшие в систему пользователи являются членами роли authenticated
. При необходимости пользователи связываются с настраиваемыми ролями с помощью приглашений.
Например, чтобы ограничить маршрут только пользователями, прошедшими проверку подлинности, добавьте встроенную роль authenticated
в массив allowedRoles
.
{
"route": "/profile*",
"allowedRoles": ["authenticated"]
}
При необходимости в массиве allowedRoles
можно создать новые роли. Чтобы маршрут был доступен только администраторам, можно определить собственную роль administrator
в массиве allowedRoles
.
{
"route": "/admin*",
"allowedRoles": ["administrator"]
}
- Вы можете выбрать любые имена ролей; не существует никаких обязательных списков.
- Отдельные пользователи связываются с ролями с помощью приглашений.
Внимание
При защите содержимого укажите точные файлы, когда это возможно. Если у вас много файлов для защиты, используйте подстановочные знаки после общего префикса. Например: /profile*
защищает все возможные маршруты, начинающиеся с /profile, включая /profile.
Ограничение доступа ко всему приложению
Часто требуется проверка подлинности для каждого маршрута в приложении. Чтобы заблокировать маршруты, добавьте правило, которое соответствует всем маршрутам и включает встроенную authenticated
роль в allowedRoles
массив.
В следующем примере конфигурации блокируется анонимный доступ и перенаправляет всех пользователей, не прошедших проверку подлинности, на страницу входа Microsoft Entra.
{
"routes": [
{
"route": "/*",
"allowedRoles": ["authenticated"]
}
],
"responseOverrides": {
"401": {
"statusCode": 302,
"redirect": "/.auth/login/aad"
}
}
}
Примечание.
По умолчанию все предварительно настроенные поставщики удостоверений включены. Сведения о блокировке поставщика проверки подлинности см. в разделе "Проверка подлинности и авторизация".
Резервные маршруты
Одностраничные приложения часто используют маршрутизацию на стороне клиента. Эти правила маршрутизации на стороне клиента обновляют расположение окна в браузере без отправки обратных запросов на сервер. Если вы обновляете страницу или переходите непосредственно к URL-адресам, созданным правилами маршрутизации на стороне клиента, для обслуживания соответствующей HTML-страницы требуется резервный маршрут на стороне сервера. Резервная страница часто обозначается как index.html для клиентского приложения.
Примечание.
Правила маршрутизации не применяются к запросам, которые активируются navigationFallback
.
Вы можете определить резервное правило, добавив раздел navigationFallback
. В следующем примере возвращается /index.html для всех статических запросов файлов, которые не соответствуют развернутого файла.
{
"navigationFallback": {
"rewrite": "/index.html"
}
}
Вы можете контролировать, какие запросы возвращают резервный файл, определяя фильтр. В следующем примере запросы для определенных маршрутов в папке /Images и все файлы в папке /css исключены из процесса возврата резервного файла.
{
"navigationFallback": {
"rewrite": "/index.html",
"exclude": ["/images/*.{png,jpg,gif}", "/css/*"]
}
}
Например, со следующей структурой каталогов приведенный выше резервный правило навигации приведет к результатам, описанным в следующей таблице.
├── images
│ ├── logo.png
│ ├── headshot.jpg
│ └── screenshot.gif
│
├── css
│ └── global.css
│
├── about.html
└── index.html
Запрашиваемая папка | Возвращаемый файл | Состояние ответа |
---|---|---|
/about/ | Файл /index.html. | 200 |
/images/logo.png | Файл изображения. | 200 |
/images/icon.svg | Файл /index.html — так как расширение svg-файла не указано в фильтре/images/*.{png,jpg,gif} . |
200 |
/images/unknown.png | Ошибка файла не найдена. | 404 |
/css/unknown.css | Ошибка файла не найдена. | 404 |
/css/global.css | Файл таблицы стилей. | 200 |
/about.html | HTML-страница. | 200 |
Любой другой путь за пределами папок /images или /css , которые не соответствуют пути к развернутому файлу. | Файл /index.html. | 200 |
Внимание
При переходе с устаревшего файла routes.json не используйте резервный маршрут прежних версий ("route": "/*"
) в правиле маршрутизации.
Глобальные заголовки
В globalHeaders
этом разделе содержится набор заголовков HTTP, применяемых к каждому ответу, если не переопределяется правилом заголовков маршрута, в противном случае возвращается объединение заголовков из маршрута и глобальных заголовков.
Примеры определения см. в примере файла конфигурации.
Чтобы удалить заголовок, задайте в качестве значения пустую строку (""
).
Ниже приведены типичные примеры использования глобальных заголовков.
- Настраиваемые правила кэширования
- Политики безопасности
- Параметры кодирования
- Конфигурация общего доступа к ресурсам между источниками (CORS)
В следующем примере реализована настраиваемая конфигурация CORS.
{
"globalHeaders": {
"Access-Control-Allow-Origin": "https://example.com",
"Access-Control-Allow-Methods": "POST, GET, OPTIONS"
}
}
Примечание.
Глобальные заголовки не влияют на ответы API. Заголовки в ответах API сохраняются и возвращаются клиенту.
Переопределения ответов
Раздел responseOverrides
позволяет определить пользовательский ответ для ситуаций, в которых сервер иначе возвращал бы код ошибки. Примеры определения см. в примере файла конфигурации.
Для переопределения доступны следующие коды HTTP.
Код состояния | Значение | Возможная причина |
---|---|---|
400 | Недопустимый запрос | Недопустимая ссылка приглашения. |
401 | Не авторизовано | Запрос к страницам с ограничением доступа без проверки подлинности. |
403 | Запрещено |
|
404 | Не найдено | Файл не найден |
В следующем примере конфигурации показано, как переопределить код ошибки.
{
"responseOverrides": {
"400": {
"rewrite": "/invalid-invitation-error.html"
},
"401": {
"statusCode": 302,
"redirect": "/login"
},
"403": {
"rewrite": "/custom-forbidden-page.html"
},
"404": {
"rewrite": "/custom-404.html"
}
}
}
Платформа
Раздел platform
управляет определенными параметрами платформы, такими как версия среды выполнения языка API.
Выбор версии среды выполнения языка API
Чтобы настроить версию среды выполнения языка API, задайте apiRuntime
для свойства в platform
разделе одно из следующих поддерживаемых значений.
Версия среды выполнения языка | Операционная система | Версия для Функций Azure | Значение apiRuntime |
Дата окончания поддержки |
---|---|---|---|---|
.NET Core 3.1. | Windows | 3.x | dotnet:3.1 |
3 декабря 2022 г. |
В процессе .NET 6.0 | Windows | 4.x | dotnet:6.0 |
- |
Изолированный .NET 6.0 | Windows | 4.x | dotnet-isolated:6.0 |
- |
Изолированный .NET 7.0 | Windows | 4.x | dotnet-isolated:7.0 |
- |
Изолированный .NET 8.0 | Windows | 4.x | dotnet-isolated:8.0 |
- |
Node.js 12.x | Linux | 3.x | node:12 |
3 декабря 2022 г. |
Node.js 14.x | Linux | 4.x | node:14 |
- |
Node.js 16.x | Linux | 4.x | node:16 |
- |
Node.js 18.x | Linux | 4.x | node:18 |
- |
Node.js 20.x (предварительная версия) | Linux | 4.x | node:20 |
- |
Python 3.8 | Linux | 4.x | python:3.8 |
- |
Python 3.9 | Linux | 4.x | python:3.9 |
- |
Python 3.10 | Linux | 4.x | python:3.10 |
- |
.NET
Чтобы изменить версию среды выполнения в приложении .NET, измените TargetFramework
значение в csproj-файле . Если задать apiRuntime
значение в файле staticwebapp.config.json , убедитесь, что значение соответствует заданному в csproj-файле .
В следующем примере показано, как обновить TargetFramework
элемент для NET 8.0 в качестве версии среды выполнения языка API в csproj-файле .
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
...
</PropertyGroup>
...
Node.js
В следующем примере конфигурации показано, как использовать apiRuntime
свойство для выбора Node.js 16 в качестве версии среды выполнения языка API в файле staticwebapp.config.json .
{
...
"platform": {
"apiRuntime": "node:16"
}
...
}
Python
В следующем примере конфигурации показано, как использовать apiRuntime
свойство для выбора Python 3.8 в качестве версии среды выполнения языка API в файле staticwebapp.config.json .
{
...
"platform": {
"apiRuntime": "python:3.8"
}
...
}
Сеть
Раздел networking
управляет конфигурацией сети статического веб-приложения. Чтобы ограничить доступ к приложению, укажите список разрешенных блоков IP-адресов в allowedIpRanges
. Дополнительные сведения о количестве разрешенных блоков IP-адресов см. в разделе "Квоты" в Статические веб-приложения Azure.
Примечание.
Конфигурация сети доступна только в плане "Стандартный" статических веб-приложений Azure.
Определите каждый блок адресов IPv4 в нотации бесклассовой междоменной маршрутизации (CIDR). Подробная информация о нотации CIDR приведена в разделе Бесклассовая междоменная маршрутизация. Каждый блок адресов IPv4 может обозначать либо общедоступный, либо частный диапазон адресов. Если вы хотите разрешить доступ только из одного IP-адреса, можно использовать /32
блок CIDR.
{
"networking": {
"allowedIpRanges": [
"10.0.0.0/24",
"100.0.0.0/32",
"192.168.100.0/22"
]
}
}
Если указан один или несколько блоков IP-адресов, запросы, исходящие из IP-адресов, которые не соответствуют значению в allowedIpRanges
доступе, запрещены.
Помимо блоков IP-адресов, можно также указать теги служб в массивеallowedIpRanges
, чтобы ограничить трафик определенным службам Azure.
"networking": {
"allowedIpRanges": ["AzureFrontDoor.Backend"]
}
Проверка подлинности
Поставщики проверки подлинности по умолчанию не требуют параметров в файле конфигурации.
Пользовательские поставщики проверки подлинности используют
auth
раздел файла параметров.
Дополнительные сведения о том, как ограничить маршруты для прошедших проверку подлинности пользователей, см. в разделе "Защита маршрутов с помощью ролей".
Отключение кэша для путей, прошедших проверку подлинности
Если вы настроили интеграцию вручную с Azure Front Door, может потребоваться отключить кэширование для защищенных маршрутов. С поддержкой пограничных вычислений корпоративного уровня кэширование уже отключено для защищенных маршрутов.
Чтобы отключить кэширование Azure Front Door для защищенных маршрутов, добавьте "Cache-Control": "no-store"
его в определение заголовка маршрута.
Например:
{
"route": "/members",
"allowedRoles": ["authenticated, members"],
"headers": {
"Cache-Control": "no-store"
}
}
Переадресация шлюза
В forwardingGateway
этом разделе описывается, как статические веб-приложения обращаются из шлюза пересылки, например сеть доставки содержимого (CDN) или Azure Front Door.
Примечание.
Конфигурация шлюза пересылки доступна только в плане Статические веб-приложения Azure "Стандартный".
Разрешенные переадресированные узлы
В списке allowedForwardedHosts
указаны имена узлов, которые необходимо принять в заголовке X-Forwarded-Host . Если соответствующий домен находится в списке, Статические веб-приложения использует X-Forwarded-Host
значение при создании URL-адресов перенаправления, например после успешного входа.
Чтобы Статические веб-приложения правильно функционировать за шлюзом пересылки, запрос из шлюза должен содержать правильное имя узла в заголовкеX-Forwarded-Host
, а имя узла должно быть указано в allowedForwardedHosts
.
"forwardingGateway": {
"allowedForwardedHosts": [
"example.org",
"www.example.org",
"staging.example.org"
]
}
X-Forwarded-Host
Если заголовок не соответствует значению в списке, запросы по-прежнему выполняются успешно, но заголовок не используется в ответе.
Обязательные заголовки
Обязательные заголовки — это заголовки HTTP, которые должны отправляться с каждым запросом на сайт. Одним из обязательных заголовков является запрет доступа к сайту, если все необходимые заголовки не присутствуют в каждом запросе.
Например, в следующей конфигурации показано, как добавить уникальный идентификатор Azure Front Door , который ограничивает доступ к сайту из определенного экземпляра Azure Front Door. Полные сведения см. в руководстве по настройке Azure Front Door.
"forwardingGateway": {
"requiredHeaders": {
"X-Azure-FDID" : "692a448c-2b5d-4e4d-9fcc-2bc4a6e2335f"
}
}
- Пары "ключ-значение" могут быть любым набором произвольных строк
- Ключи являются нечувствительными к регистру
- Значения чувствительны к регистру
Косая черта
Косая черта является /
в конце URL-адреса. Как правило, конечный URL-адрес косой черты ссылается на каталог на веб-сервере, а косая черта не является признаком файла.
Поисковые системы обрабатывают два URL-адреса отдельно независимо от того, является ли он файлом или каталогом. При отображении одного содержимого на обоих из этих URL-адресов веб-сайт служит дубликатом содержимого, что может негативно повлиять на оптимизацию поисковой системы (SEO). При явной настройке Статические веб-приложения применяет набор правил нормализации URL-адресов и перенаправления, которые помогают повысить производительность веб-сайта и производительность SEO.
Для каждой доступной конфигурации применяются следующие правила нормализации и перенаправления:
Всегда
При настройке trailingSlash
always
всех запросов, которые не включают косую косую черту, перенаправляются на URL-адрес косой черты. Например, /contact
перенаправляется в /contact/
.
"trailingSlash": "always"
Запрашиваемая папка | Возвращаемый файл | Состояние ответа | и путь... |
---|---|---|---|
/около | Файл /about/index.html | 301 |
/about/ |
/about/ | Файл /about/index.html | 200 |
/about/ |
/about/index.html | Файл /about/index.html | 301 |
/about/ |
/privacy.html | Файл /privacy.html | 301 |
/конфиденциальность/ |
Никогда
Если задано значение trailingSlash
never
, все запросы, заканчивающиеся косой чертой, перенаправляются на URL-адрес косой черты, не связанный с косой чертой. Например, /contact/
перенаправляется в /contact
.
"trailingSlash": "never"
Запрашиваемая папка | Возвращаемый файл | Состояние ответа | и путь... |
---|---|---|---|
/около | Файл /about/index.html | 200 |
/около |
/about/ | Файл /about/index.html | 301 |
/около |
/about/index.html | Файл /about/index.html | 301 |
/около |
/privacy.html | Файл /privacy.html | 301 |
/конфиденциальность |
Авто
Если задано trailingSlash
auto
значение, все запросы к папкам перенаправляются по URL-адресу с косой чертой. Все запросы к файлам перенаправляются на URL-адрес косой черты, не связанный с косой чертой.
"trailingSlash": "auto"
Запрашиваемая папка | Возвращаемый файл | Состояние ответа | и путь... |
---|---|---|---|
/около | Файл /about/index.html | 301 |
/about/ |
/about/ | Файл /about/index.html | 200 |
/about/ |
/about/index.html | Файл /about/index.html | 301 |
/about/ |
/privacy.html | Файл /privacy.html | 301 |
/конфиденциальность |
Для оптимальной производительности веб-сайта настройте стратегию косой черты с помощью одного из always
never
режимов или auto
режимов.
По умолчанию при trailingSlash
опущении конфигурации Статические веб-приложения применяет следующие правила:
Запрашиваемая папка | Возвращаемый файл | Состояние ответа | и путь... |
---|---|---|---|
/около | Файл /about/index.html | 200 |
/около |
/about/ | Файл /about/index.html | 200 |
/about/ |
/about/index.html | Файл /about/index.html | 200 |
/about/index.html |
/privacy.html | Файл /privacy.html | 200 |
/privacy.html |
Пример файла конфигурации
{
"trailingSlash": "auto",
"routes": [
{
"route": "/profile*",
"allowedRoles": ["authenticated"]
},
{
"route": "/admin/index.html",
"allowedRoles": ["administrator"]
},
{
"route": "/images/*",
"headers": {
"cache-control": "must-revalidate, max-age=15770000"
}
},
{
"route": "/api/*",
"methods": ["GET"],
"allowedRoles": ["registeredusers"]
},
{
"route": "/api/*",
"methods": ["PUT", "POST", "PATCH", "DELETE"],
"allowedRoles": ["administrator"]
},
{
"route": "/api/*",
"allowedRoles": ["authenticated"]
},
{
"route": "/customers/contoso*",
"allowedRoles": ["administrator", "customers_contoso"]
},
{
"route": "/login",
"rewrite": "/.auth/login/github"
},
{
"route": "/.auth/login/x",
"statusCode": 404
},
{
"route": "/logout",
"redirect": "/.auth/logout"
},
{
"route": "/calendar*",
"rewrite": "/calendar.html"
},
{
"route": "/specials",
"redirect": "/deals",
"statusCode": 301
}
],
"navigationFallback": {
"rewrite": "index.html",
"exclude": ["/images/*.{png,jpg,gif}", "/css/*"]
},
"responseOverrides": {
"400": {
"rewrite": "/invalid-invitation-error.html"
},
"401": {
"redirect": "/login",
"statusCode": 302
},
"403": {
"rewrite": "/custom-forbidden-page.html"
},
"404": {
"rewrite": "/404.html"
}
},
"globalHeaders": {
"content-security-policy": "default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'"
},
"mimeTypes": {
".json": "text/json"
}
}
Ознакомьтесь со следующими сценариями для приведенной выше конфигурации.
Запрашиваемая папка | Возвращаемый результат |
---|---|
/profile | Для пользователей, прошедших проверку подлинности, выполняется обработка файла /profile/index.html. Пользователи, не прошедшие проверку подлинности, переопределяются в /login 401 правилом переопределения ответа. |
/admin, /admin/или /admin/index.html | Для пользователей, прошедших проверку подлинности в роли administrator, предоставляется файл /admin/index.html. Пользователи, прошедшие проверку подлинности, но не зарегистрированные в роли administrator, получают ошибку 403 1. Пользователи, не прошедшие проверку подлинности, перенаправляются в /login |
/images/logo.png | Возвращает изображение, для которого применяется пользовательское правило кэширования, определяющее максимальный срок чуть более 182 дней (15 770 000 секунд). |
/api/admin | Запросы GET от пользователей, прошедших проверку подлинности, у которых есть роль registeredusers, отправляются в API. Пользователи, не прошедшие проверку подлинности или не имеющие роли registeredusers, получают ошибку 401 .Запросы POST , PUT , PATCH и DELETE от пользователей, прошедших проверку подлинности, у которых есть роль administrator, отправляются в API. Пользователи, не прошедшие проверку подлинности или не имеющие роли administrator, получают ошибку 401 . |
/customers/contoso | Пользователям, прошедшим проверку подлинности и имеющим роль administrators или customers_contoso, предоставляется файл /customers/contoso/index.html. Пользователи, прошедшие проверку подлинности, но не имеющие роли administrators или customers_contoso, получают сообщение об ошибке 403 1. Пользователи, не прошедшие проверку подлинности, перенаправляются на адрес /login. |
/login | Пользователям, не прошедшим проверку подлинности, предлагается сделать это с помощью GitHub. |
_/.auth/login/x | Так как правило маршрута отключает авторизацию X, 404 возвращается ошибка. Эта ошибка затем возвращается к обслуживанию /index.html с 200 кодом состояния. |
/logout | Пользователи вышли из какого-либо поставщика проверки подлинности. |
/calendar/2021/01 | В браузере обрабатывается файл /calendar.html. |
/specials | Браузер постоянно перенаправляется на /deals. |
/data.json | Предоставляется файл с типом MIME text/json . |
/about или любая другая папка, соответствующая шаблонам маршрутизации на стороне клиента. | Предоставляется файл /index.html с кодом состояния 200 . |
Несуществующий файл в папке /images/ | Ошибка 404 . |
1 Вы можете предоставлять настраиваемую страницу ошибки, используя правило переопределения ответа.
Ограничения
Для файла staticwebapp.config.json существуют следующие ограничения.
- Максимальный размер файла составляет 20 КБ
- Не более 50 различных ролей.
Общие ограничения см. в статье о квотах.