要編寫兩個用於網絡通信的應用軟件,程序員必須會考慮幾個問題:
- 傳輸的信息的語法和語義
- 客戶端或者服務器端是否可以開始通信
- 當通信出錯時怎麼辦
- 什麼時候結束通信
爲了規範這些細節,程序員編寫了應用層協議。應用層協議根據用途劃分主要分爲兩大類:
- Private communication.
- Standardized services.
這個很好理解,對於互聯網服務來說,如果你是私人用途的話,這個通信過程是直接的,無需爲這個寫一個正式地通用的協議(作者接觸的實例較少,無法舉個很恰當的例子);而如果這個互聯網服務希望廣大的程序員爲它編寫服務器軟件(用來提供服務)或客戶端軟件(用來獲取服務),這種情形下,應用層協議必須獨立於任何實例,並且這個協議的規定必須準確清晰,保證互操作性。例如Web服務。
應用層協議主要有兩方面的規範:描述(Representation)和傳輸(Transfer)。
World Wide Web 是被應用得最廣的互聯網服務。由於Web很複雜,產生了針對不同部分和細節的協議標準。
URL(Uniform Resouece Location)的基本格式:
protocol:// computer_name:port/ document_name%parameters
HTTP(HyperText Transfer Protocol)的主要表徵:
- 使用文本控制消息
- 傳輸二進制文件
- 上載或下載數據
- 合併緩存
在應用層傳輸的是HTTP數據包。
A Get request:
GET /item version CRLF
使用HTTP時,瀏覽器發送版本信息給服務器,然後選擇兩邊都能理解的最高HTTP版本。即HTTP協商。
A basic response header:
HTTP/1.0 status_code status_string CRLF
Server: server_identification CRLF
Last-Modified: date_document_was_changed CRLF
Content-Length: datasize CRLF
Content-Type: document_type CRLF
CRLF
status_code狀態碼 status_string狀態描述
server_identification服務器描述,可能包含服務器域名
content-length the size of the data item單位是byte
content-type 文件類型/文件格式 eg. text/html image/jpeg
Header+blank line+contents