博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
http 请求中的 referer
阅读量:4113 次
发布时间:2019-05-25

本文共 2156 字,大约阅读时间需要 7 分钟。

浏览器在向 web 服务器发送一个 http 请求的时候,服务器会把 http 的请求包装成一个 request 对象,在这些请求里面就包括 referer,它的意思是要告诉服务器,该请求来自哪里。比如在一个网页里面插入一个超链接,链接到其他的网页,那么当点击这个超链接从而链接到另外一个页面的时候,相当于浏览器向 web 服务器发送了一个 http 请求,对于另外一个页面而言,这个 referer 就是上一个页面的 URL,而对于从地址栏里面直接输入 URL 或者是刷新网页的方式,则 referer = null,通过设置这个 referer 可以防止盗链的问题

看下面的代码,比如我从浏览器的地址栏里面直接输入地址:http://localhost:8080/Servlet1/MainFrame,然后点击回车键,则会输出:非法入侵

[java]   
  1. package com.mx.view;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. public class MainFrame extends HttpServlet {  
  12.   
  13.       
  14.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  15.             throws ServletException, IOException {  
  16.         response.setContentType("text/html;charset=utf-8");  
  17.         PrintWriter out = response.getWriter();  
  18.         String referer=response.getHeader("Referer");  
  19.         if(referer==null||!referer.startsWith("http://localhost:8080/Servlet1")){  
  20.             response.sendRedirect("/Servlet1/Error");  
  21.         }else{  
  22.             out.println("合法查看!");  
  23.         }  
  24.         response.setContentType("text/html;charset=utf-8");  
  25.       
  26.         out.println("<h1>登录界面</h1>");  
  27.           
  28.     }  
  29.       
  30.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  31.             throws ServletException, IOException {  
  32.   
  33.         this.doGet(request, response);  
  34.     }  
  35.   
  36. }  
其中 if 语句里面就是判断 referer 是否合法,即:如果 referer 为空,或者 referer 的来源 URL 不是以:http://localhost:8080/Servlet1 开头(也就是不是通过本站内的超链接过来的),那么将跳转到下面的 Error 的错误页面,如果是在本站内访问是可以的
[java]   
  1. package com.mx.view;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. public class Error extends HttpServlet {  
  12.   
  13.       
  14.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  15.             throws ServletException, IOException {  
  16.   
  17.         response.setContentType("text/html;charset=utf-8");  
  18.         PrintWriter out = response.getWriter();  
  19.           
  20.         out.println("非法入侵");  
  21.           
  22.     }  
  23.   
  24.       
  25.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  26.             throws ServletException, IOException {  
  27.   
  28.         this.doGet(request, response);  
  29.     }  
  30.   
  31. }  

附 Servlet1 项目目录图:

你可能感兴趣的文章
JavaSE_day14 集合中的Map集合_键值映射关系
查看>>
Day_15JavaSE 异常
查看>>
异常 Java学习Day_15
查看>>
JavaSE_day_03 方法
查看>>
day-03JavaSE_循环
查看>>
Mysql初始化的命令
查看>>
day_21_0817_Mysql
查看>>
day-22 mysql_SQL 结构化查询语言
查看>>
MySQL关键字的些许问题
查看>>
浅谈HTML
查看>>
css基础
查看>>
HTML&CSS进阶
查看>>
Servlet进阶和JSP基础
查看>>
servlet中的cookie和session
查看>>
过滤器及JSP九大隐式对象
查看>>
软件(项目)的分层
查看>>
菜单树
查看>>
MySQL-分布式架构-MyCAT
查看>>
设计模式六大原则(6):开闭原则
查看>>
阿里面试总结--JAVA
查看>>