IE與Chrome對相對URL解析的區別

問題:在ie瀏覽器中點擊訪問相對URL時,地址欄中的路徑與預期路徑不符致使404錯誤?javascript

URL的組成html

  1. 協議:http:// https:// ftp:// 在"HTTP"後面的「//」爲分隔符
  2. 域名:網址,也可使用IP地址做爲域名使用
  3. 端口:跟在域名後面的是端口,域名和端口之間使用「:」做爲分隔符,若是省略端口將採用默認端口
  4. 虛擬目錄:從域名後的第一個「/」開始到最後一個「/」爲止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。
  5. 文件名:從域名後的最後一個「/」開始到「?」爲止,是文件名部分,若是沒有「?」,則是從域名後的最後一個「/」開始到「#」爲止,是文件部分,若是沒有「?」和「#」,那麼從域名後的最後一個「/」開始到結束,都是文件名部分。文件名部分也不是一個URL必須的部分,若是省略該部分,則使用默認的文件名
  6. 參數:從「?」開始到「#」爲止之間的部分爲參數部分,又稱搜索部分、查詢部分。參數能夠容許有多個參數,參數與參數之間用「&」做爲分隔符。
  7. 錨:從「#」開始到最後,都是錨部分。

 

 瀏覽器是如何解析絕對路徑和相對路徑的java

在網頁源代碼中出現的url路徑有多是如下幾種狀況, 瀏覽器分別做不一樣的處理:web

1) 絕對路徑, 好比: http://www.vinceruan.info/front/cross-domain-process-cookie-session/, 瀏覽器對此url不作任何的處理.瀏覽器

2)絕對路徑, 相似:www.vinceruan.info/java/optimize-website/, 瀏覽器僅僅是在url前面補上http://服務器

3)相對路徑:/database/row-format-myisam/, 瀏覽器會在url前面補上host, 變成: http://www.vinceruan.info/database/row-format-myisam/cookie

4)相對路徑: http-cache/,  前面不帶/ ,此時瀏覽器作兩種處理, 
若是你在網頁中明確給出了base標籤, 那麼獲得的url是 base url + http-cache/, 
若是沒有給出base標籤,那麼瀏覽器試圖本身解析獲得base url, 解析方法是根據當前url的最後一個/以前的內容返回做爲base url.
 由於當前路徑是:http://www.vinceruan.info/front/how-browser-parse-url-relative-absolute/,
 瀏覽器分析獲得的base url 是:http://www.vinceruan.info/front/how-browser-parse-url-relative-absolute, 
 所以最後拿到的url 是http://www.vinceruan.info/front/how-browser-parse-url-relative-absolute/http-cache/, 
 這顯然是不正確的, 之因此出錯是由於本站作了seo優化, 網頁url優化成目錄url了,所以應該在網頁中顯示提供base標籤.session

解決辦法:相對路徑前加/dom

js獲取訪問路徑 location.pathname優化

//假設當前頁面的 URL 是:http://www.xxx.com/test/test.shtml
//獲取:/test/test.shtml
var path=location.pathname;

//設置
location.pathname = "/test/test.shtml";


function getContextPath() {
    var pathName = document.location.pathname;
    var index = pathName.substr(1).indexOf("/");
    var result = pathName.substr(0,index+1);
    return result;
  }
var path = getContextPath();

window.location.href = path+"/com/forumAction_list.do";

 

HTTP Referer是header的一部分,當瀏覽器向web服務器發送請求的時候,通常會帶上Referer,告訴服務器我是從哪一個頁面連接過來的,服務器籍此能夠得到一些信息用於處理。好比從我主頁上連接到一個朋友那裏,他的服務器就可以從HTTP Referer中統計出天天有多少用戶點擊我主頁上的連接訪問他的網站。 在JSP中獲取REFERER的方式是:request.getHeader("REFERER");

相關文章
相關標籤/搜索