Bash
500:來自 CGI 程序的內部伺服器錯誤
我正在嘗試編寫一個從 HTML 頁面呼叫的 CGI 程序。CGI 程式碼片段如下:
#!/bin/bash echo "Content-type: text/html" echo "<html>" echo "<body>" echo "Hi" echo "</body>" echo "</html>"
但執行腳本後,我可以看到
500:Internal Server Error
瀏覽器頁面。.在錯誤日誌文件中可以看到以下內容
[Wed Apr 09 18:36:59 2014] [error] [client 127.0.0.1] malformed header from script. Bad header=<html>: image.sh [Wed Apr 09 18:37:14 2014] [error] [client 127.0.0.1] malformed header from script. Bad header=<html>: image.sh
正如 HTTP 規範(以及來自 HTTP 伺服器的錯誤消息)所指定的,您需要在 HTTP 標頭和正文之間留一個空行,否則伺服器不知道標頭在哪裡結束而正文從哪裡開始。來自RFC 2616(強調我自己的):
請求(第 5 節)和響應(第 6 節)消息使用 RFC 822 的通用消息格式
$$ 9 $$用於傳輸實體(消息的有效負載)。兩種類型的消息都包含一個起始行、零個或多個標題欄位(也稱為“標題”)、一個指示標題欄位結束的空行(即,在 CRLF 之前沒有任何內容的行),可能還有一個消息體。
要解決此問題,請
echo
在 之前放置另一個echo "<html>"
,以便標題與正文明確分開。