URL的結構介紹

URL的結構,關於這方面的blog也能一搜一大把。。。最近也在看方面的基礎,也記錄下。。。javascript

參考:Web之困html

  1. 什麼是URL

URL(Uniform Resource Locator)統一資源定位符,就是由一串簡單的文本字符組成。一條符合規範的URL對應的是服務器的一個特定的資源(如HTML頁面,一張圖片等)。java

Scheme:python

//瀏覽器

Login:password@服務器

Address網絡

:port網站

/path/to/resourceurl

?query_stringspa

#fragment

按照完整的URL的結構定義,一共分紅上述8個部分,其中各部分有着必定的特徵,而且有些部分是必須的,有些是可選的。而標準的定義與瀏覽器對這些標準的實現又有着很大的差別。

Scheme部分:協議部分。

      協議名稱是由一串不區分大小寫的字母組成,以 做爲結束符。協議所表示的是獲取該資源須要使用的協議。如HTTP、HTTPS等。而瀏覽器將支持一些額外的協議,如data:和javascript:等。

 

//部分:層級URL標識符號

      基本上每一個URL中都會包含這個符號,是固定的;能夠理解爲把協議與後面的信息進行分隔開的一個符號。按照書上的說明,一個好處是Web應用無需關注某個協議的具體實現,而只須要關注於’//’符號後面的指向地址便可。

      可是也存在這非層級結構的URL:例如,mailto:協議。當使用

mailto:user@example.com?....的時候,該URL將可以傳遞到默認的郵件客戶端程序而無需其餘的解析。

 

Login:password@部分:身份驗證

      其實這一塊信息咱們看到的比較少,這是一個可選部分,通常的協議(http\https之類)都會使用默認的匿名形式進行數據獲取,該部分使用的是@做爲該部分的結束符號。

 

Address部分:服務器地址

      這是一個很關鍵的部分,這關係到你須要從哪一個服務器上去獲取資源。而咱們看到的比較多的是這部分以域名(htc.org)的形式呈現,還有以Ipv4(220.181.111.188)的地址呈現。固然也可以以Ipv6的形式呈現。

      按照標準的描述是這部分只能用:數字、「.」、「-」組成。但瀏覽器對這支持的字符會比較多

 

Port部分: 服務器端口

      這裏是屬於網絡端口,16位, 所以可選爲[0~2^16),這裏的端口並非物理端口,而是邏輯端口;只要是爲了處理多進程時數據進行傳輸的時候,保證各進程中數據不會發生紊亂,可以傳送到相應的進程中所設定的(參考:http://baike.baidu.com/link?url=MDeMzLjNepWAvUUhGaHPFZMnUk8z3oFGIVz_qqPkOr_HEFxGDf6Gf5pdJd7lVc_XOAfgta2D0augSiFRadL0Kq

不一樣網絡協議都有本身特定的端口號:如http 80

 

/path/to/resource:文件路徑

      前面提到的URL指向的是一個惟一肯定的資源,而這裏指向的是資源的完整路徑(即存儲的位置),通常都是用 / 進行分層描述。

 

?query_string:查詢字符串

      這裏的查詢字符串是用於參數傳遞給服務器端。但標準沒有對這一部分有着特別嚴格的規定。這一部分是以 ? 開始做爲標識,而如今通常的用法都是相似於如下的形式,?name=hello&id=5&… ,而且這種用法也被服務器端語言(如PHP等)所支持,如PHP獲取該查詢值的方法是:

$_GET['id'] $_POST['id']

#fragment: 片斷ID

      該部分與上面的?後面的表單信息本質的區別就是這部份內容不會被傳遞到服務器端。通常用於頁面的錨。就是咱們常見的網站右下腳通常有一個回到頂部的按鈕,通常就是使用其實現的。

例如:

<!DOCTYPE HTML>
<html>
    <head>
        <title>    return </title>
        <script>
            function file(){ var xx = "hello<br/>world<br/>" ; for( var i = 0; i < 100; i++ ){ xx += "<br/>" ; } xx += "ni<br/>hao<br/>" ; document.getElementById('aa').innerHTML = xx ; } </script>
    </head>
    <body onload = "file();">
        <p> nihao </p>
        <br>
        <br>
        <a name='hello'> hello hello hello </a> <br/>
        <p id = 'aa'>
        </p>
        <a href="#hello"> 返回HELLO </a>
        <a href="#" target="_self">返回頂部</a>
    </body>
</html>

 

Python獲取URL並處理

參考:

http://www.cnblogs.com/qq78292959/archive/2013/04/07/3005763.html

http://my.oschina.net/guol/blog/95699

python裏面獲取這一部分信息使用的是urlparse模塊。

解析成爲6部分,返回元組(scheme, netloc, path, parameters, query, fragment)

Scheme:

//

Login:password@

Address

:port

/path/to/resource

?query_string

#fragment

from urlparse import urlparse url = "https://www.zhangsanlisi.com/questions/1000;hello_world?id=10&name=zhangsan#hello" end_url = urlparse(url) print end_url

 

能夠與上面對應,其中netloc描述的是包括驗證信息+服務器地址+端口號;而params用的比較少,基本上比較難看到,用於指定特定的參數,參考(http://blog.csdn.net/yueguanghaidao/article/details/16368399

用;(分號)做爲開始標識。

相關文章
相關標籤/搜索