今天突然好奇,想區分www.abc.com/efg 和www.abc.com/efg/這兩個網址的區別。即分析一下url末尾加個斜杠是否有特殊的效果。
找到網上的介紹:
當Web服務器接收到對某個末尾不含斜杠的url請求時,例如“www.abc.com/efg”,這時服務器會搜索網站根目錄下有沒有名為“abc”的文件,如果沒有就把abc當做目錄處理,然后返回abc目錄下的默認首頁。當Web服務器接收到的是末尾帶斜杠的請求時就會直接當做目錄處理。
同樣,根據微軟官方文檔Internet Explorer and Connection Limits:
Another web-performance tip: When generating hyperlinks, always include a trailing slash if possible. For instance, navigating to http://msdn.microsoft.com/ie takes one more roundtrip than http://msdn.microsoft.com/ie/. When the browser navigates to the /ie url, the server merely sends down a 301 to the /ie/ url. Both links work, but the second version is faster.
ok,根據上述的材料,我們是否可以認為url加上斜杠能加快訪問速度。
接下來通過一個簡單的flask項目測試一下:
Flask框架通過路由綁定url和視圖函數,綁定http://127.0.0.1:5000/abc和http://127.0.0.1:5000/def/url。
- IE瀏覽器、Firefox瀏覽器
訪問http://127.0.0.1:5000/abc正常, 訪問http://127.0.0.1:5000/abc/ 報404錯誤,訪問http://127.0.0.1:5000/def之后301重定向到http://127.0.0.1:5000/def/,訪問http://127.0.0.1:5000/def/正常* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 127.0.0.1 - - [29/Jun/2018 22:53:16] "GET /abc HTTP/1.1" 200 - 127.0.0.1 - - [29/Jun/2018 22:54:18] "GET /def HTTP/1.1" 301 - 127.0.0.1 - - [29/Jun/2018 22:54:18] "GET /def/ HTTP/1.1" 200 - 127.0.0.1 - - [29/Jun/2018 22:57:46] "GET /def/ HTTP/1.1" 200 -
總結:
- 網站要進行統一的標准,要么用戶訪問和網站url路由都在url末尾不加斜杠,要么都不在url末尾加斜杠,如果采用統一的標准在訪問速度不會有任何的區別。
- 但是用戶的行為是不可以限制和預測的。用戶可能會在url后面加個斜杠。
- 兩個技術方案各有利弊:1.網站路由url不加斜杠,用戶自己加斜杠之后訪問404,但是不會出現重定向的問題;2.網站路由url加斜杠,用戶訪問的url無論加不加斜杠均可訪問正常,但是不加斜杠的訪問鏈接會做重定向,影響訪問速度。
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
