Location
Penggunaan
Server menyertakan Location saat mengarahkan klien ke URL yang berbeda. Header ini muncul dalam dua konteks: respons pengalihan dan pembuatan sumber daya.
Untuk Redirects, nilai Location memberi tahu klien ke mana permintaan berikutnya harus dikirim. Perilakunya bergantung pada kode status:
Untuk pembuatan sumber daya, respons 201 Created menyertakan Location yang menunjuk ke sumber daya yang baru dibuat. Ini memberi klien rujukan langsung tanpa memerlukan pencarian lanjutan.
Nilai Location menerima URL absolut maupun relatif. URL relatif diselesaikan terhadap URI permintaan.
Catatan
Header Location dan header Content-Location melayani tujuan yang berbeda. Location menunjuk ke target pengalihan atau sumber daya yang baru dibuat. Content-Location mengidentifikasi URL langsung dari representasi yang dikembalikan.
Catatan
Mesin pencari mengikuti pengalihan dan mengalihkan link equity (nilai peringkat) ke URL target pada pengalihan permanen (301, 308). Pengalihan sementara (302, 307) tidak selalu meneruskan link equity. Menggunakan kode status yang tepat selama migrasi URL menjaga peringkat pencarian.
URL
Nilainya adalah satu rujukan URI yang menunjuk ke lokasi target.
Location: <url>
URL tersebut berupa URI absolut dengan skema dan host, atau rujukan relatif yang diselesaikan terhadap URI permintaan.
Contoh
Pengalihan permanen dari domain lama ke domain baru memberi tahu klien untuk memperbarui markah dan tautan. Dengan 301, klien diizinkan mengubah metode permintaan dari POST menjadi GET.
HTTP/1.1 301 Moved Permanently
Location: https://new.example.re/products
Pengalihan permanen 308 mempertahankan metode permintaan asli, sehingga pengalihan tersebut aman untuk POST dan permintaan non-GET lainnya.
HTTP/1.1 308 Permanent Redirect
Location: https://new.example.re/products
Setelah membuat sebuah sumber daya melalui permintaan POST, server mengembalikan 201 beserta Location dari sumber daya baru tersebut.
HTTP/1.1 201 Created
Location: /api/orders/7891
Content-Type: application/json
Respons 303 setelah pengiriman formulir mengalihkan klien ke halaman hasil menggunakan GET.
HTTP/1.1 303 See Other
Location: /search/results?q=http+headers
Pemecahan masalah
Kegagalan pengalihan sering tampak sebagai perulangan tak berujung, URL yang rusak, atau header yang hilang dalam respons.
Perulangan pengalihan. Header Location menunjuk kembali ke URL saat ini atau ke URL lain yang mengalihkan balik, sehingga menciptakan siklus tak berujung. Browser berhenti setelah sejumlah lompatan tertentu dan menampilkan kesalahan ERR_TOO_MANY_REDIRECTS. Telusuri rantainya dengan curl -L -v untuk mengidentifikasi perulangan tersebut. Penyebab umum meliputi aturan server yang mengalihkan HTTP ke HTTPS sementara load balancer mengalihkan HTTPS kembali ke HTTP, atau aturan nginx return 301 yang cocok dengan URL tujuan. Di nginx, gunakan penjaga if ($scheme = http) secara sempit dan uji dengan kedua protokol.
URL relatif tidak diselesaikan dengan benar. Nilai Location menerima rujukan relatif, tetapi beberapa klien lama dan perantara mengharapkan URL absolut. Path seperti /new-page diselesaikan terhadap URI permintaan. Menghilangkan garis miring di awal menciptakan path relatif yang diselesaikan terhadap direktori saat ini, sehingga menghasilkan hasil yang tidak diharapkan. Gunakan URL absolut dengan skema dan host untuk menghindari ambiguitas.
Header Location hilang pada respons 3xx. Kode status pengalihan tanpa header Location membuat klien tidak memiliki tujuan. Browser menampilkan halaman kosong atau sebuah kesalahan. Periksa respons server dengan curl -I https://example.re/old-path dan pastikan header tersebut ada. Di Apache, direktif Redirect dan RedirectMatch selalu menyertakan header tersebut. Kode aplikasi kustom harus menyetel header itu secara eksplisit.
Ketidakcocokan protokol pada target pengalihan. URL HTTP di header Location pada situs HTTPS memicu peringatan konten campuran atau memblokir pengalihan di lingkungan yang ketat. Pastikan URL target cocok dengan protokol asal atau ditingkatkan ke HTTPS. Di nginx, gunakan return 301 https://$host$request_uri; untuk mempertahankan skema yang aman.
Fragmen tidak dipertahankan lintas pengalihan. Pengidentifikasi fragmen (#section) dari URL asli tidak diteruskan dalam header Location. Browser melekatkan kembali fragmen asli ke target pengalihan hanya ketika URL target tidak memuat fragmennya sendiri. Jika nilai Location menyertakan fragmen yang berbeda, fragmen asli akan hilang. Kode sisi server tidak memiliki akses ke fragmen karena browser tidak mengirimkannya dalam permintaan.
Men-debug rantai pengalihan. Jalankan curl -L -v https://example.re/start untuk mengikuti semua pengalihan dan melihat setiap lompatan beserta kode status dan header-nya. Tab Network pada DevTools juga menampilkan rantai lengkapnya. Saring berdasarkan tipe dokumen untuk memisahkan respons pengalihan dari permintaan subresource.