Bash

500:來自 CGI 程序的內部伺服器錯誤

  • June 29, 2021

我正在嘗試編寫一個從 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>",以便標題與正文明確分開。

引用自:https://unix.stackexchange.com/questions/123866