瀏覽器向服務(wù)器發(fā)送請求,可能是直接在瀏覽器地址欄中輸入URL地址進行訪問,也可能是點擊一個網(wǎng)頁上的超鏈接而發(fā)出。對于第一種情況,瀏覽器不會發(fā)送Referer請求頭,而對于第二種情況,瀏覽器會使用Referer請求頭字段來標識請求的超鏈接所在網(wǎng)頁的URL。如下所示:
Referer: http://localhost:8080/Example07/
所謂的防盜鏈其實是Referer請求頭的一個很重要的功能,在
防盜鏈及Content-Type解讀文檔中,對于什么是防盜鏈有了詳細的解釋。今天,我們要學(xué)習(xí)的是如何通過request對象的相關(guān)方法實現(xiàn)防盜鏈功能。
1.防盜鏈案例練習(xí)
下面的防盜鏈練習(xí)是在Servlet中判斷請求的來源,即referer請求頭的值是否包含”localhost”,如果不包含或referer的值為null,則重定向到百度首頁,否則在控制臺上打印“hello“。具體如下所示:
(1)創(chuàng)建一個web應(yīng)用,Example08,在該應(yīng)用下創(chuàng)建一個Servlet類,RefererServlet,主要代碼如例1-1所示:
例1-1 RefererServlet.java
public class RefererServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 使用Referer請求頭,來防盜鏈
*/
String referer = request.getHeader("Referer");
System.out.println(referer);
if(referer == null || !referer.contains("localhost")) {
response.sendRedirect("http://www.baidu.com");
} else {
System.out.println("hello!");
}
}
}
(2)RefererServlet在web.xml文件中,其訪問路徑的配置為:“/RefererServlet”。
(3)將Example08發(fā)布到Tomcat服務(wù)器中,然后啟動Tomcat服務(wù)器,在瀏覽器地址欄上輸入:http://localhost:8080/Example08/RefererServlet,效果如圖1-1所示:
圖1-1 瀏覽器顯示結(jié)果
訪問RefererServlet后跳轉(zhuǎn)到百度首頁,并且控制臺上打印“null”,表明在地址欄上直接訪問資源,該請求頭的值為空。
(4)在Example08應(yīng)用中新建一個test.html,主要代碼如例1-2所示:
例1-2 test.html
<body>
<a href="/Example08/RefererServlet">去RefererServlet</a>
</body>
(5)重新啟動Tomcat服務(wù)器,在瀏覽器端訪問test.html,如圖1-2所示:
圖1-2 瀏覽器顯示結(jié)果
(6)點擊圖1-2所示的超鏈接“去RefererServlet”,控制臺打印結(jié)果如圖1-3所示:
圖1-3 控制臺打印結(jié)果
圖1-3中打印的Referer請求頭的值正是訪問RefererServlet的請求來源test.html的訪問路徑,其中包含“localhost”,所以“hello”也會被打印在控制臺中。
有了Referer請求頭,我們就可以根據(jù)它的值來判斷訪問來源是否是從本站發(fā)出,也可以通過它來做一些統(tǒng)計工作。
本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://xamj520.com/javaee