首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

CGI 程式開發入門:原理、輸入輸出與環境變數完整指南

     編輯:關於C語言

CGI 運作原理

CGI (Common Gateway Interface) 定義 Web 伺服器與外部程式的介面標準。流程:

  1. 瀏覽器送出 HTTP 請求(含表單資料)。
  2. Web 伺服器依副檔名/目錄判斷為 CGI 程式,啟動新行程。
  3. 伺服器透過環境變數傳遞請求元資料,透過 標準輸入 (STDIN) 傳遞實體資料(POST)。
  4. CGI 程式處理後,透過 標準輸出 (STDOUT) 輸出 HTTP 回應(含 Header 與 Body)。
  5. 伺服器捕獲輸出,補全 Header 傳回瀏覽器。

關鍵環境變數

資料編碼與解析

  • GET: 參數附加於 URL,經 URL 編碼(空格→+ 或 %20,特殊字元→%XX),從 QUERY_STRING 取得。
  • POST: 資料在請求主體,長度由 CONTENT_LENGTH 指定,從 stdin 讀取,格式同 GET(application/x-www-form-urlencoded)或 multipart/form-data(檔案上傳)。

解碼步驟:+→空格 → %XX→對應 ASCII 字元 → 以 & 分割鍵值對 → 以 = 分割鍵值。

C/C++ CGI 程式骨架

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char *method = getenv("REQUEST_METHOD");
    char *query = getenv("QUERY_STRING");
    int len = atoi(getenv("CONTENT_LENGTH") ?: "0");
    
    char *input = malloc(len + 1);
    if (strcmp(method, "POST") == 0) fread(input, 1, len, stdin);
    else strcpy(input, query);
    input[len] = '\0';
    
    // 解析 input 取得參數...
    
    printf("Content-Type: text/html\r\n\r\n");
    printf("<html><body>Hello CGI!</body></html>");
    return 0;
}

安全與效能注意

  • 嚴格驗證所有輸入長度、字元,防緩衝區溢位、命令注入、XSS。
  • 每請求啟動新行程開銷大,高流量建議改用 FastCGI、ISAPI、ASP.NET Core 等常駐模型。
  • 輸出 Header 必須以空行結束(\r\n\r\n),否則伺服器視為 Header 未結束。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
變數說明
REQUEST_METHODGET 或 POST(決定資料來源)
CONTENT_LENGTHPOST 資料位元組數
QUERY_STRINGGET 參數字串(URL ? 後內容)
CONTENT_TYPEPOST 資料 MIME 類型(通常 application/x-www-form-urlencoded)
HTTP_COOKIE客戶端 Cookie
HTTP_USER_AGENT瀏覽器識別字串
REMOTE_ADDR客戶端 IP
SERVER_NAME/PORT/PROTOCOL伺服器資訊