綜述
boa 作為一種輕巧實用的 web 伺服器廣泛應用於嵌入式裝置上,
但 boa 對實現動態網頁的 cgi 的支援上仍存在一些缺陷,
本文描述了 boa 對 cgi 的 status/location 的支援的缺陷及其修正方法.
版本:所有版本 (0.94.13)
缺陷:boa 解析 cgi 應答頭時不能完整處理 status 和 location
缺陷描述:
cgi/1.1 標準規定, cgi 指令碼可以通過 status 設定 http 應答狀態(如, status: 500 internal error) 和
location 進行位址重定向 (如, location: www.***.com), 而不管它們在應答頭中的位置.
boa 支援 stauts 和 location 兩種應答頭, 但它的實現僅能正確處理 stauts 和 location 在應答第一行的
cgi 應答. 這將給 cgi 程式的移植帶來很多不便, 進而影響 boa 作為web server 的功能的發揮.
影響功能:
asp/php/jsp/perl/... 等的 header, redirect, ... 等都會應用到 stauts/location 進行設定應答狀態和
位址重定向. boa 的該實現將影響 cgi 指令碼正常功能的使用.
缺陷功能對比(對status/location的支援程式):
完全支援 完全支援 * 部分支援 完全支援 完全支援
缺陷分析
cgi 應用程式進行應答時, 可以 http 頭進行有限的控制. 如,設定客戶端不快取頁面可用下面的 c 指令碼,
http/1.0: printf("pragma: no-cache/n"); 或
如果, 同時還需要告訴瀏覽器進行設定 cookie 和控制相應狀態(200 ok) 或位址重定向,
那麼就必須輸出多行 http 頭控制語句, cgi 支援兩個解析頭 "status: " 和 "loction: ",
即協議規定, web 伺服器支援解析頭時能使用 "status: " 進行應答狀態控制, 使用 "location: " 進行位址重定向,
並為應答新增狀態頭 "http/1.0 302 moved temporarily/n" 或 "http/1.1 302 found/n".
而不管它們在 cgi 應答頭的什麼位置.
分析 boa source code:
cgi_header.c line 82-136 容易發現, boa 只解析 cgi 應答的第一行, 是否為 "status: ", "location: ", 如下所示
2324 int process_cgi_header(request * req)
25
47 }
48 if (req->******)
55 if (!strncasecmp(buf, "status: ", 8)) else if (!strncasecmp(buf, "location: ", 10)) else
107 req->status = done;
108 return 1;
109 } else
127 howmuch = req->header_end - req->header_line;
128
129 if (dest + howmuch > req->buffer + buffer_size)
138 memmove(dest, req->header_line, howmuch);
139 req->buffer_end += howmuch;
140 req->header_line = req->buffer + req->buffer_end;
141 req->header_end = req->header_line;
142 req_flush(req);
143 if (req->method == m_head)
144 return 0;
145 }
146 return 1;
147 }
148149
修正方法
cgi 應答頭包括多行, 我們必須對其進行逐行分析, 並作出正確的應答.
下面是修改好的源程式, 即將原來的 82-136 (即相當下文#else, #endif內部分) 替換成如下**:
複製**
缺陷和缺陷報告
文章目錄 一 缺陷的基本概述 1 缺陷的定義 重要 2 缺陷屬性 二 缺陷的生命週期 重要 三 缺陷的識別 四 缺陷報告 五 測試需求 測試用例 缺陷報告的關係?軟體未實現產品說明書要求的功能 軟體出現了產品說明書指明不該出現的功能 軟體實現了產品說明書未提到的功能 軟體未實現產品說明書雖未明確提及...
缺陷型別 缺陷種類介紹
軟體缺陷的定義 軟體缺陷,常常又被叫做bug,從產品內部看,缺陷是軟體產品開發或維護過程中存在的錯誤 毛病等各種問題 從產品外部看,缺陷是系統所需要實現的某種功能的失效或違背。按照軟體缺陷的產生原因,可以將其劃分為不同的缺陷類別 1 功能不正常 簡單地說就是所應提供的功能,在使用上並不符合產品設計規...
晶體缺陷 點缺陷
在晶體中,位於點陣結點上的原子並非是靜止的,而是以其平衡位置為中心做熱振動。原子的振動能是按機率分布,有起伏漲落的。當某一原子具有足夠大的振動能而使振幅增大到一定限度時,就可能克服周圍原子對它的制約作用,跳離其原來的位置,使點陣中形成空結點,稱為空位。離開平衡位置的原子有三個去處 一是躍遷到晶體表面...