2012-08-30 14 views
10

ExpressJS'nin bazı garip davranışlarını yaşıyorum. Node.js/express tabanlı API URL'mizin ikinci isteği üzerine her zaman IE için 304 Modifiye edilmemiş bir yanıt kodu döndürür. Diğer tarayıcılar 200 (Chrome/FF) alır. Sorun, içerik gerçekten değiştirilmiş olsa bile 304 değerini döndürmesidir. Arama yapmaya çalıştım ve konuyla ilgili bir şey bulamadım. Ayrıca IE ve Chrome istek başlıklarında bir fark bulmaya çalıştım ve buna neden olabilecek herhangi bir başlık görebiliyordum. Herhangi bir yardım takdir edilecektir.Express, IE yinelenen istekleri için 304 değerini döndürür

Bağlantıyı eklemek zorunda durumda,

+0

IE'nin hangi yanıt kodunu aldığını nasıl belirliyorsunuz? – josh3736

+0

+1 Aynı problemim var! – Erik

+0

josh3736, IE Girişim Araçları'nda ağ günlüğünü denetliyorum – bbbonthemoon

cevap

2

Peki konularda, SSL aracılığıyla gider, ben Cache-Control başlık bir çözüm olduğunu Cache-Control başlığını

+0

Bu bir geçici çözüm. Umarım birisi bir çözüm gönderebilir. – Brad

3

ekleyerek bunu düzeltmek başardı. Hata, internet explorer'ın üstbilgi için HTTP 1.1 özelliğinin yorumunda bulunuyor.

Bunu, sorunu çözen rota işleyicime ekledim. Ayrıca bir Last-Modified veya ETag başlığına ihtiyacınız var, ancak ekspres bunu benim için zaten gönderiyordu.

res.setHeader("Expires", "-1"); 
res.setHeader("Cache-Control", "must-revalidate, private"); 

Bkz: Make IE to cache resources but always revalidate

4

Etrafa çok bakmak aynı sorunu yaşıyorsunuz ve aslında sorun IE tarafından istekleri almak ajax aptal bir saldırgan önbelleğe geldiğini döner. Aslında bu 304'ü gördüğünüzde, asıl istek sunucuya hiçbir zaman vurmaz, ancak IE önbelleğinden en son verilere yanıt verir. Bu, MS tarafından tasarlanan amaçtır ve bu nedenle yalnızca geçici çözümler vardır.

Tercih ettiğim her ajax isteğine geçerli saati içeren yararsız bir sorgu parametresi eklemek. IE'yi her zaman sunucudan almaya zorlar. güzel kısmı jQuery kullanırsanız,

$.ajaxSetup({cache:false}) 

başka eser etrafında yerine GET POST isteklerini kullanmaktır ile bu otomatik olarak yapılandırabilirsiniz, ancak bu her zaman bir seçenek değildir.

İlgili konular