Sayangnya, tidak ada API untuk memberi Anda header respons HTTP untuk permintaan halaman awal Anda. Itu adalah pertanyaan asli yang diposting di sini. Sudah berulang kali ditanyakan juga, karena beberapa orang ingin mendapatkan tajuk respons aktual dari permintaan halaman asli tanpa mengeluarkan yang lain.
Untuk Permintaan AJAX:
Jika permintaan HTTP dibuat melalui AJAX, dimungkinkan untuk mendapatkan header respons dengan getAllResponseHeaders()
metode ini. Itu bagian dari API XMLHttpRequest. Untuk melihat bagaimana ini dapat diterapkan, periksa fetchSimilarHeaders()
fungsi di bawah ini. Perhatikan bahwa ini adalah solusi untuk masalah yang tidak dapat diandalkan untuk beberapa aplikasi.
myXMLHttpRequest.getAllResponseHeaders();
Ini tidak akan memberi Anda informasi tentang tajuk respons HTTP permintaan laman asli, tetapi bisa digunakan untuk membuat tebakan yang mendidik tentang tajuk itu. Lebih lanjut tentang itu dijelaskan selanjutnya.
Mendapatkan nilai tajuk dari Permintaan Halaman Awal:
Pertanyaan ini pertama kali ditanyakan beberapa tahun yang lalu, menanyakan secara khusus tentang bagaimana mendapatkan header respons HTTP asli untuk halaman saat ini (yaitu halaman yang sama di mana javascript berjalan). Ini adalah pertanyaan yang sangat berbeda dari sekadar mendapatkan header respons untuk setiap permintaan HTTP. Untuk permintaan halaman awal, header tidak tersedia untuk javascript. Apakah nilai header yang Anda butuhkan akan konsisten dan cukup konsisten jika Anda meminta halaman yang sama lagi melalui AJAX akan tergantung pada aplikasi khusus Anda.
Berikut ini adalah beberapa saran untuk mengatasi masalah itu.
1. Permintaan Sumber Daya yang sebagian besar statis
Jika responsnya sebagian besar statis dan tajuknya tidak diharapkan banyak berubah di antara permintaan, Anda dapat membuat permintaan AJAX untuk halaman yang sama dengan yang Anda gunakan saat ini dan menganggap bahwa mereka adalah nilai yang sama dengan yang merupakan bagian dari halaman Tanggapan HTTP. Ini bisa memungkinkan Anda untuk mengakses tajuk yang Anda butuhkan menggunakan API XMLHttpRequest yang bagus seperti dijelaskan di atas.
function fetchSimilarHeaders (callback) {
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (request.readyState === XMLHttpRequest.DONE) {
//
// The following headers may often be similar
// to those of the original page request...
//
if (callback && typeof callback === 'function') {
callback(request.getAllResponseHeaders());
}
}
};
//
// Re-request the same page (document.location)
// We hope to get the same or similar response headers to those which
// came with the current page, but we have no guarantee.
// Since we are only after the headers, a HEAD request may be sufficient.
//
request.open('HEAD', document.location, true);
request.send(null);
}
Pendekatan ini akan bermasalah jika Anda benar-benar harus bergantung pada nilai-nilai yang konsisten di antara permintaan, karena Anda tidak dapat sepenuhnya menjamin bahwa mereka sama. Ini akan tergantung pada aplikasi spesifik Anda dan apakah Anda tahu bahwa nilai yang Anda butuhkan adalah sesuatu yang tidak akan berubah dari satu permintaan ke yang berikutnya.
2. Buat kesimpulan
Ada beberapa properti BOM (Model Objek Browser) yang ditentukan browser dengan melihat header. Beberapa properti ini mencerminkan header HTTP secara langsung (mis. navigator.userAgent
Diatur ke nilai User-Agent
bidang header HTTP ). Dengan mengendus-endus properti yang tersedia Anda mungkin dapat menemukan apa yang Anda butuhkan, atau beberapa petunjuk untuk menunjukkan apa yang terkandung dalam respons HTTP.
3. Simpan mereka
Jika Anda mengontrol sisi server, Anda dapat mengakses header apa pun yang Anda suka saat membangun respons penuh. Nilai dapat diteruskan ke klien dengan halaman, disimpan dalam beberapa markup atau mungkin dalam struktur JSON yang digarisbawahi. Jika Anda ingin agar setiap tajuk permintaan HTTP tersedia untuk javascript Anda, Anda dapat mengulanginya melalui server dan mengirimkannya kembali sebagai nilai tersembunyi di markup. Mungkin tidak ideal untuk mengirim nilai header seperti ini, tetapi Anda tentu bisa melakukannya untuk nilai spesifik yang Anda butuhkan. Solusi ini bisa dibilang tidak efisien juga, tetapi akan berhasil jika Anda membutuhkannya.