當(dāng)網(wǎng)站地址變更時(shí),需要將舊域名301重定向到新的URL地址,實(shí)際上就是把舊地址的訪問請(qǐng)求重新引導(dǎo)到新域名上。301永久重定向無(wú)論是對(duì)用戶還是搜索引擎都是比較友好的,對(duì)SEO完全沒有不好的一面。通過(guò)舊網(wǎng)站的關(guān)鍵詞排名和PR等級(jí)都會(huì)傳遞給新網(wǎng)站,網(wǎng)站更換了域名,用域名301永久重定向的方式告訴搜索引擎本網(wǎng)頁(yè)已經(jīng)永久性轉(zhuǎn)移到新的域名,避免搜索引擎無(wú)法找到頁(yè)面,網(wǎng)站對(duì)于搜索引擎相對(duì)比較友好。

域名重定向的好處有利于用戶體驗(yàn)和搜索引擎抓取,301重定向跳轉(zhuǎn)對(duì)搜索引擎的好處有、增加域名權(quán)重、對(duì)網(wǎng)頁(yè)收錄的優(yōu)化、有利于網(wǎng)頁(yè)P(yáng)R傳遞、可促進(jìn)搜索引擎優(yōu)化效果、對(duì)用戶體驗(yàn)表示友、避免造成404錯(cuò)誤頁(yè)面。使用301重定向把地址指向新的域名后,搜索引擎只對(duì)對(duì)新域名進(jìn)行索引,同時(shí)將舊地址原有的鏈接轉(zhuǎn)移搭配新域名下。正確的使用301永久性重定向命,對(duì)排名不會(huì)產(chǎn)生任何影響。

域名301重定向頁(yè)面轉(zhuǎn)跳的操作方法

一、域名301重定向什么情況下使用

1、網(wǎng)站域名變更時(shí),使用301永久重定向?qū)⑴f域名重定向至新域名,挽回關(guān)鍵詞排名和流量損失。

2、因某些原因需要?jiǎng)h除網(wǎng)站中的個(gè)別目錄時(shí),比如我要?jiǎng)h除巨推傳媒:400-606-5558的一級(jí)導(dǎo)航,這種情況就可以使用301永久重定向到網(wǎng)站首頁(yè)。

3、多個(gè)域名需要指向同一個(gè)站點(diǎn)時(shí),打算實(shí)現(xiàn)網(wǎng)址規(guī)范化,通過(guò)301永久重定向可以實(shí)現(xiàn)。

二、http中的重定向和請(qǐng)求轉(zhuǎn)發(fā)的區(qū)別(包含JS跳轉(zhuǎn)方法)

很簡(jiǎn)單,重定向是客戶端行為,轉(zhuǎn)發(fā)是服務(wù)器行為。轉(zhuǎn)發(fā)屬于一次請(qǐng)求,重定向?qū)儆诘?次請(qǐng)求,轉(zhuǎn)發(fā)地址欄不會(huì)發(fā)生改變,重定向地址欄會(huì)改變,轉(zhuǎn)發(fā)在項(xiàng)目?jī)?nèi),重定向 可以轉(zhuǎn)到項(xiàng)目外。當(dāng)使用轉(zhuǎn)發(fā)時(shí),JSP容器將使用一個(gè)內(nèi)部的方法來(lái)調(diào)用目標(biāo)頁(yè)面,新的頁(yè)面繼續(xù)處理同一個(gè)請(qǐng)求,而瀏覽器將不會(huì)知道這個(gè)過(guò)程。 與之相反,重定向方式的含義是先進(jìn)個(gè)頁(yè)面通知瀏覽器發(fā)送一個(gè)新的頁(yè)面請(qǐng)求。

域名301重定向頁(yè)面轉(zhuǎn)跳的操作方法

1、調(diào)用方式 
我們知道,在servlet中調(diào)用轉(zhuǎn)發(fā)、重定向的語(yǔ)句如下:
request.getRequestDispatcher("new.jsp").forward(request, response);//
轉(zhuǎn)發(fā)到new.jsp
response.sendRedirect("new.jsp");//
重定向到new.jsp
jsp頁(yè)面中你也會(huì)看到通過(guò)下面的方式實(shí)現(xiàn)轉(zhuǎn)發(fā):
當(dāng)然也可以在jsp頁(yè)面中實(shí)現(xiàn)重定向:
<%response.sendRedirect("new.jsp");//
重定向到new.jsp%>

2、本質(zhì)區(qū)別

解釋一  
一句話,重定向是客戶端行為,轉(zhuǎn)發(fā)是服務(wù)器行為。為什么這樣說(shuō)呢,這就要看兩個(gè)動(dòng)作的工作流程:

轉(zhuǎn)發(fā)過(guò)程:客戶瀏覽器發(fā)送http請(qǐng)求----》web服務(wù)器接受此請(qǐng)求--》調(diào)用內(nèi)部的一個(gè)方法在容器內(nèi)部完成請(qǐng)求處理和轉(zhuǎn)發(fā)動(dòng)作----》將目標(biāo)資源發(fā)送給客戶;在這里,轉(zhuǎn)發(fā)的路徑必須是同一個(gè)web容器下的url,其不能轉(zhuǎn)向到其他的web路徑上去,中間傳遞的是自己的容器內(nèi)的request。在客戶瀏覽器路徑欄顯示的仍然是其先進(jìn)次訪問的路徑,也就是說(shuō)客戶是感覺不到服務(wù)器做了轉(zhuǎn)發(fā)的。轉(zhuǎn)發(fā)行為是瀏覽器只做了一次訪問請(qǐng)求。

重定向過(guò)程:客戶瀏覽器發(fā)送http請(qǐng)求----》web服務(wù)器接受后發(fā)送302狀態(tài)碼響應(yīng)及對(duì)應(yīng)新的location給客戶瀏覽器--》客戶瀏覽器發(fā)現(xiàn)是302響應(yīng),則自動(dòng)再發(fā)送一個(gè)新的http請(qǐng)求,請(qǐng)求url是新的location地址----》服務(wù)器根據(jù)此請(qǐng)求尋找資源并發(fā)送給客戶。在這里location可以重定向到任意URL,既然是瀏覽器重新發(fā)出了請(qǐng)求,則就沒有什么request傳遞的概念了。在客戶瀏覽器路徑欄顯示的是其重定向的路徑,客戶可以觀察到地址的變化的。重定向行為是瀏覽器做了至少兩次的訪問請(qǐng)求的。

解釋二

重定向,其實(shí)是兩次request, 
先進(jìn)次,客戶端request   A,服務(wù)器響應(yīng),并response回來(lái),告訴瀏覽器,你應(yīng)該去B。這個(gè)時(shí)候IE可以看到地址變了,而且歷史的回退按鈕也亮了。重定向可以訪問自己web應(yīng)用以外的資源。
在重定向的過(guò)程中,傳輸?shù)男畔?huì)被丟失。
舉例:response.sendRedirece(“l(fā)oginsucess.jsp”)
請(qǐng)求轉(zhuǎn)發(fā)是服務(wù)器內(nèi)部把對(duì)一個(gè)request/response的處理權(quán),移交給另外一個(gè) 
對(duì)于客戶端而言,它只知道自己最早請(qǐng)求的那個(gè)A,而不知道中間的B,甚至C、D。
 傳輸?shù)男畔⒉粫?huì)丟失。

舉例:

//Request Dispatcher dis=request.getRequestDispatcher(“l(fā)oginsuccess”)

//dis.forward(request,response):

域名301重定向頁(yè)面轉(zhuǎn)跳的操作方法

前言

html ,js 可以實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)。

jsp , asp, php 也有各自頁(yè)面跳轉(zhuǎn)與重定向的方式。

下文針對(duì)js 和jsp 的頁(yè)面跳轉(zhuǎn)實(shí)現(xiàn)方式進(jìn)行一個(gè)總結(jié)。

html 頁(yè)面跳轉(zhuǎn)方式

可以使用html 的meta 標(biāo)簽實(shí)現(xiàn)頁(yè)面的跳轉(zhuǎn)。

[html] view plain copy

1.   

2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  

3.   

4.   

5.  New Document   

6. <META NAME="Author" CONTENT="oscar999">  

7. <meta http-equiv="refresh" content="0; URL=http://www.haotui.com.cn">  

8. 

10.   

11.   

12.   

13. This is Test Page  

14.   

15.   

這種用法比較常使用在:

新舊系統(tǒng)升級(jí)的狀況下, 暫時(shí)保留舊系統(tǒng),通過(guò)域名進(jìn)入時(shí)自動(dòng)轉(zhuǎn)到新系統(tǒng)中。

JS 頁(yè)面跳轉(zhuǎn)方式

1. 使用window.location = "newurl"

[html] view plain copy

1.   

2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  

3.   

4.   

5.  New Document   

6. <META NAME="Author" CONTENT="oscar999">  

7.   

8.   

9.   

10.   

11. This is Test Page.  

12. 

15.   

16.   


也可以使用 window.location.href = "http://www.haotui.com.cn";

2. 使用 window.navigate

[html] view plain copy

1. 

3.  window.loction.replace方式實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)

3個(gè)jsp頁(yè)面(1.aspx, 2.aspx, 3.aspx),進(jìn)系統(tǒng)默認(rèn)的是1.aspx,當(dāng)我進(jìn)入2.aspx的時(shí)候, 2.aspx里面用window.location.replace("3.aspx");

與用window.location.href ("3.aspx");

從用戶界面來(lái)看是沒有什么區(qū)別的,但是當(dāng)3.aspx頁(yè)面有一個(gè)"返回"按鈕,調(diào)用window.history.go(-1); wondow.history.back();方法的時(shí)候,一點(diǎn)這個(gè)返回按鈕就要返回2.aspx頁(yè)面的話,區(qū)別就出來(lái)了,當(dāng)用 window.location.replace("3.aspx");連到3.aspx頁(yè)面的話,3.aspx頁(yè)面中的調(diào)用 window.history.go(-1);wondow.history.back();方法是不好用的,會(huì)返回到1.aspx。

JSP跳轉(zhuǎn)方式

JSP 跳轉(zhuǎn)方式大約有三種:

1. response.sendRedirect(“newurl”);

 -- 此語(yǔ)句前不允許有out.flush(),如果有,會(huì)有異常:
java.lang.IllegalStateException: Can't sendRedirect() after data has committed to the client.
at com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558)

 --跳轉(zhuǎn)后瀏覽器地址欄變化

 --如果要跳到不同主機(jī)下,跳轉(zhuǎn)后,此語(yǔ)句后面的語(yǔ)句會(huì)繼續(xù)執(zhí)行,如同新開了線程,但是對(duì)response的操作已經(jīng)無(wú)意義了

   如果要跳到相同主機(jī)下,此語(yǔ)句后面的語(yǔ)句執(zhí)行完成后才會(huì)跳轉(zhuǎn);

2. response.setHeader("Location","newurl");

[html] view plain copy

1. response.setStatus(302);  

2. response.setHeader("location","newurl");  

這種使用方式要結(jié)合 setStatus(302),  302 這個(gè)狀態(tài)碼就是告訴瀏覽器要重定向了。

1. 此語(yǔ)句前不允許有out.flush(),如果有,頁(yè)面不會(huì)跳轉(zhuǎn)。

2. 跳轉(zhuǎn)后瀏覽器地址欄變化

3. 此語(yǔ)句后面的語(yǔ)句執(zhí)行完成后才會(huì)跳轉(zhuǎn)

此語(yǔ)句前不允許有out.flush(),如果有,會(huì)有異常:

跳轉(zhuǎn)后瀏覽器地址欄不變,但是只能跳到當(dāng)前主機(jī)下

此語(yǔ)句后面的語(yǔ)句執(zhí)行完成后才會(huì)跳轉(zhuǎn)  

跳轉(zhuǎn)后得路徑變?yōu)楫?dāng)前路徑,圖片不是絕對(duì)路徑將無(wú)法顯示

舉例:

整個(gè)簡(jiǎn)單的例子:  兩個(gè)文件 a.jsp 和 b.jsp .

[html] view plain copy

1.   

2.   

3. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"  

4.     pageEncoding="ISO-8859-1"%>  

5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www2.w3.org/TR/html4/loose.dtd">  

6.   

7.   

8. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  

9. Insert title here  

10.   

11.   

12. Before: This is a.jsp! 
  

13. <%  

14.     //response.sendRedirect("b.jsp");  

15.   

16.     //response.setStatus(302);  

17.     //response.setHeader("location","b.jsp");  

18.   

19. %>  

20.   

21. <jsp:forward page="b.jsp"/>  

22. After: This is a.jsp!  

23.   

24.   


對(duì)于jsp 而言, 就需要嚼一嚼Redirect 和 forward 的差別了。

就字面意思而已: Redirect 翻譯成重定向, forward翻譯成轉(zhuǎn)發(fā)。

類別

概念

共享數(shù)據(jù)

應(yīng)用

Redirect

URL重新定向:可以是任意的URL

不能共享request里面的數(shù)據(jù)

一般用于用戶注銷登錄時(shí)返回主頁(yè)面和跳轉(zhuǎn)到其它的網(wǎng)站等等

Forward

頁(yè)面的轉(zhuǎn)發(fā):只能是同一個(gè)Web應(yīng)用程序的其他Web組件

轉(zhuǎn)發(fā)頁(yè)面和轉(zhuǎn)發(fā)到的頁(yè)面可以共性request里面的數(shù)據(jù)

一般用于用戶登錄的時(shí)候根據(jù)角色轉(zhuǎn)發(fā)到相應(yīng)的模塊等等

  


三、
http重定向301/302/303/307

301 永久重定向,告訴客戶端以后應(yīng)從新地址訪問.

302 作為HTTP1.0的標(biāo)準(zhǔn),以前叫做Moved Temporarily ,現(xiàn)在叫Found. 現(xiàn)在使用只是為了兼容性的處理,包括PHP的默認(rèn)Location重定向用的也是302.

但是HTTP 1.1 有303 和307作為詳細(xì)的補(bǔ)充,其實(shí)是對(duì)302的細(xì)化

303:對(duì)于POST請(qǐng)求,它表示請(qǐng)求已經(jīng)被處理,客戶端可以接著使用GET方法去請(qǐng)求Location里的URI。

307:對(duì)于POST請(qǐng)求,表示請(qǐng)求還沒有被處理,客戶端應(yīng)該向Location里的URI重新發(fā)起POST請(qǐng)求。

測(cè)試的test.html代碼,發(fā)起post請(qǐng)求到test.php頁(yè)面中

test.php頁(yè)面分別給出3種重定向處理,都跳到test2.php

test2.php打印出post的結(jié)果

(至于怎么寫..自己查手冊(cè)吧,PHP發(fā)送頭很容易.)

1.....

2.301 => "HTTP/1.1 301 Moved Permanently",

3.302 => "HTTP/1.1 302 Found",

4.303 => "HTTP/1.1 303 See Other",

5.307 => "HTTP/1.1 307 Temporary Redirect",

6.....

測(cè)試結(jié)果:

301,302和303的處理結(jié)果是一樣的,直接跳轉(zhuǎn)到test2.php,post沒有內(nèi)容

307的會(huì)重新post請(qǐng)求到test2.php,并且給出頁(yè)面提示

重定向?qū)嶋H使用是一個(gè)響應(yīng)碼(301或302或303或307)和一個(gè)響應(yīng)頭location,當(dāng)瀏覽器收到響應(yīng)的時(shí)候check響應(yīng)碼是3xx,則會(huì)取出響應(yīng)頭中l(wèi)ocation對(duì)應(yīng)的url(重定向中url的編碼問題),然后將該url替換瀏覽器地址欄并發(fā)起另一次HTTP事務(wù)。

關(guān)于301、302、303、307的區(qū)別,找不到好的文章,因此打算直擼HTTP 1.0規(guī)范和HTTP 1.1規(guī)范,結(jié)合一些實(shí)際的案例和tomcat實(shí)現(xiàn),來(lái)說(shuō)清楚這幾個(gè)狀態(tài)碼的差異。

四、 https301重定向

原請(qǐng)求訪問的是http://haotui.com.cn,然后返回302location=https://haotui.com.cn,從http轉(zhuǎn)到https。不過(guò)關(guān)于響應(yīng)行中302狀態(tài)碼的描述存在爭(zhēng)議,在下文中會(huì)詳細(xì)討論。

域名301重定向頁(yè)面轉(zhuǎn)跳的操作方法

五、tomcat重定向源碼

域名301重定向頁(yè)面轉(zhuǎn)跳的操作方法

六、http詳細(xì)介紹

http 1.0規(guī)范中有2個(gè)重定向——301和302,在http 1.1規(guī)范中存在4個(gè)重定向——301、302、303和307,其中302是值得討論討論的。

1、 http 1.0

301狀態(tài)碼在HTTP 1.0和HTTP 1.1規(guī)范中均代表永久重定向,對(duì)于資源請(qǐng)求,原來(lái)的url和響應(yīng)頭中l(wèi)ocation的url而言,資源應(yīng)該對(duì)應(yīng)location中的url。對(duì)于post請(qǐng)求的重定向,還是需要用戶確認(rèn)之后才能重定向,并且應(yīng)該以post方法發(fā)出重定向請(qǐng)求。

關(guān)于post請(qǐng)求重定向用戶確認(rèn)的問題,實(shí)際上瀏覽器都沒有實(shí)現(xiàn);而且post請(qǐng)求的重定向應(yīng)該發(fā)起post請(qǐng)求,這里瀏覽器也并不一定遵守,所以說(shuō)HTTP規(guī)范的實(shí)現(xiàn)并未嚴(yán)格按照HTTP規(guī)范的語(yǔ)義。

在301中資源對(duì)應(yīng)的路徑修改為location的url,在SEO中并未出現(xiàn)問題,但是在302中就出現(xiàn)了302劫持問題。

1、301永久移動(dòng)

被請(qǐng)求的資源被分配了一個(gè)新的永久URL,并且任何未來(lái)對(duì)這個(gè)資源的引用應(yīng)該使用該URL來(lái)完成。具有鏈接編輯能力的客戶端應(yīng)該在可能的情況下自動(dòng)地將對(duì)request-URL的引用重新鏈接到由服務(wù)器返回的新引用。

新的URL必須由response.unless中的location字段給出,如果是HEAD請(qǐng)求,則響應(yīng)的實(shí)體主體應(yīng)該包含一個(gè)帶有到新URL的超鏈接的短信。

如果使用POST方法接收到301狀態(tài)代碼以響應(yīng)請(qǐng)求,則用戶agnet不能自動(dòng)重定向請(qǐng)求,除非用戶可以確認(rèn),否則可能會(huì)改變發(fā)出請(qǐng)求的條件。

NOts:在收到301狀態(tài)碼后自動(dòng)重定向POST請(qǐng)求時(shí),一些現(xiàn)有的用戶代理將錯(cuò)誤地將其更改為GET請(qǐng)求。

在http 1.0規(guī)范中,302表示臨時(shí)重定向,location中的地址不應(yīng)該被認(rèn)為是資源路徑,在后續(xù)的請(qǐng)求中應(yīng)該繼續(xù)使用原地址。

規(guī)范:原請(qǐng)求是post,則不能自動(dòng)進(jìn)行重定向;原請(qǐng)求是get,可以自動(dòng)重定向;

實(shí)現(xiàn):瀏覽器和服務(wù)器的實(shí)現(xiàn)并沒有嚴(yán)格遵守HTTP中302的規(guī)范,服務(wù)器不加遵守的返回302,瀏覽器即便原請(qǐng)求是post也會(huì)自動(dòng)重定向,導(dǎo)致規(guī)范和實(shí)現(xiàn)出現(xiàn)了二義性,由此衍生了一些問題,譬如302劫持,因此在HTTP 1.1中將302的規(guī)范細(xì)化成了303和307,希望以此來(lái)消除二義性。

補(bǔ)充:302劫持——A站通過(guò)重定向到B站的資源xxoo,A站實(shí)際上什么都沒做但是有一個(gè)比較友好的域名,web資源xxoo存在B站并由B站提供,但是B站的域名不那么友好,因此對(duì)搜索引擎而言,可能會(huì)保存A站的地址對(duì)應(yīng)xxoo資源而不是B站,這就意味著B站出了資源版權(quán)、帶寬、服務(wù)器的錢,但是用戶通過(guò)搜索引擎搜索xxoo資源的時(shí)候出來(lái)的是A站,A站什么都沒做卻被索搜引擎廣而告之用戶,B站做了一切卻不被用戶知道,價(jià)值被A站竊取了。

2、302暫時(shí)移動(dòng)

被請(qǐng)求的資源暫時(shí)駐留在不同的URL中。因?yàn)橹囟ㄏ蚩赡芘紶枙?huì)被改變,所以clinet應(yīng)該繼續(xù)使用請(qǐng)求URL來(lái)作為將來(lái)的請(qǐng)求。

URL必須由響應(yīng)中的位置字段給出。除非是HEAD請(qǐng)求,否則響應(yīng)的實(shí)體主體應(yīng)該包含一個(gè)帶有到新URL的超鏈接的短注釋。

如果使用POST方法接收到302狀態(tài)碼以響應(yīng)請(qǐng)求,則除非用戶能夠確認(rèn),否則用戶代理不能自動(dòng)重定向請(qǐng)求,因?yàn)檫@可能會(huì)改變發(fā)出請(qǐng)求的條件。

注意:在收到302狀態(tài)碼后自動(dòng)重定向POST請(qǐng)求時(shí),一些現(xiàn)有的用戶代理將錯(cuò)誤地將其更改為GRT請(qǐng)求。

2. http 1.1

301和http 1.0規(guī)范中保持一致,注意資源對(duì)應(yīng)的路徑應(yīng)該是location中返回的url,而不再是原請(qǐng)求地址。

302在HTTP 1.1中,實(shí)際上302是不再推薦使用的,只是為了兼容而作保留。規(guī)范中再次重申只有當(dāng)原請(qǐng)求是GET or HEAD方式的時(shí)候才能自動(dòng)的重定向,為了消除HTTP 1.0中302的二義性,在HTTP 1.1中引入了303和307來(lái)細(xì)化HTTP 1.0中302的語(yǔ)義。

1、302found

被請(qǐng)求的資源暫時(shí)駐留在一個(gè)不同的URL中,因?yàn)橹囟ㄏ蚩赡軙?huì)被改變,客戶端應(yīng)該繼續(xù)使用請(qǐng)求URL來(lái)做未來(lái)的請(qǐng)求,這個(gè)響應(yīng)只有在緩存控制或者Expires頭域指示的時(shí)候才能被緩存。

臨時(shí)URL應(yīng)該由響應(yīng)中的位置字段給出。如果請(qǐng)求方法是HEAD,響應(yīng)實(shí)體應(yīng)該包含一個(gè)超鏈接到新URL的短超文本記錄。

如果為了響應(yīng)GET或HEAD以外的請(qǐng)求而接收到302狀態(tài)碼,除非用戶能夠確認(rèn),否則用戶代理不能自動(dòng)重定向請(qǐng)求,因?yàn)檫@可能會(huì)改變發(fā)出請(qǐng)求的條件。

注意:RFC 1945和RFC 2068指定客戶端不允許更改重定向的請(qǐng)求上的方法。但是,大多數(shù)現(xiàn)有的用戶代理實(shí)現(xiàn)將302視為303響應(yīng),對(duì)位置字段值執(zhí)行GET原始請(qǐng)求方法的狀態(tài)代碼303和307已經(jīng)被添加用于希望明確地清楚客戶端期望哪種反應(yīng)的服務(wù)器。

303在HTTP 1.0的時(shí)候,302的規(guī)范是原請(qǐng)求是post不可以自動(dòng)重定向,但是服務(wù)器和瀏覽器的實(shí)現(xiàn)是運(yùn)行重定向。

把HTTP 1.0規(guī)范中302的規(guī)范和實(shí)現(xiàn)拆分開,分別賦予HTTP 1.1中303和307,因此在HTTP 1.1中,303繼承了HTTP 1.0中302的實(shí)現(xiàn)(即原請(qǐng)求是post,也允許自動(dòng)進(jìn)行重定向,結(jié)果是無(wú)論原請(qǐng)求是get還是post,都可以自動(dòng)進(jìn)行重定向),而307則繼承了HTTP 1.0中302的規(guī)范(即如果原請(qǐng)求是post,則不允許進(jìn)行自動(dòng)重定向,結(jié)果是post不重定向,get可以自動(dòng)重定向)。

2、303see other

對(duì)請(qǐng)求的響應(yīng)可以在不同的URL下找到,并且應(yīng)該在該資源上使用GET方法來(lái)獲取。這個(gè)方法的存在主要是為了允許輸出POST激活的腳本來(lái)將用戶代理重定向到選定的資源。新的URL 不是原始請(qǐng)求資源的替代引用,303響應(yīng)不能被緩存,但是對(duì)第二個(gè)(重定向的)請(qǐng)求的響應(yīng)可能是可緩存的。

不同的URL應(yīng)該通過(guò)響應(yīng)中的位置字段求得。如果請(qǐng)求方法是HEAD,響應(yīng)實(shí)體應(yīng)該包含一個(gè)超鏈接到新URL的短超文本記錄。

注意:很多HTTP-1.1用戶代理不了解303的狀態(tài)。當(dāng)與這些客戶端的互操作性是一個(gè)問題時(shí),可以使用302狀態(tài)代碼。因?yàn)榇蠖鄶?shù)用戶代理對(duì)302響應(yīng)做出反應(yīng),如303所述。

307在http 1.1規(guī)范中,307為臨時(shí)重定向,注意劃紅線的部分,如果重定向307的原請(qǐng)求不是get或者h(yuǎn)ead方法,那么瀏覽器一定不能自動(dòng)的進(jìn)行重定向,即便location有url,也應(yīng)該忽略。

也就是307繼承了302在HTTP 1.0中的規(guī)范(303繼承了302在HTTP 1.0中的實(shí)現(xiàn))。

3、307當(dāng)代重定向

被請(qǐng)求的資源暫時(shí)駐留在一個(gè)不同的URL中。由于重定向可能偶爾被修改,所以客戶端應(yīng)該繼續(xù)使用請(qǐng)求URL作為將來(lái)的請(qǐng)求。這個(gè)響應(yīng)只有在cache-control或expires頭域指示的情況下才能被緩存。

臨時(shí)URL應(yīng)該由響應(yīng)中的位置字段給出。如果請(qǐng)求方法是HEAD,那么響應(yīng)實(shí)體應(yīng)該包含一個(gè)超鏈接到新URL(d)的短超文本記錄,因?yàn)樵S多pre-HTTP / 1.1 用戶代理不理解307狀態(tài)。因此,注釋應(yīng)該包含用戶在新的URL上重復(fù)原始請(qǐng)求所需的信息。

如果接收到307狀態(tài)碼以響應(yīng)除GET或HEAD之外的請(qǐng)求,則用戶代理不能自動(dòng)重定向請(qǐng)求,除非用戶可以確認(rèn)它,因?yàn)檫@可能會(huì)改變發(fā)出請(qǐng)求的條件。

在HTTP 1.0規(guī)范中,302的規(guī)范并沒有被服務(wù)器和瀏覽器遵守,即規(guī)范和實(shí)現(xiàn)出現(xiàn)了二義性,因此在HTTP 1.1中,將302的規(guī)范和實(shí)現(xiàn)拆分成了303和307。

瀏覽器對(duì)307狀態(tài)的處理規(guī)劃與302狀態(tài)相同,之所以將值307引入到HTTP1.1中,是因?yàn)樵谧畛醯南⑹荘OST的情況下,許多瀏覽器依舊錯(cuò)誤地跟隨302響應(yīng)中的定向信息。瀏覽器應(yīng)該只在接收到303響應(yīng)狀態(tài)時(shí)才從POST請(qǐng)求的重定向信息。引入這個(gè)新狀態(tài)是為了去除二義性:如果接到303響應(yīng),則進(jìn)行進(jìn)行GET和POST請(qǐng)求的重定向,如果接收到307響應(yīng),對(duì)于GET請(qǐng)求的重定向,則繼續(xù)進(jìn)行,但對(duì)于POST請(qǐng)求的重定向,則不在繼續(xù)下去。

七、HTTP狀態(tài)碼302、303、307區(qū)別

HTTP狀態(tài)碼3XX表示重定向,表明瀏覽器需要執(zhí)行某些特殊的處理以正確處理請(qǐng)求。

301 Moved Permanently 
永久性定向。該狀態(tài)碼表示請(qǐng)求的資源已被分配了新的URI,以后應(yīng)使用資源現(xiàn)在所指的URI。

302 Found 
臨時(shí)性重定向。該狀態(tài)碼表示請(qǐng)求的資源已被分配了新的URI,希望用戶(本次)能使用新的URI訪問。和301相似,但302表示的資源不是永久移動(dòng),只是臨時(shí)性的。換句話說(shuō),已移動(dòng)的資源對(duì)應(yīng)的URI將來(lái)還有可能發(fā)生變化,比如,用戶把uri保存為書簽,但不會(huì)像301狀態(tài)碼出現(xiàn)時(shí)那樣更新書簽,而是仍舊保留返回302狀態(tài)碼的頁(yè)面對(duì)應(yīng)的uri

303 See Other 
該狀態(tài)碼表示由于請(qǐng)求對(duì)應(yīng)的資源存在著另一個(gè)URI,應(yīng)使用GET方法定向獲取請(qǐng)求的資源,=, 
303和302狀態(tài)碼有著相同的功能,但是303明確表示客戶端應(yīng)當(dāng)采用get方法獲取資源,這點(diǎn)與302狀態(tài)碼有區(qū)別。 
比如,當(dāng)使用post方法訪問CGI程序,其執(zhí)行后的處理結(jié)果為希望客戶端能以get方法重定向到另一個(gè)uri上去時(shí),返回303狀態(tài)碼。雖然302也可實(shí)現(xiàn)相同的功能,但這里使用302狀態(tài)碼是最理想的。

當(dāng)301、302、303響應(yīng)狀態(tài)碼返回時(shí),幾乎所有瀏覽器都會(huì)把post改成get,并刪除請(qǐng)求報(bào)文內(nèi)的主體,之后請(qǐng)求會(huì)自動(dòng)再次發(fā)送。 
301、302標(biāo)準(zhǔn)是禁止將post方法改變成get方法的,但實(shí)際使用時(shí)大家都會(huì)這么做。

307 Temporary Redirect 
臨時(shí)重定向。該狀態(tài)碼與302有相同的含義。盡管302標(biāo)準(zhǔn)禁止post變化get,但實(shí)際使用時(shí)大家不遵守。 
307會(huì)遵照瀏覽器標(biāo)準(zhǔn),不會(huì)從post變?yōu)間et。但是對(duì)于處理響應(yīng)時(shí)的行為,各種瀏覽器有可能出現(xiàn)不同的情況。

本文由巨推傳媒:400-606-5558提供的域名301重定向頁(yè)面轉(zhuǎn)跳的操作方法

作者: 巨推傳媒:400-606-5558

版權(quán)屬于: 巨推傳媒:400-606-5558,

版權(quán)所有。轉(zhuǎn)載時(shí)必須以鏈接形式注明作者和原始出處及本聲明。