301, 302, 307 ve 308 Yönlendirmeleri Arasındaki Farklar

HTTP yönlendirmelerinde yalnız hedef adresin değişmesi değil, değişikliğin kalıcı mı geçici mi olduğu ve istemcinin sonraki isteği nasıl oluşturacağı da önemlidir. 301, 302, 307 ve 308 kodlarının tamamı istemciyi başka bir URI'ye yönlendirebilir. URI, kaynağı tanımlayan ifadedir; web sayfalarında https://example.com/sayfa gibi bir adres olabilir. Kodlar, yönlendirmenin kalıcılığı ile sonraki istekte yöntemin ve gövdenin korunması bakımından birbirinden ayrılır.
GET, bir sayfa veya başka bir kaynağın içeriğini istemek için kullanılır. POST ise form verisi gibi bilgileri sunucunun işlemesi için gönderebilir; bu veriler isteğin gövdesinde taşınır. Sıradan GET yönlendirmelerinde 301 ile 308 veya 302 ile 307 arasındaki fark çoğu zaman kullanıcıya görünmez. POST isteklerinde ise yöntem ve gövdenin korunup korunmayacağı önem kazanır.
Doğru kodu seçerken yönlendirmenin kalıcılığını, istek yöntemini, istek gövdesini, önbellek politikasını ve istemcinin gelecekte kullanacağı URI'yi birlikte ele almak gerekir.
301, 302, 307 ve 308 Kodlarının Karşılaştırması
Aşağıdaki tablo dört kodu aynı özellikler üzerinden karşılaştırır. "Yöntem ve gövde" sütunu özellikle POST gibi gövdeli isteklerde önemlidir; yalnız GET kullanan basit sayfa geçişlerinde bu fark daha az görünür olabilir.
| Kod | Kalıcılık | Yöntem ve gövde | Sonraki bağımsız istekler için bildirilen URI | Önbellek yaklaşımı |
|---|---|---|---|---|
| 301 | Kalıcı | POST, istemci tarafından GET'e çevrilebilir | Yeni URI | Sezgisel olarak önbelleğe alınabilir |
| 302 | Geçici | POST, istemci tarafından GET'e çevrilebilir | Yönlendirme öncesindeki URI | Açık önbellek politikasıyla saklanabilir |
| 307 | Geçici | Yöntem korunur; gövdeli istek aynı yöntemle yeniden gönderilir | Yönlendirme öncesindeki URI | Açık önbellek politikasıyla saklanabilir |
| 308 | Kalıcı | Yöntem korunur; gövdeli istek aynı yöntemle yeniden gönderilir | Yeni URI | Sezgisel olarak önbelleğe alınabilir |
Kalıcı (301 ve 308) ile Geçici (302 ve 307) Yönlendirmelerin Farkı
301 ve 308, hedef kaynağın kalıcı olarak yeni bir URI'ye taşındığını belirtir. İstemciler ve kayıtlı bağlantıları güncelleyebilen yazılımlar sonraki isteklerde yeni adresi kullanabilir.
302 ve 307, kaynağın farklı bir URI'de geçici olarak bulunduğunu belirtir. İstemci sonraki bağımsız isteklerde yönlendirme öncesindeki URI'yi kullanmaya devam eder; geçici hedef daha sonra değişebilir veya kaldırılabilir.
Örneğin bir sayfanın adresi kalıcı biçimde değiştiyse ve yalnız GET trafiği söz konusuysa 301 çoğu durumda doğal seçimdir. Bakım veya kısa süreli trafik yönlendirmesinde yöntem koruması gerekmiyorsa 302 daha uygun olabilir.
Geçici bir taşıma için kalıcı kod kullanmak, istemci ve önbelleklerin yeni hedefi beklenenden daha uzun süre tercih etmesine yol açabilir. Kalıcı bir taşıma için sürekli geçici kod kullanmak ise istemcilerin yönlendirme öncesindeki URI'yi temel adres olarak kullanmayı sürdürmesine neden olabilir.
Yöntem ve İstek Gövdesi Koruması
Otomatik yönlendirme sonrasında istemcinin HTTP yöntemini değiştirip değiştiremeyeceği, dört kod arasındaki en önemli teknik farklardan biridir. Özellikle form gönderimleri ve uygulamaların birbirine istek göndermesini sağlayan API arayüzleri bu farktan etkilenir.
301 ve 302'de POST'un GET'e Dönüşebilmesi
HTTP istemcileri, POST isteğine gelen 301 veya 302 yanıtından sonra yeni hedefe GET isteği gönderebilir. Bu durumda ilk POST gövdesi yeni isteğin parçası olmaz ve aynı işlemin aynı yöntemle sürmesi garanti edilmez.
Bu istisna POST için tanımlanmıştır; 301 veya 302, PUT ve DELETE gibi bütün yöntemlerin GET olarak değiştirilmesine genel bir izin vermez. POST yönteminin korunması gerekiyorsa geçici taşıma için 307, kalıcı taşıma için 308 seçilir.
307 ve 308'de Yöntemin Korunması
307 ve 308, otomatik yönlendirmede yöntemin değişmeyeceğini açıkça belirtir. POST isteği POST, bir kaynağı oluşturmak veya değiştirmek için kullanılan PUT isteği PUT olarak devam eder; istek gövdesi de yeni hedefe gönderilir. Ancak istemci otomatik yönlendirmeyi kapatmışsa veya gövdeyi yeniden gönderemiyorsa yönlendirmeyi tamamlamayabilir.
307 geçici, 308 kalıcı anlam taşır. Örneğin bir API uç noktası kısa süreli olarak başka sunucuya taşınıyor ve POST gövdelerinin aynı şekilde işlenmesi gerekiyorsa 307; uç nokta kalıcı olarak taşınıyor ve yöntem korunacaksa 308 daha uygun seçimdir.
Yönlendirilen İstekte Başlıkların ve Gövdenin Denetlenmesi
Yöntemin korunması, yönlendirilen isteğin bütün başlıklarının koşulsuz biçimde kopyalanacağı anlamına gelmez. İstemciler yeni hedefe geçerken Host gibi hedefe bağlı başlıkları yeniden oluşturabilir ve Authorization veya Cookie gibi güvenlik açısından hassas başlıkları hedef değişikliğine göre kaldırabilir ya da yeniden değerlendirebilir.
Burada hedefin şeması http veya https bölümünü, ana makinesi alan adını ya da IP adresini, bağlantı noktası ise port numarasını ifade eder. Bunlardan biri değiştiğinde kimlik doğrulama bilgilerinin aktarım kuralları da önem kazanır. Örneğin tarayıcının Fetch kuralları, yönlendirmede bu üç öğeden biri değişirse Authorization başlığını kaldırır.
Sunucuda veri oluşturabilen, değiştirebilen veya silebilen POST, PUT ve DELETE isteklerinde yeni hedefin aynı işlemi kabul ettiği test edilmelidir. Örneğin bir POST yönlendirmesinde hedefe ulaşan yöntemin, gövdenin ve kimlik doğrulama bilgilerinin uygulamanın beklediği değerlerle eşleştiği kontrol edilir. Yönlendirme kodu tek başına işlemin başarıyla tamamlandığını göstermez.
Önbelleğe Alma Kuralları Kod Seçimini Nasıl Etkiler?
301 ve 308 yanıtları HTTP kurallarına göre sezgisel olarak önbelleğe alınabilir. Yani yanıt açık bir yasak veya farklı önbellek politikası taşımıyorsa bir önbellek, geçerlilik süresini kendi kurallarına göre hesaplayabilir.
Bu durum "kalıcı yönlendirme tarayıcıda sonsuza kadar kalır" anlamına gelmez. Cache-Control, Expires, istek yöntemi, önbelleğin türü ve yerel uygulama politikası gerçek saklama ve yeniden kullanım davranışını etkiler.
302 ve 307 kodları, tek başlarına sezgisel önbelleğe almaya izin vermez. Uygun istek ve yanıt koşullarında Cache-Control veya Expires ile açık bir geçerlilik süresi tanımlanabilir. Süre belirtilmeden önbelleğe almaya açıkça izin verilmişse de önbellek süreyi sezgisel olarak hesaplayabilir. Bu nedenle geçici yönlendirme kullanmak, yanıtın hiç önbelleğe alınmayacağını garanti etmez.
Location Başlığı ve Hedef URI'nin Rolü
Bu dört yönlendirme kodunda sunucu, yönlendirmenin hedefini Location başlığıyla bildirir. Otomatik yönlendirme yapan istemci bu URI referansını çözerek yeni isteğin hedefini oluşturur; kalıcı veya geçici anlam ise durum kodundan gelir.
Location değeri tam bir adres veya /yeni-sayfa gibi göreli bir adres olabilir. Göreli değer, yönlendirme yanıtını üreten isteğin adresine göre tamamlanır. Örneğin https://example.com/eski-sayfa isteğine Location: /yeni-sayfa yanıtı verilirse yeni hedef https://example.com/yeni-sayfa olur.







