Bagikan melalui


HTTP/2 di IIS

oleh David So

Kompatibilitas

Versi Catatan
IIS 10.0 Dukungan HTTP/2 diperkenalkan di IIS 10.0
IIS 8.5 dan yang lebih lama HTTP/2 tidak didukung sebelum IIS 10.0

Apa itu HTTP/2?

HTTP/2 adalah pengerjaan ulang bagaimana semantik HTTP mengalir melalui koneksi TCP, dan dukungan HTTP/2 ada di Windows 10 dan Windows Server 2016. HTTP/2 adalah peningkatan besar setelah hampir dua dekade penggunaan HTTP/1.1 dan mengurangi dampak latensi dan beban koneksi pada server web.

Kemajuan utama HTTP/1.1 adalah penggunaan koneksi persisten untuk melayani beberapa permintaan secara berturut-turut. Dalam HTTP/2, koneksi persisten dapat digunakan untuk melayani beberapa permintaan simultan. Dalam prosesnya, HTTP/2 memperkenalkan beberapa fitur tambahan yang meningkatkan efisiensi HTTP melalui jaringan.

Satu koneksi untuk beberapa permintaan

Setiap koneksi TCP memerlukan perjalanan pulang pergi untuk disiapkan. Jika Anda menggunakan enkripsi, jabat tangan TLS memerlukan 1-2 perjalanan pulang pergi lainnya. Semua ini terjadi sebelum byte pertama respons pertama dapat dikirim. Dengan menggunakan kembali koneksi yang ada alih-alih menyiapkan yang baru, overhead ini dapat dibagikan oleh banyak permintaan. HTTP/2 secara tajam mengurangi kebutuhan permintaan untuk menunggu saat koneksi baru dibuat, atau menunggu koneksi yang ada menjadi menganggur. Karena satu koneksi di-multipleks di antara banyak permintaan, permintaan biasanya dapat segera dikirim tanpa menunggu permintaan lain selesai.

Pemadatan header dengan HPACK

HTTP telah mendukung kompresi data untuk usia. Header, bagaimanapun, dikirim sebagai teks yang tidak dikompresi, dengan banyak redundansi antar permintaan. (Banyak header terpanjang dikirim dengan nilai yang sama persis pada setiap permintaan!) HTTP/2 memperkenalkan HPACK, skema kompresi untuk header HTTP yang mengurangi redundansi antar permintaan.

Pemadatan membantu multipleks, karena permintaan lebih kecil. Ini memungkinkan klien untuk membuat banyak permintaan dalam paket pertama mereka pada koneksi, sementara jendela kontrol alur TCP masih kecil.

Pendorongan server

Permintaan datang dalam pola. Jika klien meminta satu sumber daya, server sering dapat memprediksi bahwa ia akan membutuhkan sumber daya lain yang dirujuk di halaman. Dalam HTTP/1.1, inlining digunakan untuk mengirimkan sumber daya ini kepada klien sebagai bagian dari respons pertama. Inlining memiliki kelemahannya - terutama, bahwa sumber daya inlined tidak dapat di-cache untuk digunakan di halaman lain di mana sumber daya tersebut mungkin juga direferensikan.

HTTP/2 memperkenalkan konsep "push" - server yang merespons permintaan yang belum dibuat klien, tetapi memprediksi klien akan melakukannya. Ini memungkinkan server untuk terus memberikan manfaat latensi inlining, tetapi dalam bentuk yang dapat di-cache dan digunakan kembali klien di halaman lain.

Bagaimana cara menggunakan HTTP/2?

Anda mungkin sudah! Karena Hampir semua browser sudah mendukung HTTP/2 dalam rilis terbaru mereka, dan data saat ini menunjukkan bahwa lebih dari 50% pengguna sudah berada di browser berkemampuan HTTP/2.

Di server, IIS yang berjalan pada Windows 10 atau Windows Server 2016 mendukung HTTP/2.

IIS saat ini hanya mendukung HTTP/2 melalui TLS. Saat membuat koneksi HTTPS ke server web yang menjalankan IIS di Windows 10, HTTP/2 digunakan jika klien dan server mendukungnya. Di IIS, kami telah menerapkan HTTP/2 setransparan mungkin - Anda tidak perlu mengubah apa pun di aplikasi Anda agar HTTP/2 berfungsi. Pengoptimalan HTTP/1.1 tertentu (sharding domain, inlining, dll.) tidak lagi direkomendasikan dalam HTTP/2, jadi Anda harus berencana untuk menghapusnya di masa mendatang.

Bagaimana dengan dorongan?

Karena Server Push adalah fitur baru di HTTP/2, ada API baru yang perlu Anda panggil untuk memanfaatkannya. Saat Anda memanggil PushPromise API di ASP.NET atau API HttpDeclarePush dari modul asli IIS, Anda menyediakan URL dan header permintaan opsional untuk permintaan yang Anda antisipasi pembuatan klien. Jika pendorongan didukung oleh koneksi yang mendasar, dua hal terjadi:

  • PUSH_PROMISE dikirim ke klien, sehingga klien dapat memeriksa apakah sumber daya sudah ada di cache
  • Permintaan baru ditambahkan ke antrean permintaan untuk sumber daya yang didorong

Jika koneksi yang mendasar tidak mendukung pendorongan (klien dinonaktifkan pendorongan, atau klien HTTP/1.1), panggilan tidak melakukan apa pun dan mengembalikan keberhasilan, sehingga Anda dapat dengan aman memanggil API tanpa perlu khawatir tentang apakah dorongan diizinkan.

Pengaturan IIS

Tidak ada pengaturan konfigurasi IIS baru khusus untuk HTTP/2.

Di Pratinjau Teknologi Windows Server 2016, ada penyebutan pengaturan kunci registri 'DuoEnabled'. Ini tidak lagi diperlukan. Seperti disebutkan di atas, asalkan konfigurasi klien dan server mendukung HTTP/2, maka IIS akan menggunakan HTTP/2 (atau fallback ke HTTP/1.1 jika tidak memungkinkan).

Versi Protokol Pengelogan

Pengelogan IIS memiliki bidang 'Versi protokol' yang nonaktif secara default. Mengaktifkan bidang ini berguna jika Anda ingin melacak permintaan mana yang akan melalui HTTP/2, HTTP/1.1 dll.

Di UI Pengelola Layanan Internet, ini dapat ditemukan di bawah fitur Pengelogan , melalui Pilih Bidang.

Gambar halaman Pengelogan I I S menampilkan drop-down Pilih Bidang dengan Versi Protokol C S tanda hubung Versi dipilih dari menu Bidang Pengelogan W 3 C.

Setelah membuat perubahan, klik Terapkan di bawah panel Tindakan di ujung kanan.

Berikut adalah contoh output file log dengan bidang Versi Protokol diaktifkan:

#Software: Microsoft Internet Information Services 10.0
#Version: 1.0
#Date: 2015-08-13 18:46:11
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs-version cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
2015-08-13 18:46:11 ::1 GET / - 443 - ::1 HTTP/2.0 Mozilla/5.0+(Windows+NT+10.0;+WOW64;+Trident/7.0;+Touch;+rv:11.0)+like+Gecko - 200 0 0 391
2015-08-13 18:46:11 ::1 GET /iisstart.png - 443 - ::1 HTTP/2.0 Mozilla/5.0+(Windows+NT+10.0;+WOW64;+Trident/7.0;+Touch;+rv:11.0)+like+Gecko https://localhost/ 200 0 0 100

IIS dengan Http/2 Demo Walkthrough

  1. Jika Anda menjalankan Windows 10, ini dapat ditemukan melalui Program dan Fitur, lalu aktifkan atau nonaktifkan fitur Windows, lalu aktifkan Layanan Informasi Internet. Jika Anda menjalankan Windows Server 2016, luncurkan Manajer Server, lalu Tambahkan peran dan fitur di dasbor , lalu pilih Server Web (IIS) dari daftar.

    Gambar halaman Aktifkan atau nonaktifkan fitur Windows dengan Layanan Informasi Internet dipilih dan disorot.

  2. Setelah penginstalan selesai, luncurkan Pengelola Layanan Internet dan buat sertifikat yang ditandatangani sendiri dengan memilih opsi Sertifikat Server di bawah tampilan Fitur server. Perhatikan bahwa penggunaan sertifikat yang ditandatangani sendiri dalam contoh ini hanya untuk tujuan demo/pengujian (tidak disarankan untuk melindungi situs produksi Anda).

    Gambar tampilan Fitur Server di halaman Pengelola Layanan Internet dengan Sertifikat Server disorot.

    Gambar dialog untuk kotak Nama Tampilan Sertifikat yang Ditandatangani Sendiri dengan opsi Buat Sertifikat yang Ditandatangani Sendiri disorot.

  3. Buka Situs Web Default Anda dan di bawah Pengikatan, buat pengikatan TLS baru dengan sertifikat yang ditandatangani sendiri yang baru saja Anda buat.

    Cuplikan layar kotak dialog untuk Tambahkan Pengikatan Situs dengan Tipe Alamat I P disorot dan Server I S I Lokal dipilih dari menu drop-down.

  4. Luncurkan browser Anda dari komputer Windows 10 atau Windows Server 2016 dan tekan F12, (atau buka Pengaturan dan aktifkan Alat Pengembang F12), lalu beralih ke tab Jaringan. Telusuri https://localhost dan voila, Anda berada di HTTP/2!

    Cuplikan layar Tanda hubung Host Lokal F 12 Developer Tools dengan tab Jaringan ditampilkan dan H T T P 2 dipilih.

Kapan HTTP/2 Tidak Didukung?

Dalam beberapa kasus, HTTP/2 tidak dapat digunakan dalam kombinasi dengan fitur lain. Dalam situasi ini, Windows akan kembali ke HTTP/1.1 dan melanjutkan transaksi. Ini mungkin melibatkan negosiasi HTTP/1.1 selama jabat tangan, atau mengirim kode kesalahan ke klien yang menginstruksikannya untuk mencoba kembali melalui koneksi HTTP/1.1.

  • Autentikasi Windows (NTLM/Kerberos/Negosiasi) tidak didukung dengan HTTP/2. Dalam hal ini IIS akan kembali ke HTTP/1.1.
  • Bersihkan teks - seperti disebutkan di atas, IIS saat ini hanya mendukung HTTP/2 melalui TLS. Sekali lagi, IIS akan kembali ke HTTP/1.1.
  • Pembatasan bandwidth - IIS memiliki fitur untuk membatasi bandwidth (di Inetmgr, pilih situs, 'Batas' di bawah Konfigurasi panel Tindakan). Ini berlaku untuk HTTP/1.1 tetapi tidak diberlakukan untuk HTTP/2 (akan dilanjutkan tanpa kesalahan atau pembatasan bandwidth).

Untuk informasi lebih lanjut

Lihat Http/2 pembicaraan Build 2015 di Windows 10: Browser, Aplikasi, dan Server Web untuk diskusi http/2 yang lebih mendalam dan implementasi klien dan server di Windows.

Penulis: Mike Bishop, David So (dengan kontribusi dari dan pengakuan kepada Rob Trace, Baris Caglar, Nazim Lala)