大多數URL方案的URL語法都建立在這個由9部分構成的通用格式上:
scheme://user:password@host:port/path;params?query#frag
方案:http或者https
主機與端口:http://www.nihao.com:80/index.html
用戶名和密碼:ftp://joe:123@ftp.edu/pub http://joe:123@www.nihao.com
路徑:http://www.nihao.com/image/1.jpg
這個URL中的路徑為/image/1.jpg, 路徑是服務器定位資源時所需的信息,可以用字符“/”將
HTTPURL的路徑組件划分成一些路徑段(path segment),每個路徑段都有自己的參數(param)
組件
參數:很多時候負責解析URL的應用程序需要這些協議參數來訪問資源,否則另一端的服務器可
能就不會為請求提供服務,或者更糟糕提供錯誤服務,為了正確與服務器進行交互,就得向服務
器上的應用程序提供它們所需的輸入參數 比如:
ftp://prep.edu/pub/gnu;type=d
http://www.joes.com/hammers;sale=false/index.html;graphics=true
HTTP URL的路徑組件可以分為若干路徑段,每段都可以有自己的參數
查詢字符串:很多資源,比如數據庫服務,都可以通過提問題或查詢來縮小所請求資源類型范圍
假設joe的五金店在數據庫中維護着一個未售貨物的清單,並可以通過清單進行查詢,以判斷產品
是否有貨,就可以用下面的URL來查詢web數據庫網關,看看編號為12731的條目是否有貨:
http://www.joes.com/inventory-check.cgi?item=12731
?右邊的內容被稱為查詢(query)組件,URL的查詢組件和標識網關資源的URL路徑組件一起被發
送給網關資源,基本上可以將網關當作訪問其他應用程序的訪問點

查詢可以有多個:http://www.joes.com/inventory-check.cgi?item=12731&color=blue
片段:有些資源類型比如HTML除了資源級外,還可以做進一步的划分,比如對一個帶有章節的
大型文檔來說,為了引用部分資源或資源的一個片段,URL支持使用片段(frag)組件來表示一個
資源內部的片段,比如URL可以指向HTML文檔中一個特定的圖片或小節
片段掛在URL的右手邊,最前面有一個字符“#”
HTTP服務器通常只處理整個對象,而不是對象的片段,客戶端不能將片段傳送給服務器,瀏覽器
從服務器獲得了整個資源之后,會根據片段來顯示你感興趣的那部分資源

HTTP報文由三個部分組成:對報文進行描述的起始行(start line) ,包含屬性的首部(header)
塊,以及可選的包含數據的主體(body)部分
報文的主體(或者就稱為主體)是一個可選的數據塊,可以包含文本或二進制數據,也可以為空

上圖Content-Type說明主體是純文本文檔, Content-Length說明主體有多大19個字節
所有HTTP報文都可以分為兩類:請求報文(request message)和響應報文(response message)
請求報文的格式:
<method> <request-URL> <version>
<headers>
<entity-body>
響應報文的格式:
<version> <status> <reason-phrase>
<headers>
<entity-body>

