2012-01-11 26 views
5

Thông thường, khi gửi một tiêu đề tình trạng http từ PHP, người ta sẽ gửi HTTP header như thế này:Bạn vẫn cần sử dụng 'Trạng thái: 404 Không tìm thấy' cho FCGI?

header("HTTP/1.0 404 Not Found"); 

Tuy nhiên, PHP manual nói rằng cho host FCGI, người ta sẽ cần phải gửi một "Status" tiêu đề sau đó được chuyển đổi thành một HTTP header bởi module FCGI:

header("Status: 404 Not Found"); 

tôi đang chạy apache 2.2 với PHP sử dụng mod_fcgi trên một máy tính Windows 7 và gửi header chỉ sử dụng header("HTTP/1.0 404 Not Found"); dường như làm việc tốt.

Đây có phải là thứ đã thay đổi gần đây không? Tôi vẫn cần gửi tiêu đề Status cho máy chủ FCGI? Bất cứ ai cũng có thể xác nhận điều này cho các nền tảng khác (solaris, linux) và máy chủ web khác (nginx, lighttp)?

Trả lời

3

Tôi không tin rằng bạn cần sử dụng tiêu đề kiểu 'Trạng thái' trừ khi bạn đã bật tùy chọn cgi.rfc2616_headers. .

Các mô tả về lựa chọn đó là http://php.net/manual/en/ini.core.php

"Cho PHP loại tiêu đề để sử dụng khi gửi HTTP phản ứng mã nếu nó được đặt 0, PHP sẽ gửi một Status: tiêu đề đó được hỗ trợ bởi Apache Khi tùy chọn này được đặt thành 1, PHP sẽ gửi »Tiêu đề tuân thủ RFC 2616. Hãy đặt thành 0 trừ khi bạn biết những gì bạn đang làm."

Về cơ bản bạn đang gửi tiêu đề kiểu HTTP tới PHP và sau đó PHP chuyển đổi các tiêu đề này thành tiêu đề kiểu 'Trạng thái' khi cần. Dường như có nhiều lỗi khác nhau trong những năm mà cả hai tiêu đề này được chuyển đổi không chính xác hoặc nhiều 'Trạng thái' được gửi cùng một lúc - tuy nhiên tất cả các lỗi đó dường như đã được khắc phục ngay bây giờ. Vì vậy, tôi nghĩ rằng bạn an toàn chỉ cần đặt tiêu đề kiểu HTTP và cho phép PHP chuyển đổi chúng.

Ngoài ra tôi vừa thử nghiệm và gửi tiêu đề ("HTTP/1.0 404 Not Found"); hoạt động tốt trên môi trường dev của tôi bằng cách sử dụng FastCGI

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