2009-09-11 22 views
8

Bazı eski kodları gözden geçiriyorum ve yanıtın süresiz olarak oturmasına neden olan bir hata buldum.İçerik Uzunluğunu yanıt başlığımda ayarlamak gerekli mi?

Response.Content-Type = "application/octet-stream" 
Response.AddHeader("Content-Disposition", "attachment; filename" & someFileName) 
Response.AddHeader("Content-Length", someStoredLength) 
Response.BinaryWrite(someByteArray) 
Response.Flush() 
Response.End() 

sorun someStoredLength someByteArray gerçek boyutundan çok daha büyük olmasıdır, böylece istemci sadece tarayıcı sadece spin ise dosya indirme bekliyor oturur:

İşte temel fikirdir.

İçerik uzunluğunu belirten AddHeader'ı kaldırmayı düşünüyorum, çünkü bunu yaptığımda her şey iyi çalışıyor gibi görünüyor, ama bir şey anlamadığım için endişeleniyorum.

Bu AddHeader'ı kaldırmak benim için uygun mu yoksa bu sorunla başa çıkmak için daha iyi bir yol bulmalı mıyım?

+0

? Yukarıdaki kodda Response sınıfı hangi sınıftır? – noctonura

+0

@RichAmberale: Bu soruyla gerçekten alakalı değil. Sorun, HTTP üstbilgileri nedeniyle tarayıcıda gerçekleşir. –

+0

Kod, VB.NET'tedir, ancak bunu, mirasın ASP klasik – Joseph

cevap

8

aşağıdaki gibi değiştirin içerik-uzunluk hattı:

bu ne dili böyle
Response.AddHeader("Content-Length", someByteArray.Length.ToString()) 
+0

Bunu yapmayı düşünüyorum. Bunun iyi bir alternatif olup olmadığını merak ediyordum. Bir bayt dizim varsa, Uzunluk özelliği bana her zaman doğru boyutu verir mi? – Joseph

+0

Evet. İçerik uzunluğu başlığı, içerikteki bayt sayısını gösterir. İçeriğiniz bir dizi bayttır, bu yüzden iyisiniz. – Stephen

10

Uygulamanız SHOULD (İçerik Uzunluğu'na kaydır) tanımlamanıza rağmen, kesinlikle gerekli değildir.

Mümkün olan seçeneklerin bir decent discussion.

+2

içinde yapıldığı başka yerlerde bulabilirim. Bağlantılı makalede önerilen çözüm ("yalnızca uzunluğu muhtemelen çok büyük olabilecek bazı rasgele değerlere ayarla") GERÇEKTEN kötü bir fikir gibi görünüyor. Mevcut kullanıcı aracılarıyla hiçbir şey kırmasa bile, "İçerik uzunluğu" başlığının tüm kavramını zayıflatır ve nadir, ancak tamamen standartlara uygun HTTP istemci kitaplıklarını bozabilir. Dosyanın boyutu önceden bilinmediği takdirde, tüm durumlarda yığınlanmış aktarım kodlaması kullanılmalıdır (ve eğer bağlantı yeniden kullanılacaksa kullanılmalıdır (canlı kal)). – lxgr

+0

[İçerik Uzunluğu] 'na doğrudan bağlantı (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13), ayrıca bkz. [HttpBis] (http://tools.ietf.org /html/draft-ietf-httpbis-p1-messaging-25#section-3.3.2) – paulkmoore

İlgili konular