URL格式解析


 一、URL格式

http:\\host[:port][abs_path][:parameters][?query]#fragment

例如:http://www.imailtone.com:80/WebApplication1/WebForm1.aspx?name=tom&;age=20#resume

http表示要通過HTTP協議來定位網絡資源。

host表示合法的因特網主機域名或者IP地址。

port用於表示在傳輸層上交換信息的進程端口號,http協議默認端口號爲80,當然採用不同的協議默認端口號不同。

abs_path指定請求資源的URI(統一資源定位符)。

parameters參數用於指定特殊參數的可選項。

?query可選,用於給動態網頁(使用PHP/JSP等製作的網頁)傳遞參數,可以有多個參數,用“&”符號隔開,每個參數的鍵值之間用‘=’隔開。

可以這樣解析URL地址(Python)

import urlparse

lis = urlparse.urlparse(url)

url ='http://zh.wikipedia.org:80/wiki/Special:Search?search=鐵路&Go=go'

完全按照上面的格式解析了URL地址


http 是協議;

zh.wikipedia.org,是服務器;

80 是HTTP協議默認端口;

/wiki/Special:Search 服務器上存放該資源的目錄路徑

 query='search=\xcc\xfa\xc2\xb7&go=Go' 是動態網頁的查詢


二、服務器通過HTTP與瀏覽器的交互


(1)http請求


客戶端通過發送http請求向服務器請求資源的訪問

http請求由三部分組成,分別是:請求行、消息報頭、請求正文。

請求行的格式如下:

MethodRequest-URIHTTP-VersionCRLF

第一個參數方法符號,詳細方法下面將列出

第二個參數是請求URI(統一資源定位符)

第三個參數表示協議版本

第四個是換行符

這四部分均以空格間隔,除了結尾外,其他三部分不允許出現CR或者LF字符

例如 GET /tmp.html HTTP/1.1 (CRLF)


(2)http請求方法



下面是一些例子:


GET方法: 當我們通過瀏覽器的地址欄輸入網址的方式去訪問網頁的時候,瀏覽器就是採用GET方法向服務器獲取資源。

   如:GET Request-URL HTTP/1.1 

POST方法:該方法用於向服務器發送請求,這種方法要求服務器接收附在請求後面的數據,多用於提交表單數據

如:POST /login.jsp HTTP/1.1 (CRLF)

注意,在HTML文檔中,書寫get和post,不區分大小寫,但HTTP協議中的GET和POST只能是大寫形式。

HEAD方法:HEAD方法與GET方法幾乎是一樣的,它們的區別在於HEAD方法只是請求消息報頭,而不是完整的內容。

利用這個方法,不必傳輸整個資源的內容,就可以得到Request-URI所標識的資源的信息。

(3)HTTP響應


在接收和解釋請求消息後,服務器會返回一個HTTP響應消息。

  與HTTP請求類似,HTTP響應也是由三個部分組成,分別是:狀態行,消息報頭,相應正文。

  狀態行由協議版本,數字形式的狀態代碼,相應的狀態描述組成,各元素之間以空格分隔,除了結尾的CRLF(回車換行)序列外,不允許出現CR或LF字符。格式如下:

  HTTP-Version Status-Code Reason-Phrase CRLF

  HTTP-Version表示服務器HTTP協議的版本,Status-Code表示服務器發回的響應代碼,Reason-Phrase表示狀態代碼的文本描述,CRLF表示回車換行。

Status-Code(狀態代碼):由三位數字組成,表示請求是否被理解或者滿足;

狀態代碼的第一個數字代表的響應的類別:

1xx:指示信息——表示請求已接收,繼續處理

   2xx:成功——表示請求已經被成功接收,理解,接受

   3xx:重定向——要完成請求必須進行更進一步的操作

   4xx:客戶端錯誤——請求有語法錯誤或請求無法實現

   5xx:服務器端錯誤——服務器未能實現合法的請求

Reason-Phrase(狀態描述):關於狀態代碼的簡短文本描述;

  例如:

  HTTP/1.1 200 OK (CRLF)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章