300 Multiple Choices: neredeyse hiç görmeyeceğiniz kod
300 Multiple Choices, istenen kaynağın birden fazla temsili olduğu ve sunucunun istemciden onun yerine seçmek yerine birini seçmesini istediği anlamına gelir. HTTP standardı tarafından tanımlanır ama neredeyse hiç kullanılmaz, bu yüzden onu arıyorsanız muhtemelen gerçek bir 300 yerine bir 301 veya 302 ile karşılaşmışsınızdır.
Kod ne için tasarlandı
HTTP, içerik pazarlığını destekler: aynı URL, biçim, dil veya kodlamaya göre farklılık gösteren birkaç temsile sahip olabilir. Normalde sunucu, istemcinin Accept, Accept-Language ve Accept-Encoding başlıklarını kullanarak karar verir, ve seçileni bir 200 ile döndürür. Bu sunucu güdümlü pazarlıktır, ve web'in yaptığı budur.
300 Multiple Choices diğer yaklaşımı kapsar, aracı güdümlü pazarlık. Seçmek yerine, sunucu mevcut temsillerin bir listesiyle yanıt verir ve istemcinin veya kullanıcının seçmesine izin verir. Yanıt, sunucunun tercih ettiği seçeneği adlandıran bir Location başlığı içerebilir, ki istemci onu izlemekte özgürdür.
Neden neredeyse hiç görmüyorsunuz
Standart, seçim listesi için hiçbir zaman makine tarafından okunabilir bir biçim belirtmedi. Kabul edilmiş bir biçim olmadan bir tarayıcının ayrıştıracağı hiçbir şey yoktur, bu yüzden hiçbir ana akım tarayıcı bir 300 için bir seçici arayüzü uygulamaz. Tarayıcılar genellikle yanıt gövdesini bunun yerine sıradan bir sayfa olarak görüntüler, veya varsa Location başlığını izler, ki bu 300'ün zayıf bir yönlendirme gibi davranmasını sağlar. Uygulama framework'leri ve CDN'ler onu varsayılan yapılandırmalarında yaymaz, ve sunucu güdümlü pazarlık aynı sorunu görünmez ve daha iyi bir şekilde çözer, bu yüzden kimsenin değiştirmek için bir nedeni yoktur.
Bir 300 yine de birkaç yerde ortaya çıkar:
- MultiViews etkinken Apache'nin
mod_negotiation'ı,/logogibi bir isteğe birkaç dosya eşleştiğinde ve modül onları sıralayamadığında. Adaylardan oluşan bir HTML listesi üretir. - Herhangi bir istemcinin onu doğal olarak işlemesini beklemek yerine 300'ü anlamsal bir ipucu olarak kullanarak, kasıtlı olarak alternatif kaynak URL'lerinden oluşan bir JSON listesi döndüren elle yazılmış API'ler.
- Tanımlanmış her durum kodunu işleten test paketleri ve protokol uygunluk araçları.
İnsanlar neden "300 status code" araştırıyor
"300 status code" için yapılan aramaların çoğu hiç 300 hakkında değildir. Bu sayı, yönlendirme ailesinin başlangıcıdır, bu yüzden bir tarayıcı aracında, bir kayıtta veya bir SEO tarayıcısında bir yönlendirme görüp "300 küsur bir şey" diye hatırlayan insanlar önce 300'e bakar. Genellikle sahip oldukları şey:
- Bir SEO tarayıcısı tarafından bir zincirin parçası olarak bildirilen bir 301, kalıcı bir yönlendirme.
- Birçok framework'ün varsayılan olarak yaydığı bir 302, geçici bir yönlendirme.
- Aslında hiç bir yönlendirme değil bir önbellek doğrulama yanıtı olan bir 304.
- Her şeyi bir "3xx" başlığı altında gruplayan, sonra "300" olarak okunan bir tarayıcı özeti.
Bir URL'nin hangi yönlendirmeyi döndürdüğünü çözmeye çalışıyorsanız, istediğiniz rehber 301'e karşı 302'dir.
Gerçekten bir 300'ünüz olup olmadığı nasıl kontrol edilir
- Hiçbir yönlendirmeyi izlemeden başlıkları isteyin ve tam sayıyı okuyun:
Gerçek bir 300,curl -sI https://example.com/some-path | grep -Ei "^(HTTP|location|link|alternates)"HTTP/1.1 300 Multiple Choicesgösterir. Başka herhangi bir şey farklı bir kod ve farklı bir rehberdir. - Gerçekten bir 300'se ve bunu istemediyseniz, önce Apache'ye bakın. O dizin için MultiViews'i devre dışı bırakmak, veya dosyaya URL'de açık bir uzantı vermek, pazarlığı tetikleyen belirsizliği kaldırır.
- Sunucunun seçmesini istiyorsanız, sunucu güdümlü pazarlığı koruyun: seçilen temsille ve önbelleklerin varyantları ayrı ayrı saklaması için pazarlık yaptığınız istek başlıklarını adlandıran bir
Varybaşlığıyla 200 döndürün. - İstemcileri başka bir yere göndermek istiyorsanız, gerçek bir yönlendirme kullanın. Kalıcı taşımalar 301 veya 308 alır, geçici olanlar 302 veya 307 alır. 300'ü bir yönlendirme olarak kullanmayın, çünkü istemcilerin onu izlemesi gerekmez.
- Belirsizliği kaynağında düzeltin. Bir 300 neredeyse her zaman iki dosyanın veya iki rotanın aynı URL için yarıştığı anlamına gelir, ve kalıcı düzeltme URL'yi belirsiz olmayan hale getirmektir.
Bir dağıtımdan sonra beklenmeyen bir 300'ü tespit etmek
Beklenmeyen bir 300, genellikle bir sunucu yükseltmesi veya bir yapılandırma değişikliğiyle gelir, ve kimse fark etmez: sayfa bir tarayıcıda hâlâ kabaca doğru görünebilirken tarayıcılar ve API istemcileri kullanamayacakları bir yanıt alır. Her URL için tam durum kodunu kaydeden harici bir kontrol, dağıtımdan sonraki ilk çalıştırmada değişikliği ortaya çıkarır. HostTracker, 2004'ten beri web sitelerini izliyor ve 158 şehirdeki 300'den fazla kontrol noktasından kontroller çalıştırıyor. HTTP kontrol aracıyla bir URL'nin şu anda ne döndürdüğünü kontrol edin, veya tam 3xx yönlendirme ailesi rehberini okuyun.