Sun 認證 Web 元件開發人員/第 1 節/HTTP 方法
HTTP 是一種簡單但功能強大的協議,創建於 1990 年代初期,用於傳輸文字(最初是 ASCII,然後是 HTML)。它的運作非常簡單,這解釋了它為何傳播如此之快。它背後的理念是,伺服器上有一個資源,而客戶端想要對其進行操作。對於每種可能的動作,協議中都存在一種方法。協議中可用的方法是用於基本 CRUD 操作的方法,再加上一些其他客戶端 - 伺服器和代理伺服器通訊方法。
在 JEE 規範中,Web 容器處理協議細節,並且當使用 HTTP 作為通訊協議(大多數情況下)時,容器會將請求重定向到擴充套件 HTTPServlet 的類。HTTPServlet 類是 HTTP 方法的無操作處理程式。對於每個協議方法,除了 Connect 之外,HTTPServlet 類中都有一個等效的方法。例如,對於 Get 方法,類中存在 doGet 方法。
它們都接收兩個引數:HTTPServletRequest 和 HTTPServletResponse。透過這兩個介面,可以訪問與客戶端一起建立的輸入流以及請求來自哪裡,還可以訪問輸出流,答案將寫入其中。實際上,這就是 servlet 通常向 HTML 客戶端傳送響應的方式,儘管這不是最推薦的方式。
HTTPServletRequest 還提供對許多其他功能的訪問,例如 會話管理、請求引數以及在 HTTP 請求 中描述的許多其他功能。
HTTP 響應 還具有許多其他功能,主要與將響應分派到正確的位置相關。
對於 SCWCD 考試,沒有必要深入瞭解每種方法,只需瞭解兩種方法,因為它們是日常工作中使用最廣泛的兩種方法:GET 和 POST。有關每種方法的完整方法列表和描述,可以在 HTTP 協議 的維基百科頁面上找到,建議您閱讀該頁面並瞭解協議的基礎知識,然後再繼續。
這兩種方法是最簡單的,並且大多數情況下,客戶端需要的只是從伺服器 獲取 東西。有時事情會變得更加複雜,使用者需要在伺服器上更改一些東西,這就是 Post 為我們提供的幫助。該協議就是考慮到這一點而構建的,使用者可以從伺服器 獲取 東西並在那裡 釋出 東西。
這兩種方法之間的主要區別是 POST 有一個主體,而 GET 沒有。可以使用此主體將資料從客戶端傳送到伺服器以更改某些內容。可以在此主體中傳送任意數量的資料。
GET 也可以將資料傳送到伺服器,但方式不同。一個 URL 可以有一個 查詢 部分。此查詢是 get 可以將資料傳送到伺服器的位置。問號 (?) 用於將資源與 URL 的查詢部分隔開。POST 也可以這樣做,資料可以在 POST 請求中的主體和 URL 中同時傳送。
在 URL 中傳送資料有兩個缺點
- 第一個缺點是,可以傳送的資料量有限,並且在大多數瀏覽器中,限制為 256 個字元 - 這很多,但如果要傳送一個大型表單,資料可能會被遺漏
- 第二個缺點是保密性,因為當您在 URL 中傳送資料時,任何可以檢視瀏覽器或被請求的 URL 的人都會看到它,並且使用者可能希望將其新增為書籤,並且資料將與它一起儲存,如果正在傳送信用卡號或任何其他機密資料,這是不好的
這兩種方法之間的另一個區別是,正如協議所設計的那樣,POST - 理論上 - 不是 冪等的。這意味著如果您執行相同的請求兩次,結果可能會有所不同。請注意,在上一句話中添加了“理論上”,因為可以設計一個應用程式,使其 GET 方法更改伺服器中的某些內容,因此,每次請求都會導致不同的答案。協議的設計使 GET 是 冪等的,而 POST 不是,但它們的實現方式由開發人員決定。
另一個需要注意的重要事項是,使用者不喜歡等待,因此他們會在傳送第一個請求後(當然)多次點選按鈕。應用程式應該保證的事情之一是,在 Web 應用程式中兩次付款之類的操作不會發生。通常,遵循上一段中描述的基本規則會有所幫助。同步重要請求 - 例如為產品付款 - 可以是解決此棘手問題的辦法之一。