Condividi tramite


Modifica delle intestazioni di risposta HTTP

di Ruslan Kashšev

Questa sezione della documentazione si applica al modulo di riscrittura URL versione 2.0 per IIS 7.

Questa procedura dettagliata illustra come usare il modulo di riscrittura URL v 2.0 per impostare le intestazioni di risposta HTTP.

Prerequisiti

Questa procedura dettagliata richiede i prerequisiti seguenti:

  1. IIS 7 o versione successiva con ASP.NET servizio ruolo abilitato;
  2. URL Rewrite Module 2.0 Release Candidate installato;
  3. Completata la procedura dettagliata sul proxy inverso con URL Riscrivi v2 e Routing delle richieste dell'applicazione.

Introduzione

URL Rewrite Module 2.0 fornisce il supporto per la riscrittura basata su regole delle intestazioni HTTP di risposta. Uno scenario di utilizzo molto comune per l'impostazione delle intestazioni di risposta consiste nel modificare la risposta di reindirizzamento generata da un'applicazione dietro un servizio di bilanciamento del carico o un proxy inverso. Ad esempio, quando un'applicazione dietro un proxy inverso restituisce una risposta di reindirizzamento, l'intestazione Percorso HTTP nella risposta potrebbe non rappresentare l'indirizzo con connessione Internet, ma piuttosto un indirizzo interno dell'applicazione. Il modulo di riscrittura URL 2.0 può essere usato nel server proxy inverso per modificare l'intestazione Location nella risposta. Lo scenario è rappresentato nel diagramma seguente:

Diagramma che mostra il processo di risposta di reindirizzamento tra il client, il server proxy inverso e il server client interno.

  1. Un client HTTP effettua una richiesta a una pagina http://www.contoso.com/webmail/oldpage.aspxWeb.
  2. Il server proxy inverso usa URL Rewrite 2.0 e Application Request Routing per inoltrare la richiesta a un server di contenuto interno in base al nome della cartella nel percorso URL richiesto. Ad esempio, http://webmail/oldpage.aspx;
  3. L'applicazione Web in esecuzione nel server del contenuto genera una risposta di reindirizzamento (HTTP/1.1 301) che punta a un client HTTP a http://webmail/newpage.aspx;
  4. Il server proxy inverso usa URL Rewrite 2.0 per sostituire il percorso di reindirizzamento basato su interno nella risposta con il percorso di reindirizzamento basato su Internet: http://www.contoso.com/webmail/newpage.aspx.

Configurazione di uno scenario di procedura dettagliata

Per configurare lo scenario della procedura dettagliata, completare la procedura dettagliata sul proxy inverso con la riscrittura dell'URL v2 e il routing delle richieste di applicazione. Al termine di questa procedura dettagliata, è necessario disporre di un sito Web proxy inverso che instrada le richieste a due applicazioni di contenuto: webmail e retribuzione.

Per questa procedura dettagliata, è necessario aggiungere una logica di reindirizzamento all'applicazione webmail. In uno scenario reale, probabilmente si tratta di un reindirizzamento avviato dal codice dell'applicazione Web, ma, per semplicità, in questa procedura dettagliata si userà una regola di reindirizzamento nel modulo di riscrittura URL.

  1. Creare un file denominato web.config nella cartella seguente:

    %SystemDrive%\inetpub\webmail
    
  2. Aprire il file in un editor di testo, incollare il codice XML seguente all'interno e quindi salvare il file:

    <?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>
    

    Si tratta di una regola che reindirizzerà tutte le richieste per index.aspx a default.aspx.

Aprire ora un Web browser e effettuare una richiesta http://localhost/webmail/index.aspx. Si noti che il browser è stato reindirizzato a http://localhost:8081/default.aspx, che è fondamentalmente un URL interno usato dall'applicazione Webmail. A questo punto si configureranno le regole di riscrittura URL per modificare l'intestazione Percorso HTTP nelle risposte di reindirizzamento HTTP in modo che il browser venga reindirizzato a un URL appropriato: http://localhost/webmail/default.aspx.

Modifica della regola in ingresso per mantenere l'intestazione host

Per poter modificare l'intestazione Percorso HTTP, è necessario mantenere il valore originale dell'intestazione host HTTP. La regola di riscrittura in uscita usa il valore mantenuto durante la modifica della risposta. Per mantenere il valore originale, archiviarlo in una variabile del server temporanea ORIGINAL_HOST.

  1. Nella pagina principale della visualizzazione delle funzionalità di riscrittura URL selezionare Visualizza variabili server nel riquadro Azioni sul lato destro:
    Screenshot di Visualizza variabili del server in Gestisci variabili del server nel riquadro Azioni.
  2. Nella pagina Variabili server consentite selezionare Aggiungi e quindi immettere il nome della variabile server che verrà usata per archiviare temporaneamente il valore dell'intestazione host HTTP. Ad esempio, ORIGINAL_HOST:
    Screenshot del nome della variabile server impostato su HOST di sottolineatura ORIGINALE.
  3. Selezionare OK per salvare le modifiche e quindi tornare alla pagina principale della visualizzazione delle funzionalità di riscrittura URL. Successivamente, selezionare la regola in ingresso "Proxy inverso a webmail" e selezionare Modifica.
  4. Nella pagina Modifica regola in ingresso espandere la casella di gruppo "Variabili server". selezionare quindi Aggiungi e immettere "ORIGINAL_HOST" per il nome della variabile del server e "{HTTP_HOST}" per "Valore":
    Screenshot della pagina Modifica regola in ingresso con l'opzione Imposta valore variabile server impostata su parentesi graffa H T T P sottolineatura HOST parentesi graffa.

Creazione di una regola in uscita per modificare l'intestazione della risposta HTTP

A questo punto si creerà una regola di riscrittura in uscita che riscrive l'intestazione Percorso HTTP nelle risposte di reindirizzamento per aggiungere nuovamente la cartella dell'applicazione al percorso URL e per sostituire il nome host.

  1. Nella pagina principale della visualizzazione delle funzionalità di riscrittura URL selezionare "Aggiungi regole" e quindi selezionare "Regola vuota" nella categoria "Regole in uscita".
  2. Nella pagina "Modifica regola in uscita" assegnare alla regola il nome "Rewrite Location Header".
  3. Nell'elenco a discesa "Pre-condition" scegliere "Create New Pre-Condition>" (<Crea nuova condizione preliminare).
  4. Nella finestra di dialogo "Aggiungi condizione preliminare" assegnare alla condizione il nome "IsRedirection"
  5. Selezionare "Aggiungi" e quindi immettere {RESPONSE_STATUS} come input di condizione e "3\d\d" come modello. Questa pre-condizione viene usata per verificare se la risposta ha un codice di stato di reindirizzamento, ad esempio 301, 302, 307 e così via. La finestra di dialogo pre-condizione dovrebbe essere simile alla seguente:
    Screenshot della parentesi graffa RESPONSE sottolineatura STATUS con parentesi graffa impostata come input e 3 barre rovesciata d barra rovesciata impostata come modello.
  6. Selezionare OK per tornare alla pagina Modifica regola in uscita .
  7. Nella casella Gruppo corrisponde utilizzare l'elenco a discesa Ambito corrispondente per selezionare Variabile server.
  8. Immettere RESPONSE_Location per "Nome variabile" e "^http://[^/]+/(.*)" per "Pattern". In questo modo la regola viene configurata in modo che funzioni sull'intestazione HTTP di risposta "Location" e corrisponda al relativo valore rispetto a un modello regex che archivia il percorso URL in un back-reference.
  9. Espandere la casella di gruppo "Condizioni", selezionare "Aggiungi" e immettere {ORIGINAL_HOST} come input di condizione e ".+" come modello di condizione. Questa condizione controlla se la variabile del server temporanea ORIGINAL_HOST esiste e ha un valore non vuoto.
  10. Selezionare Aggiungi un'altra volta e aggiungere un'altra condizione. Impostare l'input della condizione su {URL} e il modello su "^/(webmail|payroll)/.*". Questa espressione regolare viene usata per trovare le corrispondenze con i percorsi URL che iniziano con /webmail o /payroll. Inoltre, la parentesi all'interno del modello acquisisce la parte della stringa URL corrispondente, in modo che possa essere riutilizzata durante la costruzione dell'URL sostitutivo.
  11. Infine, nella casella di gruppo "Azione" scegliere l'azione "Riscrivi" e immettere "http://{ORIGINAL_HOST}/{C:1}/{R:1}" come valore. Questa azione sostituisce il valore dell'intestazione Percorso HTTP con una stringa costruita usando il nome host della variabile server, il back-reference della condizione che contiene il prefisso della cartella del percorso URL e il riferimento indietro della regola che contiene il percorso URL corrente nell'intestazione Location.

La pagina completa sarà simile alla seguente:

Screenshot del riquadro Modifica regola in uscita con HOST ORIGINALE e U R L impostato come input della condizione.

Test della regola

Per verificare che le regole funzionino correttamente, aprire un Web browser e effettuare una richiesta a http://localhost/webmail/index.aspx. Il browser dovrebbe essere reindirizzato a http://localhost/webmail/default.aspx:

Screenshot di un Web browser con il reindirizzamento U R L originale al nuovo U R L.

Riepilogo

In questa procedura dettagliata:

  • Si è appreso come usare diverse nuove funzionalità in URL Rewrite 2.0 per implementare uno scenario proxy inverso completamente funzionale.
  • È stata configurata la regola in ingresso per inoltrare le richieste a un server di contenuto back-end e per impostare una variabile server temporanea.
  • È stata quindi definita una regola in uscita che modifica l'intestazione Percorso HTTP nella risposta di reindirizzamento generata dall'applicazione Web dal server di contenuto back-end.