学习web开发必须要学习http协议的 叫做超文本传输协议
先来看请求:
GET /APP HTTP/1.1 ---------------请求行
下面是消息头
Accept: text/html,image/* [告诉浏览器,客户端可以接受文本,网页等内容]
Accept-Charset: IOS-8859-1 [接受的字符编码格式]
Accept-Encoding:gzip,compress[可以接受gzip等压缩后的数据]
Accept-Lanaguage:en-us [浏览器支持的语言]
Host:www.baidu.com [要找的主机]
If-Modified-Since:Tue,11….[请求的文件本地存在,告诉服务器存在的时间,如果更新了就要]
Referer:www…. [告诉服务器我来自哪里]常用语 防止盗链
User-Agent:Mozilla/4.0 [使用的浏览器内核]
Cookie [cookie]
Connection:close/Keep-Alive[保持连接,发送完数据后补关闭连接]
Date:Tue.. [发送请求的时间]
Connection:Keep-Alive 代表保持长连接
空行
内容
下面代码分别获取客户端发送过来请求内容:
一个辅助类:
package com.codeguy.d1.protocol;
import javax.servlet.http.HttpServletRequest;
public class HttpHeader {
public static String getHeader(String header,HttpServletRequest req){
return req.getHeader(header);
}
}
获取请求消息头内容:
package com.codeguy.d1.protocol;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Protocol extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
//这里弄个表单:
String headers[] = {"Accept","Accept-Charset","Accept-Encoding","Accept-Lanaguage","Host","If-Modified-Since","Referer","User-Agent","Cookie","Connection","Date"};
String headerNames[] = {"可接受内容: ","可接受字符集: ","可接受的压缩格式: ",
"浏览器支持的语言: ","请求的主机名: ","本地存放文件的时间: ","客户端地址: ","浏览器内核: ","Cookie: ","链接方式: ","发送时间: "
};
for(int i=0; i<headers.length; i++){
out.println(headerNames[i]+HttpHeader.getHeader(headers[i], request));
out.println("<br/>");
}
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
防止盗链测试:
请求页面:
package com.codeguy.d1.protocol;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Link extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println("<form method='post' action='/ServletStudy/PreventLink'>");
out.println("<input type='submit' value='link'/>");
out.println("</form>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
判断是否盗链:
package com.codeguy.d1.protocol;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class PreventLink extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
String checkAddress = "localhost:8080/ServletStudy";
String referer = request.getHeader("Referer");
//这里判断条件不能写反啦 如果反啦就会出现使用NULL去调用indexof 发生Exception
if(referer != null && "".equals(referer) && referer.indexOf(checkAddress) != -1){
out.println("正确链接");
}else{
out.println(" 盗链");
}
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}