HTTP協議
什么是HTTP協議
(HyperText Transfer Protocol,超文本傳輸協議)是因特網上應用最為廣泛的一種網絡傳輸協議,所有的WWW文件都必須遵守這個標准。
HTTP是一個基於TCP/IP通信協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。
HTTP 工作原理
HTTP協議工作於客戶端-服務端架構上。瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB服務器發送所有請求。
Web服務器有:Apache服務器,IIS服務器(Internet Information Services)等。
Web服務器根據接收到的請求后,向客戶端發送響應信息。
HTTP默認端口號為80,但是你也可以改為8080或者其他端口。
HTTP三點注意事項:
- HTTP是無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。
- HTTP是媒體獨立的:這意味着,只要客戶端和服務器知道如何處理的數據內容,任何類型的數據都可以通過HTTP發送。客戶端以及服務器指定使用適合的MIME-type內容類型。
- HTTP是無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
HTTP狀態碼
當瀏覽者訪問一個網頁時,瀏覽者的瀏覽器會向網頁所在服務器發出請求。當瀏覽器接收並顯示網頁前,此網頁所在的服務器會返回一個包含HTTP狀態碼的信息頭(server header)用以響應瀏覽器的請求。
HTTP狀態碼的英文為HTTP Status Code。
下面是常見的HTTP狀態碼:
- 200 - 請求成功
- 301 - 資源(網頁等)被永久轉移到其它URL
- 404 - 請求的資源(網頁等)不存在
- 500 - 內部服務器錯誤
時間戳
什么是時間戳
一個能表示一份數據在某個特定時間之前已經存在的、 完整的、 可驗證的數據,通常是一個字符序列,唯一地標識某一刻的時間
它能用來干什么
版本更新,解決瀏覽器緩存
防盜鏈
基礎防盜鏈
基礎防盜鏈主要是針對客戶端請求過程中所攜帶的一些關鍵信息來驗證請求的合法性, 比如客戶端請求IP,請求URL中攜帶的referer。優點是規則簡單,配置和使用都很方便,缺點是防盜鏈所依賴的驗證信息很多都是可以偽造的,因此此類防盜鏈可靠性較低。
Java代碼手段防止非法請求,思路如下:
1.獲取到當前請求的域名,如www.a.com
2.獲取到請求資源的上一個地址
3.判斷上一個地址是否為空,如果為空代表的是直接訪問的資源,非法
還有一種情況就是B項目訪問時上一個地址www.b.com/xxx 不是資源所在地址,非法
新建一個過濾器,實現邏輯,如果非法則顯示圖像,攔截return ,否則放行 public class ImageFilter implements Filter{ @Override public void destroy() { System.out.println("過濾器銷毀"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("dofilter"); //獲取到當前請求的連接地址和上一個發送請求的地址 HttpServletRequest httprequest=(HttpServletRequest)request; HttpServletResponse httpresponse=(HttpServletResponse)response; //獲取上一個發送請求的連接 String referer = httprequest.getHeader("Referer"); String serverName = httprequest.getServerName(); System.out.println(referer+"\t"+serverName); if(referer==null||!referer.contains(serverName)) { request.getRequestDispatcher("/img/ffqq.png").forward(request, response); return; } //放行 chain.doFilter(request, response); } @Override public void init(FilterConfig arg0) throws ServletException { System.out.println("過濾器啟動"); } } web.xml配置過濾地址: <filter> <filter-name>imgFilter</filter-name> <filter-class>com.wdksoft.ImageFilter</filter-class> </filter> <filter-mapping> <filter-name>imgFilter</filter-name> <url-pattern>/img/*</url-pattern> </filter-mapping>
Referer在HTTP協議里有特殊的用途,當瀏覽器向服務器發送請求時,一般會帶上
Referer頭,告知服務器該請求是從哪個頁面鏈接過來的。Referer經常被用於頁面訪問統計、圖片防盜鏈等。
流媒體直播同樣支持Referer防盜鏈,當請求發送到CDN服務器后,CDN服務器檢查客戶URL中所攜帶的Referer字段的信息,禁止或者允許符合特定規則(支持正則匹配)的
防盜鏈具體具體相關內容可以看這位大佬的博客:https://blog.csdn.net/weixin_36562804/article/details/81014642