2008年5月16日 星期五

Homework 4-11-2008

1. What does a CGI output contain in the HTTP header? Hint: Such as Content-type. More details in Appendix A of Textbook.
ans :
CGI資料輸出以STDOUT方式送出,而送出的資料是要遵照HTTP的協定(一種很簡單的client-server通訊協定,client和server之間的溝通由兩部分所組成,一是HTTP headers,另一就是文件或資料本身了,中間則以一個空白行隔開。)。為了要讓WWW伺服主機能辨識不同的資料型態,所以CGI在送出資料前,必須先送出MIME資訊以分辨資料型態。也就是HTML的檔頭(HEADER)部分。WWW收到檔頭後,如果無法判讀資料形態,就會毫不改變的將原資料送給使用者端的瀏覽器上。為避免這種情形,CGI程式應該送出符合MIME資料型態的格式:檔頭格式Content-type。如果使用者不希望由WWW伺服主機包裝,則可以自行將CGI程式輸出加入"HTTP/1.0"的訊息及完整的訊息封包,如此主機只要檢查到有此字串,會視此文件為已包裝,而直接將文件送到使用者端的瀏覽器上。輸出到使用者瀏覽器上的文件因為不是事先存在WWW伺服主機上的文件,所以稱為動態網頁。簡單來說就是:資料傳輸要讓WWW辨識不同資料類型,由Content-type定義網頁內容類型,而我們不希望由WWW伺服主機包裝,就自行將CGI程式輸出加入"HTTP/1.0"的訊息及完整的訊息封包,也就是將CGI輸出包涵在HTTP header中。

2. If you want to upload an mp3 file, should you use the GET or POST method? Why?
ans :
(1).用method="POST"。
(2).Form中的get和post方法,在數據傳輸過程中分別對應了HTTP協議中的GET和POST方法。二者主要區別如下:
Get是用來從服務器上獲得數據,而Post是用來向服務器上傳遞數據。
Get將表單中數據的按照variable=value的形式,添加到action所指向的URL後面,並且兩者使用「?」連接,而各個變量之間使用 「&」連接;Post是將表單中的數據放在form的數據體中,按照變量和值相對應的方式,傳遞到action所指向URL。
Get是不安全的,因為在傳輸過程,數據被放在請求的URL中,而如今現有的很多服務器、代理服務器或者用戶代理都會將請求URL記錄到日誌文件中,然後 放在某個地方,這樣就可能會有一些隱私的信息被第三方看到。另外,用戶也可以在瀏覽器上直接看到提交的數據,一些系統內部消息將會一同顯示在用戶面前。 Post的所有操作對用戶來說都是不可見的。
Get傳輸的數據量小,這主要是因為受URL長度限制;而Post可以傳輸大量的數據,所以在上傳文件只能使用Post(當然還有一個原因,將在後面的提到)。
Get限制Form表單的數據集的值必須為ASCII字符;而Post支持整個ISO10646字符集。
Get是Form的默認方法。

3. Reading Assignments:XML (Page 187-188 on the Textbook)

沒有留言: