Изменение заголовков http-ответов

Руслан Якушев

Этот раздел документации относится к модулю переопределения URL-адресов версии 2.0 для IIS 7.

В этом пошаговом руководстве описывается, как использовать модуль переопределения URL-адресов версии 2.0 для настройки заголовков HTTP-ответа.

Предварительные требования

Для этого пошагового руководства требуются следующие предварительные требования.

  1. IIS 7 или более поздней версии с включенной службой ASP.NET роли;
  2. Установленный выпуск-кандидат модуля переопределения URL-адресов 2.0;
  3. Завершено пошаговое руководство по обратному прокси-серверу с перезаписью URL-адресов версии 2 и маршрутизацией запросов приложений.

Введение

Модуль перезаписи URL-адресов 2.0 поддерживает перезапись http-заголовков ответа на основе правил. Очень распространенный сценарий использования для настройки заголовков ответов — изменение ответа перенаправления, созданного приложением за подсистемой балансировки нагрузки или обратным прокси-сервером. Например, когда приложение за обратным прокси-сервером возвращает ответ перенаправления, заголовок HTTP Location в ответе может представлять не адрес для доступа в Интернет, а внутренний адрес приложения. Модуль переопределения URL-адресов 2.0 можно использовать на обратном прокси-сервере для изменения заголовка Location в ответе. Сценарий представлен на следующей схеме:

Схема, на которую показан процесс ответа перенаправления между клиентом, обратным прокси-сервером и внутренним клиентским сервером.

  1. HTTP-клиент отправляет запрос к веб-странице http://www.contoso.com/webmail/oldpage.aspx.
  2. Обратный прокси-сервер использует перезапись URL-адресов 2.0 и маршрутизацию запросов приложений для перенаправления запроса на внутренний сервер содержимого на основе имени папки в запрошенном URL-пути. Например, http://webmail/oldpage.aspx;
  3. Веб-приложение, работающее на сервере содержимого, выдает ответ перенаправления (HTTP/1.1 301), указывающий HTTP-клиент на http://webmail/newpage.aspx;
  4. Обратный прокси-сервер использует перезапись URL-адресов 2.0, чтобы заменить внутреннее расположение перенаправления в ответе расположением перенаправления через Интернет: http://www.contoso.com/webmail/newpage.aspx.

Настройка сценария пошагового руководства

Чтобы настроить сценарий пошагового руководства, выполните пошаговое руководство по обратному прокси-серверу с переопределением URL-адресов версии 2 и маршрутизации запросов приложений. В конце этого пошагового руководства у вас должен быть веб-сайт обратного прокси-сервера, который направляет запросы к двум контентным приложениям: веб-почте и payroll.

В этом пошаговом руководстве необходимо добавить логику перенаправления в приложение веб-почты. В реальном сценарии это, вероятно, будет перенаправление, инициированное кодом веб-приложения, но для простоты в этом пошаговом руководстве вы будете использовать правило перенаправления в модуле переопределения URL-адресов.

  1. Создайте файл с именем web.config в следующей папке:

    %SystemDrive%\inetpub\webmail
    
  2. Откройте файл в текстовом редакторе, вставьте в него следующий XML-код и сохраните файл:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    <system.webServer>
      <rewrite>
        <rules>
         <rule name="Redirect" stopProcessing="true">
         <match url="^index\.aspx$" />
         <action type="Redirect" url="default.aspx" />
        </rule>
       </rules>
      </rewrite>
    </system.webServer>
    </configuration>
    

    Это правило, которое перенаправляет все запросы для index.aspx в default.aspx.

Теперь откройте веб-браузер и сделайте запрос http://localhost/webmail/index.aspx. Обратите внимание, что браузер был перенаправлен на http://localhost:8081/default.aspx, который, по сути, является внутренним URL-адресом, используемым веб-приложением веб-почты. Теперь вы настроите правила переопределения URL-адресов, чтобы изменить заголовок РАСПОЛОЖЕНИЯ HTTP в ответах перенаправления HTTP, чтобы браузер перенаправлялся на правильный URL-адрес: http://localhost/webmail/default.aspx.

Изменение правила входящего трафика для сохранения заголовка узла

Чтобы иметь возможность изменять заголовок РАСПОЛОЖЕНИЯ HTTP, необходимо сохранить исходное значение заголовка узла HTTP. Правило перезаписи исходящего трафика использует сохраненное значение при изменении ответа. Чтобы сохранить исходное значение, сохраните его во временной переменной сервера ORIGINAL_HOST.

  1. На странице представления функций переопределения URL-адреса main выберите Просмотр переменных сервера в области Действия справа:
    Снимок экрана: просмотр переменных сервера в разделе Управление переменными сервера на панели
  2. На странице Разрешенные переменные сервера выберите Добавить , а затем введите имя переменной сервера, которая будет использоваться для временного хранения значения заголовка узла HTTP. Например, ORIGINAL_HOST:
    Снимок экрана: имя переменной сервера, для которых задано значение ORIGINAL подчеркивания HOST.
  3. Нажмите кнопку ОК, чтобы сохранить изменения, а затем вернитесь на страницу представления функций перезаписи URL-адреса main. После этого выберите правило входящего трафика "Обратный прокси-сервер для веб-почты" и выберите Изменить.
  4. На странице Изменение правила для входящего трафика разверните поле группы "Переменные сервера"; затем выберите Добавить и введите "ORIGINAL_HOST" в поле имя переменной сервера и "{HTTP_HOST}" в поле "Значение":
    Снимок экрана: страница

Создание правила для исходящего трафика для изменения заголовка HTTP-ответа

Теперь вы создадите правило перезаписи исходящего трафика, которое перезаписывает заголовок РАСПОЛОЖЕНИЯ HTTP в ответах перенаправления, чтобы добавить обратно папку приложения в URL-путь и заменить имя узла.

  1. На странице представления функций перезаписи URL-адресов main выберите "Добавить правила", а затем выберите "Пустое правило" в категории "Правила для исходящего трафика".
  2. На странице "Изменение правила для исходящего трафика" присвойте правилу имя "Перезаписать заголовок расположения".
  3. В раскрывающемся списке "Предварительное условие" выберите "<Создать новое предварительное условие>".
  4. В диалоговом окне "Добавление предварительного условия" назовите предварительное условие IsRedirection.
  5. Выберите "Добавить", а затем введите {RESPONSE_STATUS} в качестве входных данных условия и "3\d\d" в качестве шаблона. Это предварительное условие используется для проверка, если ответ содержит код состояния перенаправления, например 301, 302, 307 и т. д. Диалоговое окно предварительного условия должно выглядеть примерно так:
    Снимок экрана: фигурные фигурные скобки RESPONSE подчеркивания STATUS фигурные скобки, заданные в качестве входных данных, и 3 обратных косых скобок d, заданных в качестве шаблона.
  6. Нажмите кнопку ОК , чтобы вернуться на страницу Изменение правила для исходящего трафика .
  7. В поле Группа Соответствие используйте раскрывающийся список Сопоставление область, чтобы выбрать Переменная сервера.
  8. Введите RESPONSE_Location в поле "Имя переменной" и "^http://[^/]+/(.*)" в поле "Шаблон". Это настраивает правило для работы с http-заголовком ответа "Расположение" и сопоставлять его значение с шаблоном регулярных выражений, в котором URL-путь сохраняется в обратной ссылке.
  9. Разверните поле группы "Условия", выберите "Добавить" и введите {ORIGINAL_HOST} в качестве входных данных условия и ".+" в качестве шаблона условия. Это условие проверяет, существует ли временная переменная сервера ORIGINAL_HOST и имеет ли она непустое значение.
  10. Выберите Добавить еще раз и добавьте другое условие. Задайте для входных данных условия значение {URL} , а для шаблона — "^/(webmail|payroll)/.*". Это регулярное выражение используется для сопоставления URL-путей, которые начинаются с /webmail или /payroll. Кроме того, круглые скобки в шаблоне захватывают часть совпадающей строки URL-адреса, чтобы ее можно было повторно использовать при создании URL-адреса замены.
  11. Наконец, в поле группы "Действие" выберите действие "Перезаписать" и введите "http://{ORIGINAL_HOST}/{C:1}/{R:1}" в качестве значения. Это действие заменяет значение заголовка РАСПОЛОЖЕНИЕ HTTP строкой, созданной с помощью имени узла из переменной сервера, обратной ссылки условия, содержащей префикс папки URL-пути, и обратной ссылки правила, содержащей текущий URL-путь в заголовке Location.

Полная страница должна выглядеть следующим образом:

Снимок экрана: панель

Тестирование правила

Чтобы убедиться, что правила работают правильно, откройте веб-браузер и отправьте запрос к http://localhost/webmail/index.aspx. Браузер должен быть перенаправлен на страницу http://localhost/webmail/default.aspx:

Снимок экрана: веб-браузер с исходным url-адресом, перенаправляющимся на новый url-адрес.

Сводка

В этом пошаговом руководстве:

  • Вы узнали, как использовать несколько новых функций в перезаписи URL-адресов 2.0 для реализации полнофункциональный сценарий обратного прокси-сервера.
  • Вы настроили правило входящего трафика для переадресации запросов на внутренний сервер содержимого и задания временной переменной сервера.
  • Затем вы определили правило для исходящего трафика, которое изменяет заголовок РАСПОЛОЖЕНИЯ HTTP в ответе перенаправления, созданном веб-приложением с серверного содержимого.