Bagikan melalui


Penulisan Ulang url IIS dan Perutean ASP.NET

oleh Ruslan Yakushev

Dengan rilis Modul Penulisan Ulang URL untuk IIS dan dimasukkannya perutean ASP.NET ke dalam .NET Framework 4, ada banyak pertanyaan dari pengembang ASP.NET tentang bagaimana kedua fitur ini berhubungan satu sama lain dan kapan Anda harus menggunakan satu atau yang lain. Dokumen ini menjelaskan perbedaan antara kedua teknologi ini dan memberikan panduan bagi pengembang Web tentang kapan menggunakan penulisan ulang URL IIS dan kapan harus menggunakan perutean ASP.NET.

Dari perspektif tingkat tinggi, sepertinya teknologi ini menyediakan fungsionalitas yang sangat mirip --keduanya memungkinkan aplikasi Web Anda memiliki URL yang ramah pengguna dan ramah mesin pencari. Namun, ada perbedaan mendasar antara kedua teknologi ini yang penting untuk dipahami untuk membuat keputusan yang tepat tentang apa yang harus digunakan untuk aplikasi Web Anda. Untuk membantu Anda memahami perbedaan tersebut, pertama-tama kami akan menjelaskan bagaimana penulisan ulang URL IIS dan ASP.NET pekerjaan perutean.

Penulisan Ulang URL IIS

Ide dasar penulisan ulang URL bukanlah konsep baru. Ini diperkenalkan di server Web Apache sekitar satu dekade yang lalu. Sejak itu telah terbukti menjadi alat yang sangat berguna untuk administrator server Web dan pengembang Web. Banyak aplikasi populer yang dihosting di Apache sekarang mengandalkan penulisan ulang URL untuk mengaktifkan dukungan untuk URL "bersih".

Konsep penulisan ulang URL sederhana. Ketika klien mengirim permintaan ke server Web untuk URL tertentu, modul penulisan ulang URL menganalisis URL yang diminta dan mengubahnya ke URL yang berbeda di server yang sama. Modul penulisan ulang URL berjalan di awal alur pemrosesan permintaan, memodifikasi URL yang diminta sebelum server Web memutuskan handler mana yang akan digunakan untuk memproses permintaan. Handler, yang dipilih berdasarkan URL yang ditulis ulang, memproses permintaan dan menghasilkan respons yang dikirim kembali ke browser Web. Klien yang meminta tidak pernah melihat URL yang ditulis ulang; sejauh menyangkut klien, klien telah menerima respons dari URL asli.

Dalam hal arsitektur IIS, proses ini diwakili oleh diagram berikut:

Diagram proses Penulisan Ulang I I S U R L dari Permintaan H T T P ke Respons H T T P.

Modul Penulisan Ulang URL adalah modul kode asli yang dicolokkan ke alur pemrosesan permintaan pada tahap Permintaan Pra-mulai atau Mulai Permintaan, lalu mengevaluasi jalur URL yang diminta dengan menggunakan serangkaian aturan penulisan ulang. Setiap aturan penulisan ulang menganalisis jalur URL dan, jika semua kondisi aturan terpenuhi, mengubah jalur asli ke jalur baru. Setelah semua aturan dievaluasi, modul Penulisan Ulang URL menghasilkan jalur URL akhir yang digunakan untuk permintaan melalui sisa pemrosesan alur IIS. Ini berarti bahwa pemilihan handler dalam alur IIS dibuat berdasarkan URL yang ditulis ulang yang dihasilkan oleh modul Penulisan Ulang URL.

Perutean ASP.NET

ASP.NET perutean adalah mekanisme pengiriman permintaan yang memungkinkan pengembang mengaitkan URL tertentu dengan handler yang dapat memproses permintaan yang dibuat ke URL tersebut. Asosiasi ini dilakukan dengan mendaftarkan "rute" yang menentukan handler mana yang akan dipanggil untuk jalur URL tertentu. Ketika permintaan dibuat ke server Web ASP.NET perutean mencari jalur URL yang diminta dalam daftar rute terdaftar. Jika rute ditemukan, handler yang sesuai untuk rute tersebut dipanggil untuk memproses permintaan tersebut.

Dalam hal arsitektur IIS dan ASP.NET, proses ini diwakili oleh diagram berikut:

Diagram proses perutean A S P dot NET menggunakan Handler I H T T P dari Permintaan ke Respons.

perutean ASP.NET diimplementasikan sebagai modul kode terkelola yang dicolokkan ke alur pemrosesan permintaan IIS pada tahap Resolve Cache (peristiwa PostResolveRequestCache) dan pada tahap Map Handler (peristiwa PostMapRequestHandler). ASP.NET perutean dikonfigurasi untuk dijalankan untuk semua permintaan yang dibuat ke aplikasi Web.

Selama peristiwa PostResolveRequestCache, modul melihat tabel perutean (kumpulan objek rute) untuk rute yang cocok dengan jalur URL yang diminta. Jika kecocokan ditemukan, modul mendapatkan referensi ke handler yang sesuai dengan rute tersebut dan menyimpan referensi sebagai bagian dari konteks HTTP saat ini. Handler bisa menjadi objek .NET Framework apa pun yang mengimplementasikan antarmuka System.Web.IHttpHandler. Jika tidak ada rute yang ditemukan, modul tidak melakukan apa pun, dan URL jatuh dan diproses secara normal (biasanya dengan mencocokkannya dengan file di disk).

Selama peristiwa PostMapRequestHandler, modul memeriksa apakah konteks HTTP berisi informasi apa pun tentang handler. Jika ya, perutean ASP.NET menggunakan informasi untuk mengatur properti Handler dari konteks HTTP saat ini. Ini memastikan bahwa selama tahap Execute Handler, IIS akan menjalankan handler yang dipilih oleh modul perutean. Jika informasi tersebut tidak diatur, maka modul tidak melakukan apa pun dan URL jatuh ke membiarkan IIS membuat pemilihan handler.

Perbedaan Antara Penulisan Ulang URL IIS dan Perutean ASP.NET

Berdasarkan penjelasan di atas, ada perbedaan konseptual utama berikut antara penulisan ulang URL IIS dan perutean ASP.NET:

  1. Penulisan ulang URL digunakan untuk memanipulasi jalur URL sebelum permintaan ditangani oleh server Web. Modul penulisan ulang URL tidak tahu handler mana yang pada akhirnya akan memproses URL yang ditulis ulang. Selain itu, handler permintaan aktual mungkin tidak tahu bahwa URL telah ditulis ulang.
  2. ASP.NET perutean digunakan untuk mengirimkan permintaan ke handler berdasarkan jalur URL yang diminta. Dibandingkan dengan penulisan ulang URL, modul perutean mengetahui tentang handler dan memilih handler yang harus menghasilkan respons untuk URL yang diminta. Anda dapat menganggap perutean ASP.NET sebagai mekanisme pemetaan handler tingkat lanjut.

Selain perbedaan konseptual ini, ada perbedaan fungsi berikut antara penulisan ulang URL IIS dan perutean ASP.NET:

  1. Modul Penulisan Ulang URL IIS dapat digunakan dengan semua jenis aplikasi Web, yang mencakup file ASP.NET, PHP, ASP, dan statis. perutean ASP.NET hanya dapat digunakan dengan aplikasi Web berbasis .NET Framework.
  2. Modul Penulisan Ulang URL IIS bekerja dengan cara yang sama terlepas dari apakah mode alur IIS terintegrasi atau klasik digunakan untuk kumpulan aplikasi. Untuk perutean ASP.NET, lebih baik menggunakan mode alur terintegrasi. ASP.NET perutean dapat berfungsi dalam mode klasik, tetapi dalam hal ini URL aplikasi harus menyertakan ekstensi nama file atau aplikasi harus dikonfigurasi untuk menggunakan pemetaan handler "*" di IIS.
  3. Modul Penulisan Ulang URL IIS dapat membuat keputusan penulisan ulang berdasarkan nama domain, header HTTP, dan variabel server. Secara default, perutean ASP.NET hanya berfungsi dengan jalur URL dan dengan header HTTP-Method.
  4. Selain menulis ulang, modul Penulisan Ulang URL dapat melakukan pengalihan HTTP, mengeluarkan kode status kustom, dan membatalkan permintaan. ASP.NET perutean tidak melakukan tugas-tugas ini.
  5. Modul Penulisan Ulang URL tidak dapat diperluas dalam versinya saat ini. perutean ASP.NET sepenuhnya dapat diperluas dan dapat disesuaikan.

Opsi mana yang harus Anda gunakan?

Apa arti semua informasi ini jika Anda perlu memilih teknologi untuk mengaktifkan URL bersih untuk aplikasi Web Anda? Di bagian ini, kami menjelaskan cara membuat pilihan ini.

Jika aplikasi Web Anda dibangun dengan menggunakan apa pun kecuali ASP.NET, gunakan modul Penulisan Ulang URL IIS. Jika tidak, aturannya adalah:

  1. Jika Anda mengembangkan aplikasi web ASP.NET baru yang menggunakan ASP.NET MVC atau teknologi Data Dinamis ASP.NET , gunakan perutean ASP.NET. Aplikasi Anda akan mendapat manfaat dari dukungan asli untuk URL bersih, termasuk pembuatan URL bersih untuk tautan di halaman Web Anda. Perhatikan bahwa perutean ASP.NET belum mendukung aplikasi Web Forms standar, meskipun ada rencana untuk mendukungnya di masa mendatang.
  2. Jika Anda sudah memiliki aplikasi web ASP.NET warisan dan tidak ingin mengubahnya, gunakan modul Penulisan Ulang URL. Modul Penulisan Ulang URL memungkinkan Anda menerjemahkan URL ramah mesin pencari ke dalam format yang saat ini digunakan aplikasi Anda. Selain itu, ini memungkinkan Anda membuat aturan pengalihan yang dapat digunakan untuk mengalihkan crawler mesin pencari untuk membersihkan URL.

Namun, dalam praktiknya, pilihannya tidak harus baik/atau. Teknologi tersebut dapat digunakan bersama-sama dan dapat saling melengkapi. Di bagian berikut, kami menguraikan beberapa skenario di mana Anda dapat menggunakan perutean ASP.NET dan penulisan ulang URL IIS bersama-sama.

Menerapkan URL kanonis untuk aplikasi Anda.
Anda harus memaksa penggunaan http://www.mysite.com/home/about alih-alih http://mysite.com/Home/About. Saat klien Web meminta URL yang tidak sesuai dengan format yang Anda inginkan, klien dialihkan ke URL kanonis. Dalam skenario ini, Anda dapat menggunakan modul Penulisan Ulang URL untuk menerapkan URL kanonis dan melakukan pengalihan, dan menggunakan perutean ASP.NET untuk memilih handler yang akan memproses jalur URL yang diminta.

Contoh berikut menunjukkan aturan penulisan ulang URL yang bisa Anda gunakan untuk skenario ini:

<rewrite>
    <rules>
        <rule name="Enforce canonical hostname" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
                <add input="{HTTP_HOST}" negate="true" pattern="^www\.mysite\.com$" />
            </conditions>
            <action type="Redirect" url="http://www.mysite.com/{R:1}" redirectType="Permanent" />
        </rule>
    </rules>
</rewrite>

Menyajikan konten statis dari situs atau server yang berbeda.
Aplikasi Web Anda disebarkan di beberapa server sedih sehingga konten Web dinamis terletak di satu situs atau server dan semua konten statis berada di situs atau server yang berbeda. Anda dapat menggunakan modul Penulisan Ulang URL bersama dengan modul Perutean Permintaan Aplikasi IIS untuk meneruskan semua permintaan file statis ke server yang berbeda, sambil melayani semua permintaan untuk halaman Web dinamis dari server saat ini. Dengan cara ini, perutean ASP.NET hanya digunakan untuk konten Web dinamis dan tidak mengevaluasi URL apa pun untuk konten statis.

Contoh berikut menunjukkan aturan penulisan ulang URL yang bisa Anda gunakan untuk skenario ini:

<rewrite>
    <rules>
        <rule name="Forward to static file server">
            <match url="^.+\.(?:jpg|bmp|gif)$" />
            <action type="Rewrite" url="http://static_file_server/{R:0}" />
        </rule>
    </rules>
</rewrite>

Manajemen konten statis.
Saat file atau folder statis Dipindahkan ke lokasi baru, Anda masih dapat mendukung URL lama karena alasan kompatibilitas mundur. Bahkan, Anda mungkin tidak ingin pengunjung situs Web mengetahui bahwa file atau folder telah dipindahkan. Dalam hal ini Anda dapat menggunakan modul Penulisan Ulang URL untuk menulis ulang jalur untuk file statis, sementara semua URL ke halaman web ASP.NET dinamis Anda ditangani oleh modul perutean.

Contoh berikut menunjukkan aturan penulisan ulang URL yang bisa Anda gunakan untuk skenario ini:

<rewrite>
    <rules>
        <rule name="Rewrite to new folder">
            <match url="^Images/(.+)$" />
            <action type="Rewrite" url="NewImages/{R:1}" />
        </rule>
    </rules>
</rewrite>

Meminta pemblokiran.
Modul Penulisan Ulang URL dapat digunakan untuk memblokir permintaan tertentu berdasarkan berbagai kriteria. Misalnya, Anda bisa mencegah perayap situs tertentu mengakses jalur URL tertentu di situs Web Anda. Dengan begitu, permintaan terlarang bahkan tidak akan sampai ke router ASP.NET, sehingga mengurangi beban di server Web Anda.

Contoh berikut menunjukkan aturan penulisan ulang URL yang bisa Anda gunakan untuk memblokir perayap situs yang tidak diinginkan. Perhatikan bahwa permintaan diblokir untuk jalur URL tertentu berdasarkan header HTTP agen pengguna atau berdasarkan alamat IP klien:

<rewrite>
    <rules>
        <rule name="Block SomeRobot" stopProcessing="true">
            <match url="^folder1/folder2" />
            <conditions logicalGrouping="MatchAny">
                <add input="{USER_AGENT}" pattern="SomeRobot" />
                <add input="{REMOTE_ADDR}" pattern="201\.45\.33\.[0-5]" />
            </conditions>
            <action type="AbortRequest" />
        </rule>
    </rules>
</rewrite>

Arah Masa Depan

Meskipun penulisan ulang URL IIS dan perutean ASP.NET memiliki beberapa tumpang tindih fungsi, mereka membahas skenario yang unik untuk setiap teknologi. Karena itu, kedua teknologi ini akan terus ada dan berkembang sebagai komponen independen di IIS, dengan potensi integrasi yang lebih ketat di antara mereka. Misalnya, perutean ASP.NET dapat memanfaatkan beberapa alat kaya yang disediakan dengan modul Penulisan Ulang URL. Modul Penulisan Ulang URL dapat lebih terintegrasi dengan ASP.NET dalam hal memberikan ekstensibilitas untuk menyesuaikan logika penulisan ulang URL.

Kesimpulan

Penulisan ulang URL IIS atau perutean ASP.NET dapat digunakan untuk menerapkan skenario manipulasi URL untuk aplikasi Web Anda. ASP.NET perutean adalah solusi yang dioptimalkan untuk ASP.NET, sehingga mungkin lebih baik bagi pengembang Web yang merancang aplikasi ASP.NET mereka dari bawah ke atas dan ingin memiliki struktur URL yang bersih. Penulisan ulang URL IIS adalah mekanisme manipulasi URL generik yang membahas banyak skenario. Secara khusus, ini dapat digunakan oleh pengembang Web serta administrator server/situs Web untuk mengaktifkan URL bersih untuk aplikasi Web yang ada tanpa memodifikasi kode aplikasi.