2012-03-28 7 views
10

ile Sonrası Yönlendirme-alın.Ben basit CRUD uygulamasında çifte mesajları önlemek için <em>posta/yönlendirme/get</em> desen uygulayan bir web sayfası var Internet Explorer

amaçlanan istek/yanıt sırası burada:

  1. tarayıcı POST
  2. sunucusu üzerinden veri gönderir durumu 302 Moved Temporarily ile yanıt verir ve
  3. tarayıcı GET
  4. ile yönlendirmeyi takip eden Location başlık, DB değiştirir
  5. sunucusu güncellenen sayfa
ile yanıt

Bu şekilde çalışması gerekiyor - ve örneğin Chrome'da.

Internet Explorer 9 ise de bir POST olarak adım 3, gönderir (form verileri komple set dahil!). Niye ya? GET'u kullanabilmek için ne yapmalıyım?

Ben yönlendirme formu hedefiyle aynı konuma gider sorgu dizesi o ayrı eklemelisiniz.

denedim: render modları (IE7, IE8, IE9, Gariplikleri, Standartlar, Compat) mevcut tüm

  • tam DOCTYPE
  • bir göreli URL veya mutlak bir yer Location başlık
  • HTTP Durum 303
+0

İşleri mümkün vb hiçbir DOCTYPE ortada, yani IE9 aslında ikinci bir özdeş POST isteği göndermek olmadığını üçlü emin misiniz? Ortada vekiller ya da başka bir şey yok mu? – Jon

+0

Peki, hata ayıklayıcısındaki ağ sekmesine bakarak bana bunu anlatıyor. Sunucu ayrıca bir POST alır. HTTP/1.1 durumları için – Tomalak

+3

RFC 2616, [durum kodu tanımları] için bölüm 10.3.3'te (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) '302'ye tepki veren bir tarayıcı yanıt * kullanılan * yöntemi değiştirmemelidir - bu yüzden bir POST POST olarak kalmalıdır. IE aslında doğru yapıyor. Ama bir '303' * * bir GET olmalı, yani IE, bu son noktanıza göre * bu * yanlıştır. –

cevap

4

doğru durum kodu if (Bir değişiklik olup olmadığını görmek için) Bir GET'in olmasını istiyorsunuz, ancak 301 ve 302 de ortak tarayıcılarda ne istediğinizi yapacağız.

Bu çalışmıyorsa, muhtemelen başka bir şey yanlıştır. Neyin yanlış olduğunu bulmak için bir HTTP izleme yararlı olacaktır.

+0

Bunu yarın tedarik edecek. – Tomalak

3

Emin değilim ama IE9 aslında yönlendirme 30x sonra "POST" gönderilen gelmez gibi görünüyor - bu sadece onun iç ayıklayıcısında görüntüler.

+2

OP ile aynı sorun olup olmadığından emin değilsiniz, ancak çok benzerdir (Post-Redirect-Get + IE9). Durumumda hata ayıklayıcının olduğunu doğruladım. –

+0

Bende. IE9 modunda, Ağ dev paneli 303 için POST-> POST diyor, ancak sunucu POST-> GET aldığını söylüyor. :( – Ashley

2

Benzer davranışları farkettim. IE11'in dahili hata ayıklayıcısını bir POST bildiriyordu, ancak bir üçüncü taraf uygulaması (Fiddler) kullanarak isteği GET olarak bildiriyor. Bir 303/302'ye yanıt olarak bir POST görürseniz, bir dış uygulama ile çift kontrol edin. En basit örnekle benim için