2012-03-15 52 views
18

Google có cung cấp cho tôi bất kỳ lợi thế nào nếu tôi đặt tiêu đề này khi tạo các trang html bình thường không?Độ dài nội dung và các tiêu đề HTTP khác?

Tôi thấy rằng một số khuôn khổ ngoài kia sẽ đặt thuộc tính tiêu đề này và tôi đã tự hỏi tại sao ... (Cùng với tiêu đề khác, như Content-Type: text/html)

Liệu trình duyệt tải trang web nhanh hơn hoặc smth? :)

ps: họ làm điều đó như:

ob_start(); 

... stuff here... 

$content = ob_get_contents(); 
$length = strlen($content); 

header('Content-Length: '.$length); 

echo $content; 
+0

Trả lời cho câu hỏi của bạn không được liệt kê dưới đây? – Neysor

Trả lời

17

Tôi nghĩ rằng nó chỉ vì HTTP Spec nói để làm điều này trong mọi trường hợp có thể.

Ứng dụng NÊN sử dụng trường này để biểu thị độ dài truyền của nội dung thư, trừ khi điều này bị cấm theo quy tắc trong phần 4.4.

Bạn cũng có thể xem at Pauls Answer trên Question of Deaomon.

Tôi nghĩ điều này cũng sẽ trả lời bạn.

Ngoài ra, bạn nên sử dụng Độ dài nội dung nếu bạn muốn ai đó tải xuống tệp có tiêu đề khác: ví dụ:

<?php 
$file = "original.pdf" 
$size = filesize($file); 
header('Content-type: application/pdf'); 
header("Content-length: $size"); 
header('Content-Disposition: attachment; filename="downloaded.pdf"'); 
readfile($file); 
?> 
2

Động lực chính đằng sau nó được tái sử dụng một kết nối TCP hiện trong HTTP 1.1. Content-Length có thể phân định vị trí nơi đáp ứng kết thúc cho người nhận. Đối với các tiêu đề khác, như Content-Type chỉ định loại MIME, chúng dành cho người nhận để cô ấy biết phải làm gì với kết quả tùy thuộc vào loại nội dung Ví dụ: trong Firefox, bạn có thể chỉ định hành động nào để thực hiện với các loại MIME khác nhau. Nếu bạn có thể bật lên trình duyệt của lưu thoại hoặc mở một PDF viewer với Content-Type của application/pdf

+0

có nghĩa là bạn yêu cầu hai trang trong cùng một yêu cầu? – ellabeauty

+0

Không, chúng được gửi trong ngữ cảnh của cùng một kết nối TCP. Khái niệm này được gọi là kết nối HTTP liên tục. –

+0

hmmm nhưng từ những gì tôi đang đọc trong wikipedia trong kết nối trình duyệt http 1.1 là liên tục theo mặc định, do đó, điều này thực sự cần thiết? – ellabeauty

11

Liệu nó cho tôi bất kỳ lợi thế nếu tôi đặt tiêu đề này khi tạo trang html bình thường không?

Liệu tải trình duyệt các trang web nhanh hơn hoặc smth? :)

Đối với các trang tự động tạo ra, thường là không.Content-Length cho phép ứng dụng khách biết tệp lớn như thế nào. Tuy nhiên, nếu Content-Length không được chỉ định, quá trình truyền sẽ được gửi theo khối (với đoạn đặc biệt có nghĩa là kết thúc tệp). Phương pháp cũ có thể dẫn đến việc truyền tải nhanh hơn vì chi phí chia tách thành nhiều phần bị loại bỏ. Tuy nhiên, điều này thường được dành riêng tốt nhất cho các tệp tĩnh vì các tài nguyên cần thiết để đệm toàn bộ nội dung nhằm xác định độ dài có thể lớn hơn bất kỳ lợi ích nào có được bằng cách đặt Content-Length.

+0

Tôi đã kiểm tra tiêu đề trong các công cụ dành cho nhà phát triển từ Chrome và tôi thấy rằng tiêu đề Content-Length được đặt ngay cả khi tôi không đặt nó trong PHP. – ellabeauty

+3

Nếu độ dài nội dung nhỏ hơn kích thước bộ đệm gửi của máy chủ web/máy chủ web, 'Nội dung dài' sẽ tự động được bao gồm bởi máy chủ web. Tuy nhiên, nếu độ dài vượt quá bộ đệm, bạn sẽ thấy rằng độ dài nội dung sẽ không được gửi và, thay vào đó, 'Chuyển mã hóa: chunked' sẽ được sử dụng. – webbiedave

+0

bạn có biết làm thế nào tôi có thể tìm ra kích thước bộ đệm là bao nhiêu? – ellabeauty

2

Trường hợp content-type: text/html có liên quan, chủ yếu là để cho khách hàng biết điều gì sẽ xảy ra và thường là cách xử lý tệp. Trong trường hợp của chương trình, nó có thể hữu ích cho các mục đích SEO vì nó cho bot biết loại tệp mà nó đang xem có thể thay đổi cách phân tích/xếp hạng.

Trong trường hợp content-length, nó chỉ để cho khách hàng biết mức độ mong đợi của tệp lớn và do đó phản hồi kết thúc.

0

Cách tốt nhất (có nghĩa là làm việc cho tôi) nhận được kích thước của một tập tin từ xa:

$head = array_change_key_case(get_headers($file, TRUE)); 
$filesize = $head['content-length']; 
0

Một sử dụng được cho là tốt cho việc thiết lập các nội dung có độ dài là khi bạn muốn gửi thư trả lời của bạn cho khách hàng mặc dù bạn vẫn muốn thực hiện nhiều hoạt động tốn thời gian hơn sau đó.

Xem this answer giải thích rằng bạn muốn đặt độ dài nội dung, viết kết quả đầu ra của bạn và sau đó có thể thực hiện thêm các thao tác trong tập lệnh mà không làm khách hàng chờ thêm nữa.

Các vấn đề liên quan