HTTP 網路程式設計簡介

基礎篇

C# 簡介

開發環境

變數與運算

流程控制

陣列

函數

物件

例外處理

函式庫篇

檔案處理

資料結構

正規表達式

Thread

應用篇

視窗程式

媒體影音

網路程式

遊戲程式

手機程式

資料庫

雲端運算

特殊功能

委派

擴展方法

序列化

LinQ

WPF

網路資源

教學影片

投影片

教學文章

軟體下載

考題解答

101習題

簡介

HTTP 協定是 Web 的基礎,Web 是一個典型的 Client-Server 架構,主要由 HTTP+URL+HTML 所組成。

Web Server (網站伺服器) 是 WWW 網路的基礎, 1991 年 Tim Burner Lee 發明 HTML 與 URL 後,就自己寫了第一個
Web Server,導至後來 Web 網路的興起,因此、Tim Burner Lee被尊稱為 WWW 之父,然而、對於一般程式設計人員而言,
Web Server 的設計方法卻是個難解的謎,本篇文章將以一個簡單而完整的 Java 程式,讓大家了解 Web Server 的設計原理。

一個最簡單的 Web Server 之功能包含下列三個步驟:

  • 步驟一 : 接收瀏覽器所傳來的網址。
  • 步驟二 : 取出相對應的檔案。
  • 步驟三 : 將檔案內容傳回給瀏覽器。

然而、在這個接收與傳回的過程中,所有的資訊都必須遵照固定的格式,規範這個接收/傳送格式的協定,稱為超文字傳送協定
(Hyper Text Transfer Protocol),簡稱為 HTTP 協定。

HTTP 協定格式的基礎,乃是建構在網址 URL 上的傳輸方式,早期只能用來傳送簡單的 HTML 檔案,後來經擴充後也可以傳送
其他類型的檔案,包含 影像、動畫、簡報、Word 文件等。

在本文中,我們將先簡介 HTTP 協定的訊息內容,然後在介紹如何以 Java 語言實作 HTTP 協定,以建立一個簡單的 Web Server。

HTTP 協定

當你在瀏覽器上打上網址(URL)後,瀏覽器會傳出一個HTTP訊息給對應的 Web Server,Web Server 再接收到這個訊息後,
根據網址取出對應的檔案,並將該檔案以 HTTP 格式的訊息傳回給瀏覽器,以下是這個過程的一個範例。

豬小弟上網,在瀏覽器中打上 http://ccc.kmit.edu.tw/index.htm,於是、瀏覽器傳送下列訊息給 ccc.kmit.edu.tw 這台電腦。

GET /index.htm HTTP/1.0
Accept: image/gif, image/jpeg, application/msword, */*
Accept-Language: zh-tw
User-Agent: Mozilla/4.0
Content-Length: 
Host: ccc.kmit.edu.tw
Cache-Control: max-age=259200
Connection: keep-alive

當 ccc.kmit.edu.tw 電腦上的 Web Server 程式收到上述訊息後,會取出指定的路徑 /index.htm ,然後根據預設的網頁根目錄
(假設為 c:\web\),合成一個 c:\web\index.htm 的絕對路徑,接著從磁碟機中取出該檔案,並傳回下列訊息給豬小弟的瀏覽器。

HTTP/1.0 200 OK
Content-Type: text/html
Content-Length: 438

<html>
  ....
</html>

其中第一行 HTTP/1.0 200 OK 代表該網頁被成功傳回,第二行 Content-Type: text/html 代表傳回文件為 HTML 檔案,
Content-Length: 438 代表該 HTML 檔案的大小為 438 位元組。

進階閱讀

  1. HTTP : 永遠傳回 Hello 的 WebServer
  2. HTTP : 自己動手設計 WebServer
  3. HTTP : 用程式下載一個網頁
  4. HTTP : 網路爬蟲 (Crawler) 的設計
  5. HTTP : 瀏覽器的控制 (Browser)

參考文獻

  1. How Java Web Servers Work - http://www.onjava.com/pub/a/onjava/2003/04/23/java_webserver.html
  2. JDK API : java.net.ServerSocket - http://java.sun.com/j2se/1.4.2/docs/api/java/net/ServerSocket.html
  3. Hypertext Transfer Protocol - HTTP/1.0, [[http://www.w3.org/Protocols/HTTP/1.0/draft-ietf-http-spec.html
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License