2012-06-27 6 views
5

Tôi có một chương trình C++ hoạt động như một kịch bản CGI, và tôi hiện đang sử dụng Cgicc để thực hiện một số phân tích cú pháp và định dạng cho tôi (mặc dù nó có thể sẽ được thay thế tại một số điểm). Khi xây dựng phản ứng của tôi, tôi sử dụng cgicc::HttpResponseHeader, mà sẽ tạo cho tôi một cái gì đó giống nhưTiêu đề không đúng định dạng từ tập lệnh. Bad header = HTTP/1.1 302 Tìm thấy

HTTP/1.1 302 Found 
Location: www.bla.com 

này trông khá chuẩn đối với tôi. Tuy nhiên, Webserver cuộn cảm trên đó, đem lại cho tôi một

<...> malformed header from script. Bad header=HTTP/1.1 302 Found: script.cgi 

tôi phát hiện ra làm thế nào để sửa lỗi này:

  1. Tháo dòng HTTP/...
  2. Thêm thay vì một dòng Status: 302 Found

Và trên thực tế, đó chính là điều mà cgicc::HttpRedirectHeader thực hiện. Tôi hiện có hai câu hỏi:

  1. Đây có phải là dòng HTTP/1.1 302 Found không phải là tiêu chuẩn không?
  2. Nếu không, tại sao là cgicc::HttpResponseHeader làm điều đó? Nếu có, tại sao máy chủ web của tôi bị nghẹt thở?

Lưu ý Tôi không tìm cách để giải quyết vấn đề này, tôi biết cách thực hiện điều đó. Tôi chỉ muốn hiểu những gì đang xảy ra.

Cheers Ole

Trả lời

5

Dòng HTTP là tiêu chuẩn HTTP, nhưng không CGI chuẩn.

Theo CGI, tập lệnh sử dụng tiêu đề Status để truyền đạt trạng thái trở lại máy chủ web và máy chủ web xây dựng dòng phản hồi HTTP từ mã trạng thái đó.

Tại sao cgicc đang xây dựng đường dây HTTP Tôi không biết - có thể bạn không được sử dụng lớp học cụ thể đó trong ngữ cảnh đó không? Có lẽ lớp đó chỉ dành cho việc sử dụng với nph tập lệnh? The documentation có loại ngụ ý rằng - sau khi mô tả tập hợp các lớp phản hồi tiêu chuẩn, nó cho biết:

cgicc :: HTTPResponseHeader là lớp tiêu đề HTTP chung mạnh hơn, được sử dụng để xây dựng phản hồi HTTP đầy đủ.

Ý nghĩa là không bình thường khi sử dụng nó trong tập lệnh CGI bình thường.

+0

Được rồi, điều đó giải thích. Có cách nào cho tôi, sử dụng CGI, để xác định phiên bản HTTP nào tôi muốn sử dụng (1.0/1.1)? Tôi không thực sự cần nó ngay bây giờ, nhưng tò mò muốn hiểu rõ hơn về CGI. – Ole

+0

Xin lỗi, tôi không biết CGI tiêu chuẩn cho phép bạn kiểm soát điều đó hay không. Bạn có thể tiếp nhận toàn bộ quá trình bằng cách sử dụng tập lệnh 'nph', trong trường hợp đó bạn có thể làm bất cứ điều gì bạn thích. – RichieHindle