1. 程式人生 > >url解析

url解析

這幾天一直在做網路管理;其中有一塊需要設計一個後臺的下載程式,本來想使用呼叫系統命令,但考慮到會多開兩個程序,於是自己用socket寫了一個下載程式,其中關鍵部分就是對下載連結url的解析。

統一資源定位符 (Uniform Resource Locator, URL)  
是用於完整地描述Internet上網頁和其他資源的地址的一種標識方法。
Internet上的每一個網頁都具有一個唯一的名稱標識,通常稱之為URL地址,這種地址可以是本地磁碟,也可以是區域網上的某一臺計算機,更多的是Internet上的站點。簡單地說,URL就是Web地址,俗稱“網址”。
 
URI 方案集,包含如何訪問 Internet 上的資源的明確指令。
 
URL 是統一的,因為它們採用相同的基本語法,無論定址哪種特定型別的資源(網頁、新聞組)或描述通過哪種機制獲取該資源。  
 
對於 Internet 伺服器或全球資訊網伺服器上的目標檔案,可以使用“統一資源定位符 (URL)”地址(該地址以“http://”開始)。Web 伺服器使用“超文字傳輸協議 (HTTP)”,一種“幕後的”Internet 資訊傳輸協議。例如,http://www.microsoft.com/ 為 Microsoft 網站的全球資訊網 URL 地址。  
 
URL的一般格式為(帶方括號[]的為可選項):
 
protocol :// hostname[:port] / path / [;parameters][?query]#fragment  
 
例如:
 
http://www.imailtone.com:80/WebApplication1/WebForm1.aspx?name=tom&;age=20#resume
 
格式說明:
 
1、protocol(協議):指定使用的傳輸協議,下表列出 protocol 屬性的有效方案名稱。 最常用的是HTTP協議,它也是目前WWW中應用最廣的協議。  
 
file  資源是本地計算機上的檔案。格式file://  
ftp   通過 FTP訪問資源。格式 FTP://
gopher 通過 Gopher 協議訪問該資源。  
http  通過 HTTP 訪問該資源。 格式 HTTP://  
https  通過安全的 HTTPS 訪問該資源。  格式 target=_blank>HTTPS://
 
mailto 資源為電子郵件地址,通過 SMTP 訪問。 格式 mailto:
MMS  通過 支援MMS(流媒體)協議的播放該資源。(代表軟體:Windows Media Player)格式 MMS://
ed2k  通過 支援ed2k(專用下載連結)協議的P2P軟體訪問該資源。(代表軟體:電驢) 格式 ed2k://
Flashget  通過 支援Flashget:(專用下載連結)協議的P2P軟體訪問該資源。(代表軟體:快車) 格式 Flashget://
thunder  通過 支援thunder(專用下載連結)協議的P2P軟體訪問該資源。(代表軟體:迅雷) 格式 thunder://
news  通過 NNTP 訪問該資源。  
 
2、hostname(主機名):是指存放資源的伺服器的域名系統 (DNS) 主機名或 IP 地址。有時,在主機名前也可以包含連線到伺服器所需的使用者名稱和密碼(格式:

[email protected])。
 
3、:port(埠號):整數,可選,省略時使用方案的預設埠,各種傳輸協議都有預設的埠號,如http的預設埠為80。如果輸入時省略,則使用預設埠號。有時候出於安全或其他考慮,可以在伺服器上對埠進行重定義,即採用非標準埠號,此時,URL中就不能省略埠號這一項。
 
4、path(路徑):由零或多個“/”符號隔開的字串,一般用來表示主機上的一個目錄或檔案地址。
 
5、;parameters(引數):這是用於指定特殊引數的可選項。
 
6、?query(查詢):可選,用於給動態網頁(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技術製作的網頁)傳遞引數,可有多個引數,用“&”符號隔開,每個引數的名和值用“=”符號隔開。
 
7、fragment,資訊片斷,字串,用於指定網路資源中的片斷。例如一個網頁中有多個名詞解釋,可使用fragment直接定位到某一名詞解釋。
 
注意,Windows 主機不區分 URL 大小寫,但是,Unix/Linux 主機區分大小寫。
 
有些符號在URL中是不能直接傳遞的,如果要在URL中傳遞這些特殊符號,那麼就要使用他們的編碼了。下表中列出了一些URL特殊符號及編碼。
十六進位制值  
1. +       URL 中+號表示空格                        %2B  
2. 空格   URL中的空格可以用+號或者編碼      %20  
3. /        分隔目錄和子目錄                          %2F  
4. ?       分隔實際的 URL 和引數                  %3F  
5. %     指定特殊字元                                %25  
6. #      表示書籤                                      %23  
7. &      URL 中指定的引數間的分隔符        %26  
8. =      URL 中指定引數的值                     %3D  
 
 
網站URL規範與網站結構分析
 
談到網站URL和網站結構時,大家似乎覺得這兩個問題很簡單,從技術和理論角度分析,確實簡單;但是從網站長期運營和搜尋引擎友好方面去分析,網站URL和結構已經成為網站搜尋引擎友好的最大基礎性問題,網站URL和結構問題,早發現早優化,越是往後放,最後就成了制約網站運營和產品開發的決定性因素。
 
URL規範:
 
URL分為靜態URL和動態URL,網站不管採用靜態URL,還是動態URL,最後URL連結都要與具體對應頁面發生關係,換句話說是頁面狀態決定了動態URL,還是靜態URL,事實上頁面本身完全可以不存在,內容存放在資料庫中,如果資料庫內容沒有被前臺頁面呼叫,那麼資料庫的內容其實沒有任何意義,對網站來說。當資料庫內容被前臺呼叫時,那麼就產生了頁面,至於頁面使用動態URL還是靜態URL,這個決定於網站本身和技術能力的問題。如果單從使用者和搜尋引擎角度考慮,把頁面生成靜態URL是最好的策略,考慮到網站內容資料海量和伺服器承載壓力,靜態URL和動態URL配套使用是最佳的解決方案。說到這裡,靜態URL還可以細分為純靜態URL和偽靜態URL,動態URL非常容易理解。這裡我們先解釋一下什麼是靜態URL?什麼是動態URL?
 
靜態URL:
 
靜態網頁使用語言:HTML(超文字標記語言) 純靜態URL字尾多以html、htm形式,例如:http://visa.yeegt.com/country-france.html  
偽靜態URL字尾檔名稱+“/”形式,
例如:http://www.yeegt.com/eurailpass/
 
動態URL:
 
動態網頁使用語言:HTML+ASP 或 HTML+PHP 或 HTML+JSP 等 動態URL字尾多以程式設計語ASP 、PHP、JSP,或是傳引數形式,例如:http://package.yeegt.com/Package.aspx?Id=529 動態URL、純靜態以及偽靜態URL優勢和劣勢: 動態URL的優勢是大幅度降低了技術維護工作量,易對網站進行規範化管理,是互動式、購物車、線上註冊等特定功能必須使用的,而劣勢是動態URL當用戶訪問時,才從資料庫裡待用內容並載入預前設定好的頁面模板,對於使用者訪問速度造成了一定的延時影響,同時也消耗了伺服器端頻寬,不利用大規模使用者群同時訪問,對網站發展具有很多的侷限性;且對搜尋引擎蜘蛛爬行造成很大的不便,動態頁面大部分是搜尋引擎無法爬行和抓取的。
 
純靜態URL的優勢是使用者訪問速度快,使用者體驗度高,對搜尋引擎也很友好,純靜態連結地址被搜尋引擎視為真實存在的頁面,不易產生壞死連結,搜尋引擎蜘蛛爬行速度快;而劣勢是每次有新內容或是更新內容時都要直接生產靜態頁面,對伺服器效能是一個嚴峻的考驗,磁碟和記憶體消耗很大,同時也會輕微的影響伺服器端反映速度,消耗了一部分頻寬,但比動態URL消耗要小的多。
 
偽靜態URL的出現是動態和純靜態的折中解決方案,偽靜態最大的好處就是有利於搜尋引擎,對使用者體驗也比較友好,在伺服器端與動態URL的工作原理基本相似,但有不同之處,技術人員對整站動態URL制定新規範,對原來傳參URL進行有規律的重寫,如:http://group.yeegt.com/destination-country.aspx?countryId=133,可以偽靜態成,http://group.yeegt.com/destination-country/133/ ,可以在伺服器端批量將動態URL重寫成偽靜態等待搜尋引擎蜘蛛來爬行和抓取。
 
URL規範化建議:實時更新的內容採用偽靜態形式,不經常更新的內採用靜態化形式,特定功能或互動式用動態URL形式。
 
網站結構:網站結構分為:物理結構與邏輯結構,物理路徑是網站真實存在的物理絕對路徑,而邏輯結構是網站虛擬的相對路徑,比如:http://www.yeegt.com/theme/maldives/ 為物理路徑結構,而http://www.yeegt.com/…/maldives/ 為虛擬路徑結構,換句話說具體檔案存放的地址是否真實。網站結構與URL的關係非常密切,互相影響。
 
一般情況下,網站結構採用物理路徑還是邏輯路徑都是通過URL來區別的,靜態URL一般情況是真實反應了頁面的物理存放路徑,而偽靜態多為虛擬路徑,但不是說所有的偽靜態已經都是虛擬路徑。其實網站採用物理路徑結構還是虛擬路徑結構,對使用者訪問不會造成任何影響,但是對搜尋引擎的影響是比較大的。很多網站靜態頁面,也就是靜態URL也採用了相對虛擬路徑,如:<a href=”yazhou.html” target=”_blank”>亞洲</a>,正確的寫法應該是<a href=http://visa.yeegt.com/yazhou.html target=” _blank”>亞洲</a> 。
 
物理結構與邏輯結構對搜尋引擎沒有絕對的有利或是不利,不管是物理結構還是邏輯結構,層級過多都對搜尋引擎產生不利的影響。經過四年SEO經驗得出,扁平式的物理結構架構與底層資料邏輯結構巢狀模式,才是最佳的網站結構模式。
 
網站頻道、欄目、專題採用扁平式物理架構,路徑層數不超過3層,這樣網站的基本框架就成型了,如果單一的採用邏輯結構,網站內容存放和管理絕對一團糟,為網站壞死連結打下了基礎,日後造成的負面作用會非常之大。超出扁平式3層結構的底層資料,可以採用邏輯結構,保證底層資料易被搜尋引擎抓取,且獲得高權重,什麼是底層資料呢?底層資料可以認為是終端頁、詳情頁、或是存放路徑比較深的頁面。
 
例如:酒店 | 機票 | 自由行 | 團隊遊 | 目的地指南 頻道採用扁平式物理結構 具體酒店頁面 具體旅遊線路頁面 終端頁可採用邏輯結構(一般的終端頁路徑層級已經遠遠超出了3-5層) 總結:本次主要對網站URL規範和網站結構進行了分析,不單從SEO角度考慮,更多的是從網站運營和產品管理本身出發,以及網站對搜尋引擎、網站運營管理成本,特別是對使用者體驗的諸多有利和不利影響做了具體說明,理論源於實踐,如有與現有部分理論有衝突之處,還需要大家一起去驗證、實踐,在實踐中認識問題和分析問題,還原一個真實、完整的理論體系。謝謝大家的關注和閱讀!