Saat membahas isi objek Request, salah satu koleksi yang akan dipelajari adalah koleksi ServerVariables. Kumpulan ini berisi kombinasi nilai dalam header HTTP yang dikirim dari klien ke server dengan permintaan halaman, dan nilai yang diberikan oleh server itu sendiri saat menerima permintaan.
Nilai yang dikembalikan oleh
halaman "referensi mandiri"
di koleksi ServerVariables berisi rincian server web dan informasi jalur halaman saat ini.Informasi ini dapat digunakan di mana pun Anda membuat halaman. Misalnya, untuk membuat halaman "referensi mandiri" yang dapat memanggil dirinya sendiri lagi untuk menyelesaikan tugas lain, kita dapat menggunakan kode berikut:
<FORM ACTION="<% = Request.ServerVariables("PATH_INFO") %>" METHOD= "POST ”>
Efek yang sama dapat diperoleh dengan nilai HTTP “SCRIPT_NAME”:
<FORM ACTION="<% = Request.ServerVariables(“SCRIPT_NAME”) %>” METHOD="POST”>
Gunakan elemen <A> untuk buka halaman lain, Anda dapat menggunakan:
...
<%
strFullPath = Permintaan.ServerVariables("PATH_INFO")
'Hapus nama file
strPathOnly = Kiri(strFullPath, InStrRev(strFullPath, “/”))
strNextPage = strPathOnly & “halaman/halaman_berikutnya.asp”
%>
...
<A HREF=”<% = strHalaman Berikutnya %>”>Halaman Berikutnya</A>
...
contoh-contoh ini berfungsi meskipun nama atau lokasi halaman asli berubah, karena informasi jalur halaman saat ini digunakan (tentu saja, contoh kedua gagal ketika nama halaman target yang dilepas berubah).
Dengan kata lain, jika URL dibuat secara otomatis untuk sub-sesi mesin pencari, beberapa nilai ServerVariable dapat dikumpulkan:
strFullURL = http:// & Request.ServerVariables("LOCAL_ADDR") _
& ":" & Permintaan.ServerVariables("SERVER_PORT") _
& Request.ServerVariables("PATH_INFO")
Ini akan membuat URL lengkap termasuk nomor port (dalam hal ini, bukan nilai standar 80). Misalnya, hasilnya mungkin:
http://194.74.60.254:1768/thispath/thispage.asp
Mendeteksi versi browser
Nilai berguna lainnya dalam koleksi ServerVariables adalah string agen pengguna browser pengguna. Pada halaman "Mendeteksi Jenis Browser" (browsertype.asp), nilai "HTTP_USER_AGENT" dalam koleksi ServerVariables digunakan untuk mendapatkan string agen pengguna. Beberapa skrip digunakan untuk menguraikan informasi ini dan menemukan nama pabrikan dan versi browser.
<%
strUA = Permintaan.ServerVariables("HTTP_USER_AGENT")
Respon.Tulis “String Agen Pengguna adalah <B>” & strUA & “</B>
"
Jika InStr(strUA, “MSIE”) Lalu
Tanggapan.Tulis “Untuk meningkatkan versi browser Anda, buka “_
& “<A HREF=” & Chr(34) & http://www.microsoft.com/ie/ ”_
& Bab(34) & “> http://www.microsoft.com/ie/ <A>
"
intVersion = Cint(Mid(strUA, InStr(strUA, “MSIE”) + 5, 1))
Jika intVersion >=4 Lalu
Response.Tulis “Anda dapat menggunakan Microsoft Dynamic HTML”
Akhiri Jika
Kalau tidak
Jika InStr(strUA, “Mozilla”) Lalu
Jika InStr(strUA, “kompatibel;”) = 0 Maka
Response.Tulis “Browser Anda mungkin Navigator.
& “unduh Navigator versi terbaru dari “_
& “<A HREF=” & Chr(34) & http://home.netscape.com/ ”_
& “unduh/”& Bab(34) & “> http://home.netscape.com ”_
& “/unduh/</A>
"
intVersion = Cint(Mid(strUA, InStr(strUA, “/”) +1, 1))
Jika intVersion >= 4 Maka
Response.Tulis “Anda mungkin dapat menggunakan Netscape Dynamic HTML”
Akhiri Jika
Kalau tidak
strVersion = Pertengahan(strUA, InStr(strUA, “kompatibel;”) + 12)
strProduk = Kiri(strVersion, InStr(strVersion, “ “))
Respon.Tulis “Browser Anda kompatibel dengan Navigator, Anda bisa”_
& “cari produsennya menggunakan mesin pencari, seperti”_
& “<A HREF=" & Bab(34) _
& “http://www.altavista.digital.com/cgi-bin/query?q=”_
&strProduk_
& Bab(34) & “> http://www.altavista.com/ </A>
"
Akhiri Jika
Akhiri Jika
Akhiri Jika
%>
Hasil pencarian untuk IE 5.0 dan Navigator 4.61 masing-masing berbeda. Untuk browser dari pabrikan lain, Anda bisa mendapatkan tautan untuk mulai mencari nama pabrikan secara otomatis di situs Web Alta Vista.
Perhatikan bahwa Netscape tidak memberikan nama pabrikan dalam string agen pengguna, jadi tidak ada jaminan mutlak bahwa browser tersebut adalah Navigator.
Mendeteksi bahasa browser
Nilai berguna lainnya dalam koleksi ServerVariables adalah "HTTP_ACCEPT_LANGUAGE", yang berisi kode bahasa yang ditentukan saat browser diinstal, atau dikodekan ke dalam versi regional pengguna. Contoh kode bahasa adalah en-us (Inggris, AS), de-at (Jerman, Australia) dan es-pe (Spanyol, Peru).
Kode bahasa bisa bersifat umum dan menghilangkan pengenal dialek: misalnya, di situs kami Wrox, banyak pengunjung menggunakan en (Bahasa Inggris) sebagai kode bahasa.
Oleh karena itu, kode bahasa dapat dideteksi dan versi halaman spesifik wilayah atau bahasa tertentu dimuat secara otomatis.
StrLocale = Lcase(Kiri(Request.ServerVariables("HTTP_ACCEPT_LANGUAGE"),2))
Pilih Kasus strLocale
Kasus “en”: Respons.Redirect “http://uk_site.co.uk/”
Kasus “de”: Respons.Redirect “http://de_site.co.de/”
Kasus “fr”: Respons.Redirect “http://fr_site.co.fr/”
'...dll
Kasus Lain: Respon.Redirect “http://us_sitel.com/”
Akhir Pilih
atau alihkan halaman berdasarkan dialek tertentu:
strLocale = Lcase(Request.ServerVariables("HTTP_ACCEPT_LANGUAGE"))
Pilih Kasus strLocale
Kasus “en-gb”: Response.Redirect “http://uk_site.co.uk/”
Kasus “en-us”: Response.Redirect “http://us_site.com/”
Kasus “es-pe”: Respons.Redirect “http://es_site2.co.pe/”
'...
Kasus Lain: Response.Redirect “http://us_site1.com/”
Pilihan Akhir
Nilai koleksi ServerVariables berguna lainnya
dapat mengakses dan menggunakan anggota mana pun dari koleksi ServerVariables untuk mengontrol cara halaman ASP merespons permintaan. Anda dapat memeriksa apakah pengunjung mengakses situs menggunakan port default 80 atau yang lain. Dalam contoh ini, cari akses melalui port 443 - yang menyediakan akses Secure Socket Layer (SSI) (dan protokol lainnya) - dan arahkan ke halaman yang sesuai.
Jika Request.ServerVariables("SERVER_PORT") = "443") Lalu
Response.Redirect "/securesite/default.asp" 'Pengguna yang aman
Kalau tidak
Response.Redirect “/normalsite/default.asp” 'Pengguna tidak aman
Akhir Jika
jika browser diminta untuk mendaftar dan diverifikasi oleh server (daripada mengizinkan mereka mengakses secara anonim di bawah akun IUSER server web, masalah ini akan dibahas secara rinci di bab selanjutnya), nama pengguna dapat berupa ditanyakan untuk menentukan pengguna yang berurusan dengan kami Siapa itu dan apakah akan memuat halaman untuk pengguna ini. Misalnya, kode berikut hanya akan menampilkan link administrasi ke pengguna bernama Administrator.
...
<A HREF=”dispcnfg.asp”>Ubah Konfigurasi Tampilan</A>
<A HREF=”dispcolr.asp”>Ubah Warna Tampilan</A>
<A HREF=”keyboard.asp”>Ubah Konfigurasi Keyboard</A >
<%
Jika Permintaan.ServerVariables("AUTH_USER") _
= Ucase(Request.ServerVariables(“SERVER_NAME”)) & “Administrator” Lalu
%>
<A HREF=”allusers.asp”>Mengelola Semua Pengguna</A>
<A HREF=”usrlogon.asp”>Mengelola Informasi Masuk</A>
<%
Akhiri Jika
%>
...
perhatikan bahwa ASP tidak mengisi koleksi ServerVariables sampai Anda mengakses salah satu anggotanya. Mengakses anggota koleksi ini untuk pertama kalinya akan menyebabkan IIS mendapatkan semuanya, koleksi ServerVariables hanya boleh digunakan bila diperlukan.
Teknik Permintaan dan Respon Lainnya
Sekarang, mari kita lihat beberapa teknik yang berguna untuk menggunakan objek Permintaan dan Respons, termasuk:
· Manajemen koneksi, buffering, dan pengalihan halaman.
· Pengoperasian header HTTP, caching dan halaman "kedaluwarsa".
· Memanfaatkan sertifikat klien.
· Buat pesan file log yang disesuaikan.
1. Manajemen koneksi, buffering dan pengalihan halaman
Fitur ASP yang sangat berguna adalah memungkinkan pengguna untuk mengalihkan dari satu halaman web ASP ke halaman web lain (ASP atau HTML), atau ke file sumber lain (seperti file ZIP atau teks berkas) ). Ini transparan bagi pengguna, sebenarnya browserlah yang melakukan pekerjaannya. Saat menggunakan metode Response.Redirect untuk memuat halaman web baru, header HTTP khusus sebenarnya dikirim kembali ke klien. Header ini adalah:
HTTP/1.1 302 Objek Dipindahkan
Lokasi /newpath/newpage.asp
Browser membaca informasi header ini dan memuat halaman sesuai arahan nilai Lokasi. Fungsinya sama dengan menggunakan tag <META> HTML sisi klien di halaman Web, misalnya:
<META HTTP-EQUIV="REFRESH" CONTENT="0;URL=/newpath/newpage.asp">
Ini membawa a Masalahnya adalah server proxy antara server dan pengguna mungkin memberikan pesannya sendiri yang berisi link ke halaman baru, daripada memuat halaman baru secara langsung. Dan browser dapat melakukan pekerjaan yang sama tergantung pada pabrikan dan versinya. Hal ini menghilangkan transparansi yang seharusnya dan membuat akses situs Anda menjadi lebih rumit bagi pengguna karena mereka terus menerima pesan kesalahan.
Setelah mengirimkan konten halaman apa pun seperti teks atau HTML, kami tidak dapat lagi menggunakan metode Redirect. Namun, salah satu cara yang tampaknya membatasi "dampak server proxy" adalah dengan terlebih dahulu memastikan bahwa tidak ada output (termasuk header HTTP) yang dikirim ke klien. Di ASP 2.0, Anda harus mengaktifkan buffering dan kemudian menggunakan metode Clear untuk menghapus buffer:
Response.Buffer = True
'Beberapa syarat untuk memilih halaman yang sesuai:
Jika Request.ServerVariables("SERVER_PORT") = 1856 Lalu
StrNewPage = “/newpath/this_page.asp”
Kalau tidak
StrNewPage = “/newpath/the_other_page.asp”
Akhiri Jika
Respon. Jelas
Response.Redirect strNewPage
Di ASP 3.0, buffering diaktifkan secara default, sehingga baris pertama dapat diabaikan, tetapi tidak berbahaya dan memastikan bahwa halaman web kita akan tetap berfungsi bahkan di lingkungan ASP 2.0.
Daripada menggunakan pengalihan header HTTP jenis ini, lebih baik menggunakan fitur baru ASP 3.0, yang memungkinkan kita mengonversi untuk mengeksekusi halaman web lain melalui metode Transfer objek Server. Kami akan mempelajari masalah ini lebih lanjut di masa mendatang .
1) Buffer halaman ASP
Seperti yang Anda lihat, buffer halaman ASP 3.0 diaktifkan secara default di IIS 5.0, dan dimatikan secara default di versi sebelumnya. Microsoft memberi tahu kita bahwa buffering memberikan pengiriman halaman web yang lebih efisien di IIS 5.0, itulah sebabnya status buffering default telah diubah. Dalam kebanyakan kasus, hal ini tidak berpengaruh pada kita. Namun, jika Anda memiliki halaman web yang sangat besar, atau halaman web yang memerlukan waktu cukup lama untuk dibuat menggunakan ASP atau kode dan komponen sisi server lainnya, setelah bagian-bagiannya selesai, kami dapat menyegarkannya secara batch ke klien:
.. .
... Kode untuk membuat bagian pertama halaman
...
Respon. Siram
...
... Kode untuk membuat bagian halaman selanjutnya
...
Respon. Siram
...
terkadang Anda mungkin ingin menghentikan eksekusi kode di beberapa titik sebelum akhir halaman, dengan memanggil metode End untuk menyegarkan semua konten saat ini ke klien dan membatalkan pemrosesan lebih lanjut.
...
... Kode untuk membuat bagian pertama halaman
Jika strUserName = "" Maka Respon.Clear
...
... Kode untuk membuat versi baru dari bagian halaman ini
...
Berikut adalah dua contoh halaman web yang menunjukkan buffering dan pengalihan, yang dapat diunduh dari halaman utama "Objek Respons" (sow_response.asp). Halaman web contoh Response.Redirect pertama diberi nama redirect.asp. Ini memasukkan beberapa konten ke halaman buffer, menghapus buffer, dan mengalihkan ke halaman web lain:
Untuk intLoop = 1 Sampai 1000000
Respon.Tulis "."
Berikutnya
Respon. Jelas
Respon.Redirect "show_redirect.asp"
Response.End
show_response.asp melakukan pekerjaan yang sama, tetapi pengalihan kembali ke halaman beranda "Objek Respons". Karena halaman ini di-buffer dan semua keluaran harus dihapus sebelum pengalihan, tidak ada keluaran yang terlihat di browser. Namun setiap redirect yang terjadi dapat dilihat dengan mengamati status browser. Seperti yang ditunjukkan pada gambar di bawah ini:
<img src=/u/info_img/2009-06/25/asp14.jpg>
Di halaman beranda "Objek Respons", klik tautan "Response.Flush" untuk membuka halaman web contoh kedua usebuffer.asp. Ini hanya mengulangi setiap karakter string dan mengirimkannya ke klien dengan penundaan tertentu. Meskipun ini adalah penggunaan server Web dan ASP yang sangat tidak efisien, ini menunjukkan cara kerja buffering.
<img src=/u/info_img/2009-06/25/asp15.jpg>
Berikut ini adalah kode ASP minimum yang diperlukan. Perhatikan bahwa kami me-refresh setiap karakter ke browser secara terpisah, karena jika tidak maka akan disimpan dalam buffer hingga halaman web selesai:
strText = “Teks ini telah dipindahkan ke browser menggunakan “ & _
"<B>Respon.Flush</B>
"
Untuk intChar =1 Ke Len(strText)
Untuk intWrite = 1 Sampai 100000
Berikutnya
Respon.Write Mid(strText,intChar,1)
Respon. Siram
Berikutnya
2) Properti Response.IsClientConnected
Properti IsClientConnected sudah ada di ASP 2.0, tetapi agak tidak dapat diandalkan. Beberapa keluaran harus dikirim ke klien sebelum memberikan hasil yang akurat. Masalah ini telah diselesaikan di ASP 3.0. Properti ini sekarang dapat digunakan secara bebas.
IsClientConnected adalah cara yang berguna untuk mengamati apakah pengguna masih terhubung ke server dan memuat halaman web yang dibuat oleh ASP. Jika pengguna memutus atau berhenti mengunduh, kita tidak perlu lagi membuang sumber daya server untuk membuat halaman web karena konten buffer akan dibuang oleh IIS. Oleh karena itu, untuk halaman web yang memerlukan banyak waktu untuk menghitung atau menggunakan banyak sumber daya, ada baiknya memeriksa pada setiap tahap apakah browser sedang offline:
...
... Kode untuk membuat bagian pertama halaman
...
Jika Response.IsClientConnected Lalu
Respon. Siram
Kalau tidak
Respon.Akhir
Akhiri Jika
...
... Kode untuk membuat bagian halaman selanjutnya...