標籤:http 301 302 區別
官方說法
List of HTTP status codes301 Moved Permanently#This and all future requests should be directed to the given URI.[23]302 Found#This is an example of industry practice contradicting the standard. The HTTP/1.0 specification (RFC 1945) required the client to perform a temporary redirect (the original describing phrase was "Moved Temporarily"),[24] but popular browsers implemented 302 with the functionality of a 303 See Other. Therefore, HTTP/1.1added status codes 303 and 307 to distinguish between the two behaviours.[25] However, some Web applications and frameworks use the 302 status code as ifit were the 303.
簡單地說:
301和302都是web伺服器響應HTTP協議請求狀態的數字代碼
兩者之間的差別
1)對於使用者
301和302沒有區別,都是瀏覽器裡面的URL跳轉變成了一個新的URL地址
2)對於搜尋引擎
存在網址劫持問題
650) this.width=650;" src="http://www.lichengbing.cn/ueditor/php/upload/image/20160806/1470418533822900.png" alt="網址劫持.png" />
302重新導向和網址劫持(URL hijacking)有什麼關係呢?這要從搜尋引擎如何處理302轉向說起。從定義來說,從網址A做一個302重新導向到網址B時,主機伺服器的隱含意思是網址A隨時有可能改主意,重新顯示本身的內容或轉向其他的地方。大部分的搜尋引擎在大部分情況下,當收到302重新導向時,一般只要去抓取目標網址就可以了,也就是說網址B。
實際上如果搜尋引擎在遇到302轉向時,百分之百的都抓取目標網址B的話,就不用擔心網址URL劫持了。問題就在於,有的時候搜尋引擎,尤其是Google,並不能總是抓取目標網址。為什麼呢?比如說,有的時候A網址很短,但是它做了一個302重新導向到B網址,而B網址是一個很長的亂七八糟的URL網址,甚至還有可能包含一些問號之類的參數。很自然的,A網址更加方便使用,而B網址既難看,又不方便使用。這時Google很有可能會仍然顯示網址A。
由於搜尋引擎排名演算法只是程式而不是人,在遇到302重新導向的時候,並不能像人一樣的去準確判定哪一個網址更適當,這就造成了網址URL劫持的可能性。也就是說,一個不道德的人在他自己的網址A做一個302重新導向到你的網址B,出於某種原因, Google搜尋結果所顯示的仍然是網址A,但是所用的網頁內容卻是你的網址B上的內容,這種情況就叫做網址URL劫持。你辛辛苦苦所寫的內容就這樣被別人偷走了。
Nginx下配置301 302
1)利用server的rewrite功能對網址地址修正
vim www.confserver { listen 80; server_name lichengbing.com; location / { #rewrite ^/(.*) http://www.lichengbing.cn/$1 permanent;#301 永久跳轉 rewrite ^/(.*) http://www.lichengbing.cn/$1 redirect;#302 臨時跳轉 } } server { listen 80; server_name www.lichengbing.com; location / { root html/www; index index.html index.htm; } access_log logs/access_www.log main; }
2)我們利用curl命令來類比訪問,擷取http狀態代碼
[[email protected] ~]# curl -I http://lichengbing.comHTTP/1.1 302 Moved Temporarily #302狀態代碼Server: nginx/1.6.3Date: Fri, 05 Aug 2016 17:11:43 GMTContent-Type: text/htmlContent-Length: 160Connection: keep-aliveLocation: http://www.lichengbing.cn/ #跳轉地址
網站監控302問題
平時我們用指令碼監控web伺服器喜歡監控狀態代碼,200、301、302表示正常,但是也有特殊情況,比如:
[[email protected] ~]# curl -I -s -o /dev/null -w "%{http_code}\n" http://lichengbingg.com302 #lichengbingg.com不存在(302 FOUND)[[email protected] ~]# curl -I -s -o /dev/null -w "%{http_code}\n" http://taobao.com302 #taobao.com 存在 (302 Moved)
所以,要麼監控web伺服器連接埠,要麼就刪掉302
#if [ "`nc -w 5 $url $Port &&echo ok`" = "ok" ];then#if [ "`echo -e ‘\n‘|telnet $url $Port|grep Connected|wc -l`" = "1" ];then#if [ "`nmap $url -p $Port|grep open|wc -l`" = "1" ];then#if [ "`curl -I http://$url 2>/dev/null|head -1|egrep "200|301"|wc -l`" = "1" ];then#if [ "`curl -I -s -o /dev/null -w ‘%{http_code}\n‘ http://$url`" = "200" ];then
Zabbix監控更省心。
HTTP返回狀態代碼中301和302的區別