URL 作為資源定位器或其他東西 - 它是如何運作的?

URL 作為資源定位器或其他東西 - 它是如何運作的?

我對 URL 的工作原理有點困惑。以前,當我學習 HTML 之類的東西時,我知道網域後面是我們要載入的文件的位置(例如 website.com/somefolder/somefile.html)。而且很簡單,我能理解。

最近我必須學習更多關於網路的東西,我發現 URL 更加複雜。例如:

  • drupal 連結就像 somewebsite.com/node/43
  • REST 請求就像 somewebsite.com/books/32
  • 後 '?你可以傳遞一些參數

這是如何運作的?伺服器(或其他什麼?我是新手)收到請求時如何知道 URL 的含義?它可能是:

  • 資源位置
  • 德魯帕爾視圖
  • 休息請求
  • 其他一些東西?

我不知道我的問題是否有意義,希望您能理解我的困惑。

答案1

這是如何運作的?

伺服器決定。

伺服器(或其他什麼?我是新手)收到請求時如何知道 URL 的含義?

伺服器依賴其配置。對於基於 Unix 的伺服器,這通常由一個或多個通常稱為「設定」檔案的文字檔案來處理。設定伺服器時,您可以指定此項目。有關如何指定的詳細資訊將根據您使用的 Web 伺服器軟體而有所不同。

(通常有大量針對流行 Web 伺服器和 CGI​​ 套件的教程,因此,如果網站管理員不知道如何執行此操作,那麼該人通常會開始閱讀範例/文件/教程。因此,如果您尋找有關像Apache 這樣的Web 伺服器,您可能能夠找到有關設定Drupal 的資訊;另一方面,如果您查找有關Drupal 的信息,您可能會找到有關如何配置Apache 的文檔部分。 ,網站管理員通常不需要費力去查找他們想要使用的軟體包的相關詳細資訊。

HTTP 1.1 用戶端傾向於將 URL 分成 3 部分:

  • 協議(例如http/https)
  • 網站(例如 example.com)
  • 資源(例如/somedir/file.htm)

這可能有點過於簡化了。一些較舊的 URL 允許類似的內容ftp://使用者名稱@密碼:example.com/somedir/file儘管較新的網頁瀏覽器傾向於刪除此類支持,例如微軟知識庫 8344389,出於安全考慮(包括已經發生的大量濫用行為,例如http://paypal.com/gibberish%40PhishingSite.example.com/gibberish會將 %40 轉換為 ASCII 64(即 @),導致 paypal.com/gibberish 的使用者名稱被用來登入 PhishingSite.example.com,PhishingSite.example.com 會簡單地接受登入,並詢問人們的 PayPal 密碼。人們會在 URL 開頭看到 paypal.com 並信任它。

當然,有一些“標準”,例如 URL 中的 # 是 Web 用戶端能夠識別的內容,但不會將其發送到伺服器。相反,Web 用戶端會將 # 後面的文字視為要跳到的錨文本。此外,% 用於轉義十六進位字元。網路客戶往往理解這一點。

其他細節可能取決於伺服器。例如,許多網頁伺服器有?啟動參數列表,並使用 &(或多個分號?)在參數列表中分割參數。然而,這只是許多 Web 伺服器表現出的常見行為。 HTTP 中沒有任何部分強制 Web 伺服器遵守這一點。實際上,Web 伺服器可以按照 Web 伺服器想要的方式處理該問題,且 Web 用戶端不太可能需要任何特殊支援。

如果您曾經設定過 HTTP 伺服器,您可能會明白該配置的一部分是指定如何處理所要求的資源。例如,您可以說發送到/ 的所有內容都將從本機硬碟的/srv/httpdocs/ 區域載入文件,但/cgi-bin/ 除外,它將運行位於/cgi-bin/ 中的程序,以及/ scripts 下的任何內容/ 並以 .pl 結尾將由 PERL 解釋器運行。

具體細節因 Web 伺服器的配置而異,因此沒有一個通用標準可以告訴 Web 用戶端是否可以保證收到靜態頁面的副本或執行程序的輸出。 Web 用戶端可以期望的是,如果 Web 用戶端請求資源,Web 伺服器將會回應它。

答案2

網路伺服器沒有知道任何這些含義 - 在所有情況下,它只是接收資源路徑,透過網站的主程式運行它,並向您發送結果輸出。當然,不同的程式會按照給定的路徑做不同的事情。

如果沒有配置程序,它將查找具有該名稱的檔案並直接提供該檔案。 (PHP 和 CGI​​ 通常處於中間位置:Web 伺服器仍然會尋找文件,然後運行該文件本身作為程序。

因此,唯一使其/node/43成為「Drupal 視圖」的是 Web 伺服器已配置為傳遞/node/<anything>給 Drupal 軟體。儘管網頁是動態產生的,但它仍然被視為資源。

(當然,Drupal 本身知道如果路徑以其開頭,則/node/後面將跟有視圖 ID。)

REST請求也完全是常規的資源請求;使他們“RESTful”的只是整體風格和行為。 (例如, 風格的 URL/book/345符合 REST 意識形態,而 則不/api/get_book?id=345符合。)

相關內容