Http协议是建立在tcp/ip协议之上的一种超文本传输协议
在web应用中可以分为http请求和http响应
①http请求
GET /test/hello.html HTTP/1.1 请求行
Accept:*/*
Referer:http://localhost:8080
Referer:告诉服务器,我来自哪里,该消息头
常用于防止盗链.
Accept-Encoding:gzip
可以接受gzip压缩后的数据
Accept-language:..
浏览器支持的语言
User-Agent:
告诉服务器,浏览器的内核
Cookie:
Host:http://www.sohu.com:80
我要找的主机是
Connection:Keep-Alive 保持连接,发完数据,我不关闭连接
Date: 浏览器发送该http请求的时间
内容
Http的请求部分:
基本结构:
请求行
消息头
空行
内容
特别说明:并不是每一次请求的消息头都一样
关于Referer的实际案例(防止盗链)
String referer=request.getHeader("Referer");
if(referer==null) {
response.sendRedirect("url");
}
Http的请求都封装在HttpServetRequest中,可以从request.getRequestXXX中获取请求的相关参数如下
//HttpServletRequest的getRequestURL()方法获
//完整的URL地址
String url=request.getRequestURL().toString();
out.print("url="+url);
//URI
String uri=request.getRequestURI();
out.print("uri="+uri);
//QueryString(获取请求的子串)
String queryString=request.getQueryString();
out.println("queryString="+queryString);
//getRemoteAddr()请求方的ip地址
String remoteAddr=request.getRemoteAddr();
out.println("remoteAddr="+remoteAddr);
//getRemoteHost()//请求方的主机名,如果该客户机没有
//在DNS上注册,返回ip,如果注册了,返回机器名
String remoteHost=request.getRemoteHost();
//获取客户机的端口
int port=request.getRemotePort();
//获取服务器的端口
int serverport=request.getLocalPort();
//getHeader(通过消息头,来获取信息)
//比如要获取http请求的Host
String host=request.getHeader("Host");
//getHeaderNames方法,需求(请把http请求的消息全部打印出来)
//1.得到所有的头
Enumeration<String> headers=request.getHeaderNames();
while(headers.hasMoreElements()) {
//取出消息头的名字
String headername=headers.nextElement();
System.out.println(headername+":"+request.getHeader(headername));
}