1. 程式人生 > >關於 http和window.location.href的分析 和 URL中“#” “?” &“”號的作用

關於 http和window.location.href的分析 和 URL中“#” “?” &“”號的作用

      window.location.replace(url) : 通過載入 URL 指定的文件來替換當前文件 ,這個方法是替換當前視窗頁面,前後兩個頁面共用一個視窗,所以是沒有後退返回上一頁的

閱讀目錄

回到頂部

1. #

    10年9月,twitter改版。一個顯著變化,就是URL加入了"#!"符號。比如,改版前的使用者主頁網址為http://twitter.com/username改版後,就變成了http://twitter.com/#!/username
  這是主流網站第一次將"#"大規模用於重要URL中。這表明井號(Hash)的作用正在被重新認識。本文根據HttpWatch的文章,整理與井號有關的所有重要知識點。
一、#的涵義


  #代表網頁中的一個位置。其右面的字元,就是該位置的識別符號。比如,http://www.example.com/index.html#print就代表網頁index.html的print位置。瀏覽器讀取這個URL後,會自動將print位置滾動至可視區域。
  為網頁位置指定識別符號,有兩個方法。一是使用錨點,比如<a name="print"></a>,二是使用id屬性,比如<div id="print">。


二、HTTP請求不包括#
  #是用來指導瀏覽器動作的,對伺服器端完全無用。所以,HTTP請求中不包括#。
比如,訪問下面的網址,http://www.example.com/index.html#print

,瀏覽器實際發出的請求是這樣的:

GET /index.html HTTP/1.1
Host: www.example.com

三、#後的字元
  在第一個#後面出現的任何字元,都會被瀏覽器解讀為位置識別符號。這意味著,這些字元都不會被髮送到伺服器端。
比如,下面URL的原意是指定一個顏色值:http://www.example.com/?color=#fff,但是,瀏覽器實際發出的請求是:

GET /?color= HTTP/1.1
Host: www.example.com

四、改變#不觸發網頁過載
  單單改變#後的部分,瀏覽器只會滾動到相應位置,不會重新載入網頁。
比如,從http://www.example.com/index.html#location1改成http://www.example.com/index.html#location2,瀏覽器不會重新向伺服器請求index.html。

五、改變#會改變瀏覽器的訪問歷史
  每一次改變#後的部分,都會在瀏覽器的訪問歷史中增加一個記錄,使用"後退"按鈕,就可以回到上一個位置。這對於ajax應用程式特別有用,可以用不同的#值,表示不同的訪問狀態,然後向用戶給出可以訪問某個狀態的連結。值得注意的是,上述規則對IE 6和IE 7不成立,它們不會因為#的改變而增加歷史記錄。
  

六、window.location.hash讀取#值
  window.location.hash這個屬性可讀可寫。讀取時,可以用來判斷網頁狀態是否改變;寫入時,則會在不過載網頁的前提下,創造一條訪問歷史記錄。
  

七、onhashchange事件
  這是一個HTML 5新增的事件,當#值發生變化時,就會觸發這個事件。IE8+、Firefox 3.6+、Chrome 5+、Safari 4.0+支援該事件。
  它的使用方法有三種:

  • window.onhashchange = func;
  • <body onhashchange="func();">
  • window.addEventListener("hashchange", func, false);

  對於不支援onhashchange的瀏覽器,可以用setInterval監控location.hash的變化。

八、Google抓取#的機制
  預設情況下,Google的網路蜘蛛忽視URL的#部分。
  但是,Google還規定,如果你希望Ajax生成的內容被瀏覽引擎讀取,那麼URL中可以使用"#!",Google會自動將其後面的內容轉成查詢字串_escaped_fragment_的值。
  比如,Google發現新版twitter的URL:http://twitter.com/#!/username
  就會自動抓取另一個URL:http://twitter.com/?_escaped_fragment_=/username
  通過這種機制,Google就可以索引動態的Ajax內容。

 

AJAX = 非同步 JavaScriptXML標準通用標記語言的子集)。AJAX 是一種用於建立快速動態網頁的技術。

回到頂部

2. ?

1)連線作用:比如

http://www.xxx.com/Show.asp?id=77&nameid=2905210001&page=1

2)清除快取:比如

http://www.xxxxx.com/index.html 
http://www.xxxxx.com/index.html?test123123

兩個url開啟的頁面一樣,但是後面這個有問號,說明不呼叫快取的內容,而認為是一個新地址,重新讀取。

回到頂部

3. &

不同引數的間隔符

一、CSS和js為什麼帶引數(形如.css?t=與.js?t=)怎樣獲取程式碼

css和js帶引數(形如.css?t=與.js?t=) 
使用引數有兩種可能: 
第一、指令碼並不存在,而是服務端動態生成的,因此帶了個版本號,以示區別。 即上面程式碼對於檔案來說 等價於 但瀏覽器會認為他是 該檔案的某個版本! 
第二、客戶端會快取這些css或js檔案,因此每次升級了js或css檔案後,改變版本號,客戶端瀏覽器就會重新下載新的js或css檔案 ,刷性快取的作用。 
第二種情況最多,也可能兩種同時存在。 
版本號,可以是一個隨機數,也可以是一個遞增的值,大版本小版本的方式,或者根據指令碼的生成時間書寫,比如就是精確到了生成指令碼的秒,而 2.3.3 就是大版本小版本的方式。

二、關於瀏覽器快取

瀏覽器快取,有時候我們需要他,因為他可以提高網站效能和瀏覽器速度,提高網站效能。但是有時候我們又不得不清除快取,因為快取可能誤事,出現一些錯誤的資料。像股票類網站實時更新等,這樣的網站是不要快取的,像有的網站很少更新,有快取還是比較好的。今天主要介紹清除快取的幾種方法。

清理網站快取的幾種方法

meta方法

<META HTTP-EQUIV="pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"> 
<META HTTP-EQUIV="expires" CONTENT="0">
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

清理form表單的臨時快取 
方式一:用ajax請求伺服器最新檔案,並加上請求頭If-Modified-Since和Cache-Control,如下:

 $.ajax({
     url:'www.haorooms.com',
     dataType:'json',
     data:{},
     beforeSend :function(xmlHttp){ 
        xmlHttp.setRequestHeader("If-Modified-Since","0"); 
        xmlHttp.setRequestHeader("Cache-Control","no-cache");
     },
     success:function(response){
         //操作
     }
     async:false
  });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

方法二,直接用cache:false,

 $.ajax({
     url:'www.haorooms.com',
     dataType:'json',
     data:{},
     cache:false, 
     ifModified :true ,

     success:function(response){
         //操作
     }
     async:false
  });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

方法三:用隨機數,隨機數也是避免快取的一種很不錯的方法!

URL 引數後加上 "?ran=" + Math.random(); //當然這裡引數 ran可以任意取了
eg:
<script> 
document.write("<s"+"cript type='text/javascript' src='/js/test.js?"+Math.random()+"'></scr"+"ipt>"); 
</script>

其他的類似,只需在地址後加上+Math.random() 
注意:因為Math.random() 只能在Javascript 下起作用,故只能通過Javascript的呼叫才可以 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

方法四:用隨機時間,和隨機數一樣。

在 URL 引數後加上 "?timestamp=" + new Date().getTime(); 
  • 1
  • 1

PHP後端清理

在服務端加 header("Cache-Control: no-cache, must-revalidate");等等(如php中)
  • 1
  • 1

方法五:

5、window.location.replace("WebForm1.aspx");   
引數就是你要覆蓋的頁面,replace的原理就是用當前頁面替換掉replace引數指定的頁面。   
這樣可以防止使用者點選back鍵。使用的是javascript指令碼,舉例如下: 
a.html 
以下是引用片段: 
<html> 
     <head> 
         <title>a</title>      
         <script language="javascript"> 
             function jump(){ 
                 window.location.replace("b.html"); 
             } 
         </script> 
     </head> 
     <body> 
        <a href="javascript:jump()">b</a> 
    </body> 
</html>  

b.html 
以下是引用片段: 
<html> 
     <head> 
         <title>b</title>      
         <script language="javascript"> 
             function jump(){ 
                 window.location.replace("a.html"); 
             } 
         </script> 
     </head> 
     <body> 
        <a href="javascript:jump()">a</a> 
    </body> 
</html>  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

相關推薦

關於 httpwindow.location.href分析 URL“#” “?” &“”作用

      window.location.replace(url) : 通過載入 URL 指定的文件來替換當前文件 ,這個方法是替換當前視窗頁面,前後兩個頁面共用一個視窗,所以是沒有後退返回上一頁的 閱讀目錄 1. #2. ?3. & 回到頂部 1. #     10年9月,t

window.location.replacewindow.location.href區別

比如有3個頁面:跳轉關係為  a > b > c; 1:b > c 是通過window.location.replace("..xx/c.xx")   此時b頁面的url會被c頁面代替,並且點選後退按鈕時會回退到a頁面(最開始的頁面); 2:b > c

window.locationwindow.location.href區別詳解

window.location是一個物件,包含屬性有 hash 從井號 (#) 開始的 URL(錨) host 主機名和當前 URL 的埠號 hostname 當前 URL 的主機名 href 完整的 URL pathname 當前 URL 的路徑部分 port 當前

window.openwindow.location.href的幾種用法

因為要讓window.open不在新視窗開啟,所以找了一些資料 windows.open("URL","視窗名稱","視窗外觀設定"); <A href="javascript:window.open('webpage.asp','_self')"> 點選這裡 </A> <a

window.location.replacewindow.location.href的區別

sdn style -h 默認 .net oca height ack tps 簡單說說:有3個jsp頁面(1.jsp, 2.jsp, 3.jsp)。 進系統默認的是1.jsp ,當我進入2.jsp的時候, 2.jsp裏面用window.location.repla

JSP使用window.location.href()跳轉傳遞引數。

  JSP中使用window.location.href()跳轉和傳遞引數 在按鈕上新增onclick時間,並傳遞引數給js函式,引數可以為input中輸入的值,也可以為jsp中獲取的值。 onclick="doDelete(${student.id}) 然後呼叫js中的函

JavaScript獲取從上個頁面傳過來的url引數:GetQueryString()方法window.location.search方法

如下,當loadContractInfo()方法被呼叫時,將跳轉到指定頁面blackViewContract.html 並傳三個引數(contractId、state、identity)過去 function loadContractInfo(contractId,state,i

window. location. hrefwindow. location. replace的區別

【原文:https://zhidao.baidu.com/question/1510959179556198380.html】   window.location.href和window.location.replace的區別   href相當於開啟一個新頁面,r

window.location.hrefwindow.open的幾種用法區別

使用js的同學一定知道js的location.href的作用是什麼,但是在js中關於location.href的用法究竟有哪幾種,究竟有哪些區別,估計很多人都不知道了。 回到頂部 一、location.href常見的幾種形式 目前在開發中經常要用

locationlocation.href跳轉url的區別

使用 location = url  跳轉,如果本地之前已經載入過該頁面並有快取,那麼會直接讀取本地的快取,快取機制是由本地瀏覽器設定決定的。狀態碼為:  200 OK (from cache) 。 使用 location.href = url 跳轉,資源的快取型別是根據

中文亂碼問題--window.location.href url含中文伺服器收到亂碼問題解決

(1).頁面中先對中文進行編碼。 如:window.location.href = url+"&groupName=" + encodeURI(encodeURI(groupName)) ; 注意,頁面部分需要編碼兩次。 (2).在服務端進行解碼。  groupName= java.net.URL

springMVC框架在js使用window.location.href請求url時IE不相容問題解決

是使用springMVC框架時,有時候需要在js中使用window.location.href來請求url,比如下面的路徑:window.location.href = ‘forecast/download.do’在谷歌瀏覽器下,實際請求的路徑是:專案名/forecast/d

$(document).readywindow.onload 簡單分析區別

blog 基礎 sele 點擊 實現 tel bubuko 等價 加載完成 《鋒利的JQuery》翻開沒看幾頁,就遇到了這個神奇的問題,之前在橙旭園學習的時候,JQuery只教了一些基礎的,像鏈式操作等,那時以為這個和window.onload()差不多一模一樣,現在才發現

javascriptwindow.open()與window.location.href

javascrip 定位 page 說過 函數 cnblogs 忘記 logs glin 1.window.location是window對象的屬性,而window.open是window對象的方法    window.location是你對當前瀏覽器窗口的URL地址

JS設置window.location.href跳轉無效

設置 gin false urn window body 跳轉 log color window.location.href="login.jsp"; window.event.returnValue=false; JS中設置window.location.

js如何獲取window.location.href跳轉後查詢字符串的值?

fun click ear func ren htm 獲取 earch cli $("#worked_count").parent().attr("onClick","window.location.href=‘view/warn/task_list.html?task_s

獲取window.location.href傳的值,並且轉換成json數據使用

() win urn spa cati var 使用 並且 應該 做個記錄保存一下,以免以後再次用到忘記了。 function locVal(){ var url=window.location.href; if (url.indexOf(‘?‘)==-1

window.location.href 跳轉無歷史記錄

pan win 為什麽 cat spa 替換 當前頁 nload stat 需求:從頁面a單點登錄跳至頁面b,在頁面b裏做判斷符合條件後location.href至c頁面 問題:在頁面c中點擊返回按鈕頁面回到了a,正常情況下應該回到頁面b 原因:在當前頁面的 onlo

微信BUG之微信內置的瀏覽器window.location.href 不跳轉

href details clas pan 模擬 dom sdn times word 最近做微信開發遇到這個問題,查了一些文檔,總結一下 1.url後面加參數 indow.location.href = url +‘?timestamp=‘+ new Date().get

05 識別毒酒——幾種演算法編碼方式的分析比較

說明 問題 識別毒酒 方法1 視為一個有約束的最優化問題進行求解 1 模型的進一步討論 3方法2 使用編碼的方法 1 結論 2 具體方法 3一個瑕疵和改進的方法