HTTP ( Hypertext Transfer Protocol 超文件傳輸協定 ) 是誰發明的?
HTTP是由W3C ( World Wide Web Consortium ) 與IETF ( Internet Engineering Task Force ) 一起共同發展,經由許多RFCs ( Request For Comments ) 來定義,而其中RFC 2616為大眾普遍使用的一個版本HTTP-1.1。HTTP於1990年開始被使用,當時最初的版本 – HTTP-0.9 – 是用於在網路上傳送一些原始數據資料,且只支援GET一種Request,不支援POST,導致Client不能向Server傳送太多訊息。 HTTP-1.0則讓HTTP-0.9成為一個更加完善的通訊協定,它允許資料以MIME (註一)的方式傳送,並且修正了一些Request、Respond的句法等。 但HTTP-1.0並不是盡善盡美,它沒有考慮到分層處理 ( hierarchical proxies )、虛擬主機 ( virtual hosts ) 等問題。 對於這些問題,HTTP-1.1誕生了,有了緩存處理、頻寬和網路連接的管理以及安全和完整性,是目前應用最廣泛的通訊協定便屬HTTP-1.1,而HTTP-1.0依然廣泛應用在代理伺服器的範圍中。
(注一)MIME為多用途網際網路郵件擴展 ( Multipurpose Internet Mail Extensions ) 的縮寫,是一種網際網路標準,使電子郵件能夠支援非ASCII字元和二進位格式附件等多種格式附件的郵件消息,簡單來說是一種文檔格式,定義的目的是讓文檔可以夾帶文字、檔案、音效、影片、圖片,發佈文檔的人可以自訂格式,而讀取文檔的人必須確定各個夾帶片段的讀取方式。
HTTP ( Hypertext Transfer Protocol 超文件傳輸協定 ) 是什麼東西?
HTTP是全球資訊網 ( WWW ) 上進行檔案交換的一套規則,用來界定首頁與HTTP伺服器之間的互動。相對於TCP/IP協定,HTTP是一種應用協定。HTTP最主要的特性之一在於,它是一個跨平台標準,存放在不同電腦系統的資料,都可以經由網際網路 Internet 互連。通訊時,一端必須執行HTTP用戶端程式,另一端必須執行HTTP伺服軟體,這個協定以純文字的方式來傳輸資料、超文件、聲音、影像等,它之所以稱為超文件傳輸協定是因為它在超文件環境裡的效率性,能夠讓人從一個文件快速的跳躍到另一個文件,超文件傳輸協定的觀念很簡單,客戶送一個要求給伺服器,伺服器則送一個回應給客戶,就像回信一樣。來自客戶至伺服器的命令被嵌入在以文字為基礎的要求訊息裡,所要求的檔案與訊息內容也是被嵌入在以文字為基礎的回應訊息裡,HTTP可以說是Client端和Sever端之間溝通的語言。
HTTP它是位於應用層 (Applicaton Layer) 的一個通訊協定,應用層是屬於OSI Model(圖一)裡的最上面一層,支援使用者應用作業,例如 : 檔案傳輸、電子郵件、虛擬終端、訊息處理系統...。應用層需要負責為使用者提供服務,在客戶─伺服器架構中 (Client-sever architecture),每個應用是由兩個分離但相關程式所組成:一個是客戶程式,另一個是伺服器程式。伺服器程式必須一直執行,客戶程式可以只在需要的時候執行。意味著執行伺服器程式的電腦必須一直保持開機,而執行客戶程式的電腦則是在需要時才開機。執行伺服器的電腦稱為伺服器,執行客戶程式的電腦稱為客戶。 當客戶對伺服器送一個請求時,客戶端必須事先知道伺服器應用層的位址,客戶端需要網際網路伺服器的實體位址,這種情況就類似我們只知道某人的姓名,而要寄信給某人。郵局無法傳送只寫著寄信人名子的信,所以實體位址是有必要的。應用層位址可以幫客戶端找到在網際網路上伺服器的實體位址。每台電腦在網際網路上都有一個位址,我們稱為邏輯位址或IP位址。

圖一
什麼是TCP/IP?
TCP/IP 傳輸控制協定 / 網際網路協定
TCP/IP是網際網路上的公開基本傳輸協定,包含了一系列的通訊協定及應用,提供各式不同之電腦硬體平台、通訊介質及作業系統以一個共通之方式交換資訊。如果從ISO的架構來看,它是屬於其中的第四層(TCP)及第三層(IP)。
TCP/IP可分成上下兩層,較高的一層是傳輸控制協定 ( TCP ),此一協定會將發出去的訊息或檔案分割成小包封 ( packet ),然後傳到網路上,而資料接收端的TCP在收到後會將這些小包封重新組合還原為原先的狀態,因此其主要功能在錯誤檢查 ( error checking ) 與循序編號 ( sequence numbering ),判定封包傳送時有無錯誤,若有錯誤即要求重傳。下層為網際網路協定 ( IP ),負責每個小包封的位址部份,確保每個包封都會傳到同一目的地。網路上每一閘道器上的電腦都會檢查此一位址,看看應該傳到什麼地方。拆成小包封後,每個小包封的傳送路徑可能都各不相同,不過最後這些包封還是會到達同一地點。
順帶一提,我們常常在打的 http://www.youtube.com/watch?v=Jamc3NYRFMI 中,
http:// 是指目前使用的通訊協定,當然也可以換成 ftp:// 等其他的通訊協定,端看你想如何傳輸資料。(兩橫斜線好像已經確定為沒用的)
www 指的是萬維網 World Wide Web,靠著網際網路的運行的服務,是一個資料空間。
youtube則是Sever的名稱,後面接著一長串是檔案名稱。
com 是指 commerce 是商業單位的意思。
順帶一提
.tw 就是 Taiwan 的縮寫,就是指國碼。
.jp 就是 Japan 的縮寫。
.hk 就是 Hong kong 的縮寫。
.cn 就是 China 的縮寫。
還有許多在網路上常見到的,
edu 教育單位
gov 政府組織
org 財團法人
idv 個人單位
一個標準的URL (全球資源定位器) 格式如下:
protocol://host.domain/path/filename
protocol 為網路資源的通訊協助名稱。
host.domain 為所連線網路資源的主機名稱。
path/filename 為網路資源存放在網站內的路徑及檔案名稱。
注意:URL的主機名稱的英文字母是可以不分大小寫的,但路徑及檔案名稱的英文字母,大小寫被分 視為不同字母,一定要分清楚才能找到網路資源。
那HTTP是如何運作的呢?
┌───────┐───────────Request───────>>>>>┌────────┐
│ Client │ │ Sever │
└───────┘<<<<<──────Response─────────── └────────┘
因為HTTP是建立在Request以及Respond上,所以當Client對伺服器Server發出請求後,Sever會針對Client的Request做出適當的Respond。這過程可以簡單想成在家沒事訂比薩,你(Client)打給必勝客(Sever)跟他說你要一份超級什錦厚的(Request),必勝客便會在四十分鐘之後把超級什錦送到你家,也就是Respond。超級好懂,又簡單又扼要。只不過在他送比薩的過程中,是一片一片送不是整片送,因為資料都會切割成一個一個的封包做傳輸,等到達Client端後在做組合,像Youtube可以在整部影片還未傳送完的狀況下搶先收看就是因為前頭的影片封包已經到位並且按照順許組合好了,所以才不需要等待。
在WWW裡,Client與Sever的關係只是一時的,只有在連結期間才確定誰是Client端誰是Sever端,Clent端也有機會做Sever端。也就是 說有一天你可能也會去送比薩,果頁果頁。
一般HTTP是在TCP 80做傳輸,使用TCP,瀏覽器或伺服器都無須擔心遺失訊息、重複訊息、長訊息、或者回應等,因為這些細節TCP服務處裡就可以完成。至於為什麼Port要設成80?因為大家都用80。在不同Port之間是沒辦法做傳輸的,也就是Client與Sever兩邊的Port必須是一樣才可互相傳輸資料。
(補充)
連接埠口: 21 FTP ,檔案傳輸協定的命令通道。
22 SSH ,較為安全的遠端連線伺服器。
23 Telnet ,早期的遠端伺服器連線軟體。
80 WWW , 全球資訊網伺服器。
110 POP3 ,郵件收信協定,辦公室用的收信軟體都靠它。
443 https , 有安全加密機制的WWW伺服器。
HTTP也是有加密的機制,使用SSL ( Security Socket Layer ) 對HTTP加密形成 https (http over SSL ) 當你發現目前你所在的網頁一開始的協定是https而不是http時,表示你正在瀏覽加密過的網頁。
當然,網址的背後,是有一組數字存在的,我們稱作為IP位址,例如 140.136.149.200 (禮拜一晚上的夢厭),也就是代表其在Internet上的位址,對應到網址之後,我們就可以不用記數字,只要記網址名稱便可以找到該網站,你可以想像這些網站就是一部一部的電腦,而你所看到的就是存在這些電腦裡面,當然這些電腦需要跟網路連線,而你的電腦必須也要上網才看的到。
透過HTTP或者HTTPS協議請求的資源由統一資源定位器(Uniform Resource Identifiers)(URLs)來標識
HTTP/1.1協議中定義八種方法表明Request-URI指定的資源不同操作方式:
-
- Request Method
-
- OPTIONS
- 返回服務器針對特定資源所支持的HTTP請求方法。也可以利用向Web服務器發送'*'的請求來測試服務器的功能性。
- HEAD
- 向服務器索要與GET請求相一致的響應,只不過響應體將不會被返回。這一方法可以在不必傳輸整個響應內容的情況下,就可以獲取包含在響應消息頭中的元信息。
- GET
- 向特定的資源發出請求。注意:GET方法不應當被用於產生「副作用」的操作中,例如在Web Application中。其中一個原因是GET可能會被網路蜘蛛等隨意訪問。
- POST
- 向指定資源提交數據進行處理請求。數據被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。
- PUT
- 向指定資源位置上傳其最新內容。
- DELETE
- 刪除指定資源。
- TRACE
- 回顯服務器收到的請求。
- CONNECT
- HTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器。
Status Code (網頁錯誤碼)
1xx: Informational - Request received, continuing process
100:Continue
101:Switching Protocols
2xx: Success - The action was successfully received, understood, and accepted
200: OK
201: Created(已建立的)
202: Accepted(已接受的)
203: Non-Authoritative Information(非授權資訊)
204: No Content(無內容)
205: Reset Content(重設內容)
206: Partial Content(部分內容)
3xx:Redirection - Further action must be taken in order to complete the request
300: Multiple Choices
301: Moved Permanently
302: Found
303: See Other
304: Not Modified(為修改)
305: Use Proxy
307: Temporary Redirect(暫時重新導向)
4xx: Client Error - The request contains bad syntax or cannot be fulfilled
400: Bad Request(錯誤要求)
401: Unauthorized
402: Payment Required
403: Forbidden(禁止使用)
404: Not Found(找不到)
405: Method Not Allowed(不允許使用用來存取這個頁面)
406: Not Acceptable(用戶端瀏覽器不接受要求頁面的MINE)
407: Proxy Authentication Required(需要Proxy認證)
408: Request Time-out(請求逾時)
409: Conflict
410: Gone
411: Length Required
412: Precondition Failed(指定條件失敗)
413: Request Entity Too Large(要求的實體太大)
414: Request-URI Too Large(要求URI太長)
415: Unsupported Media Type(不支援的媒體類型)
416: Requested range not satisfiable(無法滿足要求的範圍)
417: Expectation Failed(執行失敗)
5xx: Server Error - The server failed to fulfill an apparently valid request
500: Internal Server Error(內部伺服器錯誤)
501: Not Implemented(標題值指定沒有實作設定)
502: Bad Gateway(Web伺服器在作為閘道或Proxy時收到無效的回應)
503: Service Unavailable(服務無法使用)
504: Gateway Time-out(閘道逾時)
505: HTTP Version not supported(不支援Http版本)
Http 只是所有通訊協定裡面的一種,還有很多種,那又是另一個故事了....
FTP ( File Transfer Protocal ) 檔案傳輸協定,是在TCP/IP網路使用的一種檔案通訊協定,定義如何使連線好的電腦相互傳送檔案,傳送時,程式會自動將檔案切成多個小塊,以便快速傳輸,之後再由接收端程式將切割過後的小塊重新組合,適合容量大的檔案傳輸。
SMTP(pop3)( Post Office Protocal 3 )收信通訊協定第三版,在Internet這個網路虛擬的電子世界中,電子郵件是由郵件伺服器負責收發的。POP3伺服器負責讓使用從郵件伺服器的個人信箱中將信件取回以供閱讀,而負責傳遞電子郵件的電腦伺服器則為SMTP。
Telnet,一種執行遠程載入的工具,以便連上遠端的主機。BBS ( Bulletin Board System 電子公佈欄系統 )就是用這個來傳輸。