【原創乾貨】絕對地址和相對地址

来源:http://www.cnblogs.com/chenziweb/archive/2017/10/18/7688366.html
-Advertisement-
Play Games

絕對地址和相對地址是網站開發基礎知識中很重要的知識點。1.在網頁中插入文件時,不可以使用硬碟的絕對路徑 舉個例子,在網頁中插入圖片,代碼如下: <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/ht ...


絕對地址和相對地址是網站開發基礎知識中很重要的知識點。
1.在網頁中插入文件時,不可以使用硬碟的絕對路徑
    舉個例子,在網頁中插入圖片,代碼如下:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>插入圖片</title>
</head>
<body>
<img src="file:///E|/MyDocument/Pictures/1.jpg"><img src="E:\MyDocument\Pictures\1.jpg">
</body>
</html>

    意思是:插入一張圖片,圖片路徑是“E:\MyDocument\Pictures\1.jpg”。
    即:這張圖片是放在電腦的“E:\MyDocument\Pictures\”文件夾里,圖片文件名是:“1.jpg”。但是,這樣的代碼是錯誤的。
    (1)由於HTML代碼是客戶端標記語言,這段代碼實際是告訴瀏覽器:顯示一張圖片,它放在客戶端瀏覽者硬碟中的某個文件夾中。但實際上前端代碼並沒有讀取瀏覽者硬碟文件的許可權,它涉及電腦數據的安全,如果沒有加以限制,那麼通過網頁就可以直接刪除或格式化瀏覽者的硬碟數據,又或者讀取瀏覽者的硬碟數據往網路上上傳,任何安全和隱私都將不存在。所以這種越權讀取文件或數據的代碼,網頁無法成功執行。
    (2)網站開發者的電腦在該路徑位置確實存在這張圖片,那麼即使在網站開發者的瀏覽器中測試能正常顯示該圖片,當將該網頁上傳到伺服器或虛擬主機中,他人訪問網頁時仍然是無法正常看到該圖片的。該圖片並不存在於瀏覽者的硬碟中(這張圖片只存在於網站開發者的電腦中)。
    所以在網頁中插入圖片或其它文件時,不可以使用硬碟的絕對路徑。


2.認識絕對地址和相對地址
    例一,假設我們電腦E盤的目錄和文件結構如下圖:

(圖2-39)
    根據“E:\UPUPW_AP5.6\Apache2\conf\httpd-vhosts.conf”里的配置,“E:\UPUPW_AP5.6\htdocs\”對應網址“http://127.0.0.1/”,那麼:
    (1)“E:\UPUPW_AP5.6\htdocs\”的“htdocs”文件夾是網站的(伺服器物理路徑)根目錄。
“http://127.0.0.1/”的最後一個斜杠“/”代表網站的(虛擬路徑)根目錄。
    這兩者呈對應關係。我們如果要訪問“E:\UPUPW_AP5.6\htdocs\index.html”這個網頁文件,對應的網址是“http://127.0.0.1/index.html”;如果要訪問“E:\UPUPW_AP5.6\htdocs\images\001.jpg”這個圖片文件,對應的網址是“http://127.0.0.1/images/001.jpg”。
    (2)假如我們在“E:\UPUPW_AP5.6\htdocs\index.html”這個網頁文件中插入圖片“E:\UPUPW_AP5.6\htdocs\images\001.jpg”,正確的代碼寫法有三種:
        ①<img src="images/001.jpg">(這是相對地址,相對於“index.html”網頁本身的地址)
        ②<img src="/images/001.jpg">(這是絕對地址,以“/”開頭。“/”對應網站的根目錄,即從網站的根目錄“E:\UPUPW_AP5.6\htdocs\”算起)
        ③<img src="http://127.0.0.1/images/001.jpg">(這也是絕對地址,是一條完整的網址。但對站內文件的引用不推薦這種寫法,一旦網站換功能變數名稱就要修改很多代碼,增加了維護成本。)
    (3)假如我們在“E:\UPUPW_AP5.6\htdocs\member\login.html”這個網頁文件中插入圖片
“E:\UPUPW_AP5.6\htdocs\images\001.jpg”,那麼正確的寫法有三種:
        ①<img src="../images/001.jpg">(這是相對地址,相對於“login.html”網頁本身的路徑。“../”代表往上一層文件夾,當前“login.html”在“member”文件夾中,“login.html”往上一層文件夾則到達“htdocs”文件夾,到達“htdocs”文件夾後,再定位“images/001.jpg”即是“E:\UPUPW_AP5.6\htdocs\images\001.jpg”)
        ②<img src="/images/001.jpg">(這是絕對地址,以“/”開頭。“/”對應網站的根目錄,即從網站的根目錄“E:\UPUPW_AP5.6\htdocs\”算起)
        ③<img src="http://127.0.0.1/images/001.jpg">(這也是絕對地址,是一條完整的網址。對站內文件的引用不推薦使用這種形式。)
    (4)區分斜杠(/)和反斜杠(\)的使用
    按常識,硬碟中的物理路徑使用的是反斜杠(\),如:“E:\UPUPW_AP5.6\htdocs\”,那麼我們可以這樣記憶:反斜杠(\)用於硬碟的物理路徑。
    除了物理路徑,網址、網站中涉及路徑的,我們均使用斜杠(/),如:“/images/001.jpg”。
    (5)相對地址、絕對地址也有人稱為相對路徑、絕對路徑。
    例二,假設我們電腦E盤的目錄和文件結構如下圖:

(圖2-40)
    根據“E:\UPUPW_AP5.6\Apache2\conf\httpd-vhosts.conf”里的配置,“E:\UPUPW_AP5.6\htdocs\”對應網址“http://127.0.0.1/”,那麼:
    (1)“E:\UPUPW_AP5.6\htdocs\”的“htdocs”文件夾是網站的(伺服器物理路徑)根目錄。
“http://127.0.0.1/”的最後一個斜杠“/”代表網站的(虛擬路徑)根目錄。
    這兩者呈對應關係。我們如果要訪問“E:\UPUPW_AP5.6\htdocs\new\a\b\reg.html”這個網頁文件,對應的網址是:“http://127.0.0.1/new/a/b/reg.html”,如果要訪問“E:\UPUPW_AP5.6\htdocs\new\a\b\c\002.jpg”這個圖片文件,對應的網址是:“http://127.0.0.1/new/a/b/c/002.jpg”。
    (2)假如我們在“E:\UPUPW_AP5.6\htdocs\new\a\b\reg.html”這個網頁文件中插入圖片“E:\UPUPW_AP5.6\htdocs\new\a\b\c\002.jpg”,那麼正確的代碼寫法有三種:
        ①<img src="c/002.jpg">(相對地址)
        ②<img src="/new/a/b/c/002.jpg">(絕對地址)
        ③<img src="http://127.0.0.1/new/a/b/c/002.jpg">(絕對地址)
    (3)假如我們在“E:\UPUPW_AP5.6\htdocs\new\a\b\reg.html”這個網頁文件中插入圖片“E:\UPUPW_AP5.6\htdocs\new\d\e\003.jpg”,那麼正確的代碼寫法有三種:
        ①<img src="../../d/e/003.jpg">(相對地址)
        ②<img src="/new/d/e/003.jpg">(絕對地址)
        ③<img src="http://127.0.0.1/new/d/e/003.jpg">(絕對地址)
    (4)假如我們在“E:\UPUPW_AP5.6\htdocs\new\a\b\reg.html”這個網頁中,要鏈接“E:\UPUPW_AP5.6\htdocs\new\d\e\test.html”這個網頁,那麼正確的代碼寫法有三種:
        ①<a href="../../d/e/test.html">test</a>(相對路徑)
        ②<a href="/new/d/e/test.html">test</a>(絕對路徑)
        ③<a href="http://127.0.0.1/new/d/e/test.html">test</a>(絕對路徑)
    (5)假如我們在“E:\UPUPW_AP5.6\htdocs\new\a\b\reg.html”這個網頁中,要鏈接“E:\UPUPW_AP5.6\Apache2\”文件夾中的文件,有辦法嗎?

    <a href="../../../Apache2/filename.ext">test</a>(錯誤)

    當網站的物理路徑根目錄在伺服器里(Apache)配置為“E:\UPUPW_AP5.6\htdocs\”,那麼絕對地址開頭的“/”符號即是指網站的根目錄,對應“E:\UPUPW_AP5.6\htdocs\”;而相對路徑“../../../../../../../../”無論向上多少層,最上層只能到達網站的根目錄“E:\UPUPW_AP5.6\htdocs\”,不會再向上一層。這也是屬於安全問題。假如通過向上一層的路徑關係可以突破我們配置的網站物理路徑根目錄“E:\UPUPW_AP5.6\htdocs\”,那麼意味著通過網頁可以鏈接和使用伺服器里的任意文件,包括伺服器系統盤裡的系統文件。當使用網頁程式語言(如ASP、PHP、.NET、JSP)來編寫網站代碼時,那麼將可以操作讀取伺服器里的任意文件,還可以刪除伺服器里的任意文件,包括伺服器的系統文件……這是多麼可怕的事情。所以涉及伺服器安全性的問題,會有許可權限制。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 近段時間漸覺自己愚弱,感覺各方面都有些透支。索性去腦補一下設計模式。講真,之前對此也是一知半解,未曾有太多研究,此番也是做簡單瞭解,參考園裡大神做些紀要。於是乎,我又一次發覺其實在日常擼碼中已經隱隱約約用到了各種設計模式(你覺得夢想很遠,其實你已經在路上了)。比如,資料庫連接池用到了單例模式;比如, ...
  • 面向對象的基本特征 1.封裝性 封裝性就是把對象的屬性和服務結合成一個獨立的相同單位,並儘可能隱蔽對象的內部細節,包含兩個含義: ◇ 把對象的全部屬性和全部服務結合在一起,形成一個不可分割的獨立單位(即對象)。 ◇ 信息隱蔽,即儘可能隱蔽對象的內部細節,對外形成一個邊界〔或者說形成一道屏障〕,只保留 ...
  • 什麼是中介者模式? 在現實生活中,有很多中介者模式的身影,例如QQ游戲平臺,聊天室、QQ群、簡訊平臺和房產中介。不論是QQ游戲還是QQ群,它們都是充當一個中間平臺,QQ用戶可以登錄這個中間平臺與其他QQ用戶進行交流,如果沒有這些中間平臺,我們如果想與朋友進行聊天的話,可能就需要當面才可以了。電話、短 ...
  • 繼承:當前對象沒有的屬性和方法,別人有,拿來給自己用,就是繼承 1 混入式繼承 2.原型繼承 a) 給原型對象添加新成員(通過對象的動態特性),不是嚴格意義上的繼承 ,,,,實例對象繼承了原型 b) 直接替換原型對象 c) 利用混入的方式給原型對象添加成員 3.經典繼承 js var 對象1 = O ...
  • 運算符用於執行程式代碼運算,會針對一個及以上操作數項目來進行運算。2+3,其操作數是2和3,而運算符則是“+”。上一篇我們說過變數用來存儲數據,而同一個變數中的數據在不同的時刻可以不同,在程式的運行過程中,我們根據需要將數據進行相應規則的運算以得到預期的結果,運算符則是其中運算的規則。 運算符在js ...
  • 移動端用zepto做的頁面,突然發現on綁定的click事件並沒有觸發,代碼如下: 我把此寫法改成非事件委托的方式,發現該click事件就能觸發 最後$(document)換成$('body')或者$('ul')試試,實驗結果是: $(document) 不行 $(‘body') 不行 $(‘ul' ...
  • 本文是Javascript高級程式設計 第1章的筆記,主要介紹了: Javascript和ECMAScript的關係; 宿主環境; DOM和API的相關概念 ...
  • 要考慮函數可被可重覆使用(調用),需要將可變化的變為參數封裝起來 table載入成功寫的函數,是因為我自己需要才寫的。把table里的數據放在全局變數後,查詢詳細信息就不用再做ajax。這個'load-success.bs.table'api我還有個問題,當這個table被多次load-succes ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...