用Java和Nodejs獲取http30X跳轉后的url
301永久重定向
定義
301 Moved Permanently 被請求的資源已永久移動到新位置,並且將來任何對此資源的引用都應該使用本響應返回的若干個URI之一。如果可能,擁有鏈接編輯功能的客戶端應當自動把請求的地址修改為從服務器反饋回來的地址。除非額外指定,否則這個響應也是可緩存的。
301比較常用的場景是使用域名跳轉。
比如,我們訪問 http://www.baidu.com 會跳轉到 https://www.baidu.com,發送請求之后,就會返回301狀態碼,然后返回一個location,提示新的地址,瀏覽器就會拿着這個新的地址去訪問。
注意: 301請求是可以緩存的, 即通過看status code,可以發現后面寫着from cache。
或者你把你的網頁的名稱從php修改為了html,這個過程中,也會發生永久重定向。
Nginx配置
rewrite后面接上permenent就代表301跳
1 2 3 4
|
//把來自veryyoung.me的請求301跳到 www.veryyoung.me if ($host != 'veryyoung.me') { rewrite ^/(.*)$ http://www.veryyoung.me/$1 permanent; }
|
302臨時重定向
定義
302 Found 請求的資源現在臨時從不同的URI響應請求。由於這樣的重定向是臨時的,客戶端應當繼續向原有地址發送以后的請求。只有在Cache-Control或Expires中進行了指定的情況下,這個響應才是可緩存的。
比如未登陸的用戶訪問用戶中心重定向到登錄頁面。
訪問404頁面會重新定向到首頁。
Nginx配置
rewrite后面接上redirect就代表302跳
1 2 3 4
|
//把來自veryyoung.me的請求302跳到 www.veryyoung.me if ($host != 'veryyoung.me') { rewrite ^/(.*)$ http://www.veryyoung.me/$1 redirect; }
|
301與302的區別
302重定向只是暫時的重定向,搜索引擎會抓取新的內容而保留舊的地址,因為服務器返回302,所以,搜索搜索引擎認為新的網址是暫時的。
而301重定向是永久的重定向,搜索引擎在抓取新的內容的同時也將舊的網址替換為了重定向之后的網址。
Java實現獲取301或302跳轉后的URL
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
|
public String findLink(String url) { String result = null; try { URL serverUrl = new URL(url); HttpURLConnection conn = (HttpURLConnection) serverUrl.openConnection(); conn.setRequestMethod("GET"); |
用NodeJs實現獲取301或302跳轉后的URL
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
|
var request = require('request');
var find_link = function (link, collback) {
var f = function (link) { var options = { url: link, followRedirect: false, headers : { 'Content-Type': 'application/x-www-form-urlencoded', 'Accept-Charset': 'UTF-8;', 'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Firefox/3.6.8', } }
request(options, function (error, response, body) { console.log(response.statusCode); if (response.statusCode == 301 || response.statusCode == 302) { var location = response.headers.location; console.log('location: ' + location); f(location); } else { |
Node.js實現301、302重定向服務
轉 https://itbilu.com/nodejs/core/4yMyt38M.html
在Web應用中,有時會遇到頁面需要Url重定向的情況。Url重定向分為301
、302
兩種。301
、302
都是HTTP狀態的編碼,都代表着某個Url發生了轉移。不同的是301
重定向是永久的重定向(Moved Permanently),表示本網頁永久性轉移到另一個地址,搜索引擎在抓取新內容的同時也將舊的網址替換為重定向之后的網址。302
重定向是臨時的重定向(Moved Temporarily),表示本網頁暫時性轉移到另一個地址,搜索引擎會抓取新的內容而保留舊的網址。
可以用Nodejs的http模塊,實現一個301
或302
重定服務,實現代碼如下:
實現301
重定向服務:
var http = require('http');
var server = http.createServer(function (req, res) {
res.writeHead(301, {'Location': 'http://itbilu.com/'});
console.log(res._header);
res.end();
});
server.listen(3100)
Log打印結果為:
HTTP/1.1 301 Moved Permanently
Location: http://itbilu.com/
Date: Mon, 27 Apr 2015 05:39:47 GMT
Connection: keep-alive
Transfer-Encoding: chunked
實現302
重定向服務:
var http = require('http');
var server = http.createServer(function (req, res) {
res.writeHead(302, {'Location': 'http://itbilu.com/'});
console.log(res._header);
res.end();
});
server.listen(3100)
Log打印結果為:
HTTP/1.1 302 Moved Temporarily
Location: http://itbilu.com/
Date: Mon, 27 Apr 2015 05:40:51 GMT
Connection: keep-alive
Transfer-Encoding: chunked
由上可見,瀏覽器會跟根據301
和302
狀態碼,跳轉到Location
對應的網址中。Node.js在設置301
和302
狀態時,還自動加入了Moved Permanently
或Moved Temporarily
狀態描述。