The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

Windows / .NET / ASP.NET 的路徑、檔名長度限制

最近公司替客戶做了一個部落格網站,但上線後遇到一個奇特的問題,就是當網址過長時會導致 IIS 回應 Bad Request (Invalid URL) 的錯誤訊息(如下圖)。

 當網址過長時會導致 IIS 回應 Bad Request (Invalid URL) 的錯誤訊息

由於網頁的網址都是透過 URL Rewrite 的方式處理,所以幾乎每一個頁面都用路徑 + 檔名的方式顯示,幾乎很少使用 QueryString,文章的標題直接會被 UrlEncode 過當成檔名顯示(副檔名為 .aspx)。

因此當有人輸入的文章標題過長時,就會導致 IIS 回應我 HTTP 400 Bad Request 網頁完全無法顯示,我算了一下這個壞掉的網址共有 285 個字元,不過我個人的印象中,IE 可接受的網址長度應該不只這些吧。

我因此上網搜尋了一些資訊但問題似乎傾向於無解的。即便是無解,也要瞭解「限制」在哪裡,這樣才能避免問題再次發生。如果你的網址長這樣:

http://blog.miniasp.com/xxxxxxxxxxxxxxxx ... xxxxx/xxx.aspx

如上網址範例,紅色的部分(Path + Filename)總長度不得超過 260 個字元,否則 ASP.NET 就會無法回應網頁,而這限制是從 .NET Framework 來的,而 .NET Framework 的限制來自於「作業系統」的限制,而作業系統的限制如下:

  • Windows XP 的檔案長度限制為 255 bytes
  • Windows Vista 的檔案長度限制為 260 bytes

各位不知道有沒有遇過在整理檔案時,若路徑過長、檔名即便只有一點點,一樣沒辦法複製或儲存,就是這個道理。像是上上週去參加李智樺(Ruddy Lee)介紹如何在微軟新一代服務平台建立雲端應用程式時拿到老師的一張光碟,老師那時候就先說「光碟可能會壞掉」,但我拿回來 Copy 到硬碟時果然遇到有些檔案無法複製,最後也是查出原來是光碟的目錄太長了,原本光碟的資料是在 E:\ 但是複製到我的硬碟時又多了幾層子目錄,導致真的有些檔案超出長度限制而無法複製!

我在測試 ASP.NET 的時候發現不管是在 Windows Server 2003 或 Windows XP 限制都是 260 個字元,我想這應該是在 .NET Framework 中的限制吧 (不是十分肯定)。

總之,日後在開發 Web 應用程式時這也是另一個需要考量的因素了,即便這是個很罕見的錯誤,會像我一樣把網址搞的這麼長的應該不多啦。不過,近日 SEO (搜尋引擎最佳化) 的議題十分的夯,其中對於網址的 SEO 優化也是蠻常見的,以後一定要多注意網址的長度不可大於 260 個字元!

相關連結