HTTP yönlendirmesi: 301 (kalıcı) ve 302 (geçici)


381

Müşteri farklı davranmalı mı? Nasıl?


RFC 2616 - HTTP Durum Kodları Orada her şeyi tekrarlayabilirim, ancak oldukça açık bir şekilde ifade eder;)
Tiemen

2
Spesifikasyonun ayrıca daha nüanslı geçici yönlendirmeler için 303 ve 307 durum kodları sağladığını belirtmek gerekir.
Patrick McElhaney

303 ve 307'ye artık gerçekten ihtiyaç duyulmuyor. 303'ün yeni URL'nin ilişkili olduğunu ancak eşdeğer olmadığını belirtmesi gerekiyordu ve geçerli istek POST olsa bile GET ile yüklenmelidir, ancak tarayıcılar bunu yine de 302 ile yapıyor. 307'nin, yönlendirmenin geçici olup olmadığını belirten 302 yerine geçici olduğunu açıkça belirtmesi gerekiyordu, ancak tarayıcılar ve tarayıcılar 302'yi yine de geçici olarak ele alıyor.
thomasrutter

Yanıtlar:


569

Durum 301, kaynağın (sayfa) kalıcı olarak yeni bir konuma taşındığı anlamına gelir. İstemci / tarayıcı orijinal konumu talep etmeye çalışmamalı, ancak bundan sonra yeni konumu kullanmalıdır.

Durum 302, kaynağın geçici olarak başka bir yerde bulunduğunu ve istemci / tarayıcının orijinal URL'yi istemeye devam etmesi gerektiği anlamına gelir.


12
Teşekkür ederim. Bu, 301 (kalıcı) bir yönlendirme kullanırsam istemcinin bir daha asla eski konumu almaya karar veremeyeceği ve bunun yerine her zaman doğrudan yeni URL'yi kullanabileceği anlamına mı geliyor?
flybywire

18
Kesinlikle! Aslında, spesifikasyonlara göre, müşteri her zaman yeni konuma gitmelidir.
Philippe Leybaert

7
Ancak bir tarayıcıda bu nasıl etkilenir? Örneğin, 301'de yanlış olana geri dönmekten kaçınmak için geri düğmesindeki geçmişi yeniden yazmak? Eskisini tıklarsanız, bir yer işaretini 301'de sessizce değiştirmek mi istiyorsunuz?
Xavi Montero

9
@XaviMontero Çoğu modern tarayıcı 301'leri önbelleğe alır ve orijinal kaynağı 6 aya kadar talep etmekten rahatsız olmaz
Jon

34
Hatırlamak için Hile HTTP Durum kodları 301-> Perm ve 302-> Temp Redirect İki T ile başlar, Geçici T ile başlar.
ScottCate

108

Bir arama motoru örümceği bir web sayfasının yanıt başlığında 301 durum kodu bulduğunda, bu web sayfasının artık mevcut olmadığını anlar, yanıt olarak konum başlığını arar ve yeni URL'yi seçer ve dizine eklenen URL'yi yenisiyle değiştirir ve pagerank aktarır .

Arama motoru, artık mevcut olmayan tüm dizine alınmış URL'yi (301 bulundu) yeni URL ile yeniler, bu eski web sayfası trafiğinizi korur, pagerank ve yenisine yönlendirir (eski web sayfanızın trafiğini kaybetmezsiniz).

Tarayıcı: bir tarayıcı 301 durum kodu bulursa, eski URL'nin eşlemesini yeni URL ile önbelleğe alırsa, istemci / tarayıcı orijinal konumu talep etmeye çalışmaz ancak önbellek temizlenmedikçe yeni konumu kullanmaya başlar.

resim açıklamasını buraya girin

Bir arama motoru örümceği bir web sayfası için 302 durumu bulduğunda, yalnızca geçici olarak yeni konuma yönlendirir ve her iki sayfayı da tarar. Eski web sayfası URL'si hala arama motoru veritabanında bulunur ve her zaman eski konumu istemeye ve taramaya çalışır. İstemci / tarayıcı yine de orijinal konumu talep etmeye çalışır.

resim açıklamasını buraya girin

Asp.net c # 'da nasıl uygulanacağı ve arama motorları üzerindeki etkisi hakkında daha fazla bilgi edinin - http://www.dotnetbull.com/2013/08/301-permanent-vs-302-temporary-status-code-aspnet -csharp-Implementation.html


35

Çoğunlukla 301 ve 302, arama motorlarında endeksleme için önemlidir, çünkü tarayıcıları bunu dikkate alır ve 301'i kullanırken PageRank'i aktarır.

Daha fazla bilgi için Peter Lee'nin cevabına bakınız.


20

301, istenen kaynağa yeni bir kalıcı URI atanmış olması ve bu kaynağa gelecekteki tüm referansların döndürülen URI'lerden biri kullanılarak yapılması gerektiğidir.

302, istenen kaynağın geçici olarak farklı bir URI altında bulunmasıdır.

Yönlendirme zaman zaman değiştirilebileceğinden, istemci gelecekteki istekler için İstek URI'sını kullanmaya devam etmelidir.

Bu yanıt yalnızca Önbellek Denetimi veya Sona Erme üstbilgisi alanıyla belirtilirse erişilebilir.


1
Yani 301 mantıklı, ama 302 için iyi bir örnek kullanım ile zorlanıyorum .
Bob Stein

4
@ BobStein-VisiBone, örneğin 302 yönlendirmesi: kod <?php header("location: http://example.com/new.php"); ?>ile old.php ve new.php dosyasıyla bir dosya oluşturun <?php echo 'I am new'; ?>ve bağlantıya gidin . "Ben yeniyim" metnini yönlendirir ve görüntüler. Sonra old.php içindeki kodu değiştirin <?php echo 'I am old'; ?>ve bağlantıya gidin . "Ben yaşlıyım" metnini göreceksiniz. Old.php dosyasında 301 yönlendirmesini gerçekleştirseydiniz, old.php kodundaki değişikliklerden sonra bile "Ben yeniyim" metnini görürdünüz.
Havari

2
@ BobStein-VisiBone Onaylanmamış ve gösterilemeyen bir sayfam var. Yeni bir sayfa yapmamız gerekiyor, ancak bir süre hazır olmayacağız. Ziyaretçiler için yararlı olduğumuz mevcut bir sayfaya geçici olarak yeniden yönlendiriyoruz. Yeni sayfa oluşturulduktan sonra, bu sayfaya kalıcı bir yönlendirme kullanacağız.
EddieC

4
Hedef URL'niz duruma bağlıysa 302 faydalıdır.
Brian

7
Şimdi biraz zaman geçirdim ama işte iyi bir örnek. Webcomics genellikle en son komikliğe giden bir url'ye sahiptir. Bu bir 301 ile webcomic.com/latestyönlendirilirse webcomic.com/some-comic-titleve tarayıcı her zaman "some-comic-title" a yönlendirir. Bir sonraki çizgi roman yayınlandığında ve "en son" artık "başka bir çizgi roman başlığı" na yönlendiriyor olsa bile ... Burası 302'nin daha iyi olacağı yerdir.
hsan

17

301 yönlendirmeleri süresiz olarak önbelleğe alınır (en azından bazı tarayıcılar tarafından).

Bu, bir 301 oluşturursanız, bu sayfayı ziyaret ettiğinizde yalnızca yeniden yönlendirilmekle kalmaz, aynı zamanda yeniden yönlendirme de önbelleğe alınır.

Bu sayfayı tekrar ziyaret ettiğinizde, Tarayıcınız * bu URL'yi istemeye bile uğramaz, yalnızca önbelleğe alınmış yönlendirme hedefine gider.

Önbellekte bu yeniden yönlendirmeye sahip bir ziyaretçi için 301'i geri almanın tek yolu orijinal URL'ye yeniden yönlendirmektir **. Bu durumda, Tarayıcı döngüyü fark eder ve son olarak gerçekten girilen URL'yi ister.

Açıkçası, facebook'a veya tamamen kontrol altında olmadığınız başka bir kaynağa 301 karar verdiyseniz, bu bir seçenek değildir.

Ne yazık ki, birçok Hosting Sağlayıcısı Yönetici Arayüzlerinde 301 yönlendirmesi yapan "Yeniden Yönlendirme" adı verilen bir özellik sunar. Alan adınızı yakında yakında facebook olarak facebook'a yönlendirmek için bunu kullanıyorsanız, temelde mahvoldunuz.

* Tarayıcılar HTTP 301'leri ne kadar süreyle önbelleğe alır? . Chrome 45 ile denedim. Düzenleme: Mac'te Safari 7.0.6 da önbelleğe alır, tarayıcıyı yeniden başlatma işe yaramadı (Link, Windows'taki Safari 5'te yardımcı olduğunu söylüyor.)

** Javascript'i denedim window.location = '', çünkü çoğu durumda uygulanabilecek bir çözüm olurdu - işe yaramıyor. Belirsiz bir sonsuz Döngü ile sonuçlanır. Ancak, php header('Location: new.url')döngüyü kırar

Alt satır: yalnızca bu URL'yi bir daha asla kullanmayacağınızdan eminseniz 301'ler kullanın. Genellikle kök dizinde asla (example.com/)


7

301 ile ilgili temel sorun, yönlendirmeyi sunucu düzeyinden devre dışı bırakmış olsanız bile tarayıcının yeniden yönlendirmeyi önbelleğe almasıdır.

Kısa bir bakım penceresi için yeniden yönlendirmeyi etkinleştiriyorsanız, 302'yi kullanmak her zaman daha iyidir.


Kesinlikle bir "sorun" değildir; tam da böyle çalışmayı amaçlamaktadır. Yönlendirme HTTP HTTPS, Yönlendirme vb 301. olağan kullanımlar bazılarıdır, bir yenisine web sitesi terk
HosseyNJF
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.