Изменение заголовков ответа 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 Rewrite 2.0 для замены адреса перенаправления, основанного на внутреннем сервере, в ответе на адрес перенаправления, основанный на Интернете: http://www.contoso.com/webmail/newpage.aspx.

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

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

Для этого пошагового руководства вам потребуется добавить логику перенаправления в приложение веб-почты. В реальных условиях перенаправление, вероятно, будет инициировано кодом веб-приложения. Однако для простоты в этом пошаговом руководстве вы будете использовать правило перенаправления в модуле перезаписи 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 location, необходимо сохранить исходное значение заголовка узла HTTP. Правило переопределения исходящего трафика использует сохраненное значение при изменении ответа. Чтобы сохранить исходное значение, сохраните его во временной переменной сервера ORIGINAL_HOST.

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

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

Теперь вы создадите правило перезаписи, которое изменяет заголовок HTTP Location в ответах перенаправления, чтобы восстановить папку приложения в пути URL и заменить имя хоста.

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

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

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

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

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

Скриншот веб-браузера с перенаправлением с исходного URL на новый URL.

Сводка

В этом пошаговом руководстве выполните следующее:

  • Вы научились использовать несколько новых функций в URL Rewrite 2.0 для реализации одного полнофункционального сценария обратного прокси-сервера.
  • Вы настроили входящее правило для пересылки запросов на сервер для обработки содержимого и установки временной серверной переменной.
  • Затем вы определили правило исходящего трафика, которое изменяет заголовок HTTP-расположения в ответе перенаправления, созданном веб-приложением из внутреннего сервера содержимого.