URL的結構介紹


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

參考:Web之困

  1. 什么是URL

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

Scheme:

//

Login:password@

Address

:port

/path/to/resource

?query_string

#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

用;(分號)作為開始標識。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM