302 FOUND
A ile 307 TEMPORARY REDIRECT
HTTP yanıtı arasındaki fark nedir ?
W3 spesifikasyonu , her ikisinin de geçici yönlendirmeler için kullanıldığını ve yanıt özellikle izin vermediği sürece her ikisinin de önbelleğe alınamayacağını gösteriyor.
302 FOUND
A ile 307 TEMPORARY REDIRECT
HTTP yanıtı arasındaki fark nedir ?
W3 spesifikasyonu , her ikisinin de geçici yönlendirmeler için kullanıldığını ve yanıt özellikle izin vermediği sürece her ikisinin de önbelleğe alınamayacağını gösteriyor.
Yanıtlar:
Fark yönlendirme kaygıları POST
, PUT
ve DELETE
istekleri ve hangi sunucunun beklentileri (kullanıcı aracısı davranış içindir RFC 2616
):
Not: RFC 1945 ve RFC 2068, istemcinin yeniden yönlendirilen istekte yöntemi değiştirmesine izin verilmediğini belirtir. Bununla birlikte, mevcut kullanıcı aracısı uygulamalarının çoğu 302'ye 303 yanıtı gibi davranır ve orijinal istek yönteminden bağımsız olarak Konum alanı değeri üzerinde bir GET gerçekleştirir. Durum kodları 303 ve 307, istemciden ne tür bir tepki beklendiğini kesin olarak netleştirmek isteyen sunucular için eklenmiştir.
Ayrıca, 30x yönlendirme kodlarıyla ilgili Wikipedia makalesini okuyun .
307, kullanıcı aracıları , 302 yanıtı alan ve Konum yanıtı başlığına bir GET isteği gönderen POST isteklerini almak için fiili bir davranış olarak kabul etti .
Yani yanlış davranış - sadece bir 303 bir GET dönüşme bir POST neden olmalıdır. Orijinal POST isteği bir 302 döndürdüyse, kullanıcı aracıları yeni URL isterken POST yöntemine sadık kalmalıdır (ancak etmemelidir).
307 sunucuları bir yöntem değişikliği gerektiğini kullanıcı aracıya temizlemek yapmasına izin tanıtıldı değil Konum yanıt başlığını izlerken müşteri tarafından yapılabilir.
302
hatalı çalışıyor. Chrome 30, IE10. Fiili yanlış uygulama haline geldi ; birçok web sitesi sorunu yanlışlıkla 302 çünkü bu değiştirilemez. Aslında ASP.net MVC yanlış 302 tarayıcılar yanlış işlemesine bağlı olarak, yanlış 302 verir .
303
de kullanılmaya başlanması 307
ve bu nedenle HTTP 1.0 kullanıcı aracılarıyla geriye dönük uyumluluğa izin vermesidir. Tabii ki, asıl soru şu anda hala HTTP 1.0 kullanıcı aracılarını kullanmalı mıyız?
Response.RedirectSeeOther
) oluşturabileceği ve istemci 1.1 değilse (ör GET /foo.html
. GET /foo.html HTTP/1.0
) eski kalıbı vermiş gibi görünüyor 302
.
307 Internal Redirect
Eylemin iyi bir örneği, Google Chrome'un Sıkı Aktarım Güvenliği gerektirdiği bildiği bir alan adında bir HTTP çağrısı ile karşılaşmasıdır.
Tarayıcı, orijinal çağrı ile aynı yöntemi kullanarak sorunsuz bir şekilde yönlendirir.
/register-form.html
için signup-form.html
. /register.php
, şimdi (GET) yükleyin /success.html
./register.php
yeniden yapmasını söyler /signup.php
.RFC 7231 (2014'ten itibaren) çok okunabilir ve aşırı ayrıntılı değildir. Kesin cevabı bilmek istiyorsanız, önerilen bir okuma. Diğer bazı cevaplar 1999'dan RFC 2616'yı kullanıyor, ancak hiçbir şey değişmedi.
RFC 7238 308 durumunu belirtir. Deneysel olarak kabul edilir, ancak 2016'da tüm büyük tarayıcılar tarafından zaten desteklenmiştir .
302 için EXPECTED: yönlendirme NEW_URL üzerinde aynı istek yöntemini POST kullanıyor
CLIENT POST OLD_URL -> SERVER 302 NEW_URL -> CLIENT POST NEW_URL
302, 303 için GERÇEK: yönlendirme değişikliği yöntemini POST'tan NEW_URL'da GET'e değiştir
CLIENT POST OLD_URL -> SERVER 302 NEW_URL -> CLIENT GET NEW_URL (redirect uses GET)
CLIENT POST OLD_URL -> SERVER 303 NEW_URL -> CLIENT GET NEW_URL (redirect uses GET)
307 için ACTUAL: yönlendirme, NEW_URL üzerinde aynı istek yöntemi POST'u kullanıyor
CLIENT POST OLD_URL -> SERVER 307 NEW_URL -> CLIENT POST NEW_URL
302, sunucu tarafından oluşturulan geçici yönlendirme, 307 ise tarayıcı tarafından oluşturulan dahili yönlendirme yanıtıdır. Dahili yönlendirme, yönlendirmenin tarayıcı tarafından otomatik olarak yapıldığını, temel olarak tarayıcı, istekte bulunmadan önce girilen url'yi http'den https'ye değiştirir, böylece güvenli olmayan bağlantı isteği asla internete gönderilmez. Tarayıcının url'yi https olarak değiştirip değiştirmeyeceği, tarayıcıyla önceden yüklenmiş olarak gelen hsts önyükleme listesine bağlıdır. Ayrıca, https'yi destekleyen herhangi bir siteyi, chrome: //net-internals/#hsts. adresindeki kendi tarayıcınızın hsts önyükleme listesine girerek listeye ekleyebilirsiniz. Sahipleri tarafından bir daha fazla web sitesi alanı eklenebilir https://hstspreload.org/ adresindeki formu doldurarak listeyi önceden yüklemek içinBöylece her kullanıcı için tarayıcılara önceden yüklenmiş olarak gelir, ancak özellikle kendiniz için de yapabileceğinizden bahsetmeme rağmen.
Bir örnekle açıklayayım:
http://www.pentesteracademy.com adresine yalnızca https'yi destekleyen
bir istekte bulundum ve site sahibi bunun için kaydolmadığı için tarayıcımdaki hsts önyük listemde bu etki alanına sahip değilim önceden yüklenmiş hsts önyükleme listesi ile birlikte gelir.
Sitenin güvenli olmayan sürümü için GET isteği güvenli sürüme yönlendirilir (yukarıdaki resimde yanıt olarak bunun için http başlıklı konuma bakın).
Şimdi, siteyi chrome: // net-internals / # hsts adresindeki hsts alan adını ekle bölümüne ekleyerek kendi tarayıcı ön yükleme listeme ekliyorum; bu, krom tarayıcımda kişisel ön yükleme listemi değiştiriyor. Orada STS seçeneği.
Şimdi hsts önyükleme listesine ekledikten sonra aynı web sitesinin isteğini ve yanıtını görelim.
yanıt yönergelerinde dahili yönlendirme 307'yi görebilirsiniz, aslında bu yanıt sunucunuz tarafından değil tarayıcınız tarafından oluşturulur.
Ayrıca, HSTS önyükleme listesi, kullanıcıların 302 yönlendirmesi saldırıları hafifletmeye eğilimli olduğundan kullanıcıların sitenin güvenli olmayan sürümüne ulaşmasını önlemeye yardımcı olabilir.
Umarım yönlendirmeler hakkında daha fazla bilgi edinmenize yardımcı oldum.
Başlangıçta sadece 302
| Response | What browsers should do |
|------------------------|---------------------------|
| 302 Found | Redo request with new url |
Fikir şudur:
GET
konumda bir şey yapsaydınız GET
, yeni URL'nizi tekrar yaparsınızPOST
konumda bir şey yapsaydınız POST
, yeni URL'nizi tekrar yaparsınızPUT
konumda bir şey yapsaydınız PUT
, yeni URL'nizi tekrar yaparsınızDELETE
konumda bir şey yapsaydınız DELETE
, yeni URL'nizi tekrar yaparsınızNe yazık ki her tarayıcı yanlış yaptı. A alırken , isteği aynı fiil ile yeniden denemek yerine 302
her zaman GET
yeni URL'ye geçerler ( ör . ):POST
Bu oldu fiili yanlış.
Tüm tarayıcılar 302
yanlış. Yani 303
ve 307
yaratıldı.
| Yanıt | Tarayıcılar ne yapmalı | Tarayıcılar aslında ne yapar | | ------------------------ | ------------------------ --- | --------------------------- | | 302 Bulundu | Yeni url ile isteği yeniden yapın | Yeni url ile GET | | 303 Diğerlerini Gör | Yeni url ile GET | Yeni url ile GET | | 307 Geçici Yönlendirme | Yeni url ile isteği yeniden yapın | Yeni url ile isteği yeniden yapın |
5 farklı yönlendirme türü:
╔═══════════╤════════════════════════════════════════════════╗
║ │ Switch to GET? ║
║ Temporary │ No │ Yes ║
╠═══════════╪════════════════════════╪═══════════════════════╣
║ No │ 308 Permanent Redirect │ 301 Moved Permanently ║
╟───────────┼────────────────────────┼───────────────────────╢
║ Yes │ 307 Temporary Redirect │ 303 See Other ║
║ │ 302 Found (intended) │ 302 Found (actual) ║
╚═══════════╧════════════════════════╧═══════════════════════╝
Alternatif:
| Response | Switch to get? | Temporary? |
|--------------------------|----------------|------------|
| 301 Moved Permanently | No | No |
| 302 Found (intended) | No | Yes |
| 302 Found (actual) | Yes | Yes |
| 303 See Other | Yes | Yes |
| 307 Temporary Redirect | No | Yes |
| 308 Permanent Redirect | No | No |
Ayrıca, sunucu yöneticileri için, 307 yönlendirmesi kullanırsanız tarayıcıların kullanıcıya bir istem gösterebileceğini unutmamak önemlidir.
Örneğin *, Firefox ve Opera kullanıcıdan yeniden yönlendirme izni isterken Chrome, IE ve Safari yönlendirmeyi şeffaf bir şekilde yapar.
* Kurşun geçirmez SSL ve TLS başına (sayfa 192).
Bazı kullanım durumlarında, bir saldırgan tarafından kurbanın kimlik bilgilerini öğrenmek için 307 yönlendirmesi kötüye kullanılabilir.
Daha fazla bilgi bulunabilir bölüm 3.1 arasında OAuth 2.0 Kapsamlı Bir Biçimsel Güvenlik Analizi .
Yukarıdaki makalenin yazarları aşağıdakileri önermektedir:
Fix. OAuth standardındaki mevcut ifadelerin aksine, yönlendirme için kesin yöntem bir uygulama detayı değil, OAuth güvenliği için gereklidir. HTTP standardında ( RFC 7231 ), bir HTTP POST isteğinin gövdesini bırakmak için benzersiz bir şekilde yalnızca 303 yönlendirmesi tanımlanır. En yaygın kullanılan 302 de dahil olmak üzere diğer tüm HTTP yeniden yönlendirme durum kodları, tarayıcıyı POST isteğini ve form verilerini koruma seçeneği olarak bırakır. Uygulamada, tarayıcılar genellikle bir GET isteğine göre yeniden yazar ve 307 yönlendirmeleri dışında form verilerini bırakır. Bu nedenle, OAuth standardı, bu sorunu gidermek için yukarıda belirtilen adımlar için 303 yönlendirmeleri gerektirmelidir.