2009-09-11 12 views
8

Tôi đang xem xét một số mã cũ và tôi đã tìm thấy lỗi gây ra phản hồi để ngồi vô thời hạn.Có cần đặt chiều dài Nội dung trong tiêu đề phản hồi của tôi không?

Dưới đây là ý tưởng cơ bản:

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() 

Vấn đề là someStoredLength là lớn hơn nhiều so với kích thước thực tế của someByteArray, do đó khách hàng chỉ cần ngồi ở đó chờ đợi cho các tập tin tải về trong khi trình duyệt chỉ quay.

Tôi dự tính chỉ cần loại bỏ trình AddHeader chỉ định độ dài nội dung, bởi vì khi tôi làm mọi thứ có vẻ hoạt động tốt, nhưng tôi lo rằng mình không hiểu gì cả.

Tôi có thể xóa chương trình AddHeader này không hay tôi nên tìm ra cách tốt hơn để giải quyết vấn đề này?

+0

đây là ngôn ngữ gì? Lớp nào là đối tượng Response trong đoạn mã trên? – noctonura

+0

@RichAmberale: Điều đó không thực sự liên quan đến câu hỏi. Sự cố xảy ra tại trình duyệt do tiêu đề HTTP. –

+0

Mã nằm trong VB.NET nhưng tôi có thể tìm thấy điều này ở những nơi khác mà di sản được thực hiện trong ASP classic – Joseph

Trả lời

8

Thay đổi dòng Content-Length như sau:

Response.AddHeader("Content-Length", someByteArray.Length.ToString()) 
+0

Tôi cũng đang nghĩ đến việc đó. Tôi đã tự hỏi nếu đó sẽ là một lựa chọn tốt. Nếu tôi có mảng byte thì thuộc tính Độ dài luôn cho tôi kích thước chính xác? – Joseph

+0

Có. Tiêu đề chiều dài nội dung cho biết số byte trong nội dung. Nội dung của bạn là một mảng byte, vì vậy bạn tốt. – Stephen

10

Ứng dụng của bạn SHOULD (cuộn xuống Content-Length) xác định nó, tuy nhiên, nó không phải là bắt buộc.

Dưới đây là một số decent discussion tùy chọn có thể.

+2

Giải pháp được đề xuất trong bài viết được liên kết ("chỉ cần đặt độ dài thành một số giá trị tùy ý sẽ có khả năng quá lớn") có vẻ như một ý tưởng tồi. Thậm chí nếu nó không phá vỡ bất kỳ thứ gì với các tác nhân người dùng hiện tại, nó sẽ làm suy yếu toàn bộ khái niệm về tiêu đề "Content-length", và có thể phá vỡ các thư viện HTTP client hoàn toàn không tuân thủ tiêu chuẩn. Nếu kích thước của tập tin không được biết trước, mã hóa chuyển đoạn phải được sử dụng trong mọi trường hợp (và phải được sử dụng nếu kết nối được sử dụng lại (giữ nguyên)). – lxgr

+0

Liên kết trực tiếp đến [Content-Length] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13), xem thêm [HttpBis] (http://tools.ietf.org /html/draft-ietf-httpbis-p1-messaging-25#section-3.3.2) – paulkmoore