HTTP(HyperTextTransferProtocol)即超文本传输协议,目前网页传输的的通用协议.HTTP协议采用了请求/响应模型,浏览器或其他客户端发出请求,服务器给与响应。就整个网络资源传输而言,包括message-header和message-body两部分。首先传递message-header,即http header消息.http header消息通常被分为4个部分:general header,request header,response header,entity header。但是这种分法就理解而言,感觉界限不太明确。根据维基百科对http header内容的组织形式,大体分为请求和响应两部分。
1.Request部分
头 | 解释 | 示例 |
---|---|---|
接受 | 指定客户端能够接收的内容类型 | 接受:text / plain,text / html |
接收字符 | 浏览器可以接受的字符编码集。 | Accept-Charset:iso-8859-5 |
接受编码 | 指定浏览器可以支持的网络服务器返回内容压缩编码类型。 | Accept-Encoding:compress,gzip |
接受语言 | 浏览器可接受的语言 | Accept-Language:en,zh |
接受-范围 | 可以请求网页实体的一个或者多个子范围字段 | Accept-Ranges:字节 |
授权 | HTTP授权的授权证书 | 授权:基本QWxhZGRpbjpvcGVuIHNlc2FtZQ == |
缓存控制 | 指定请求和响应遵循的缓存机制 | 缓存控制:无缓存 |
连接 | 表示是否需要持久连接。(HTTP 1.1默认进行持久连接) | 连接:关闭 |
曲奇饼 | HTTP请求发送时,会把保存在该请求域名下的所有cookie的值一起发送给网络服务器。 | Cookie:$ Version = 1; 皮肤=新的; |
内容长度 | 请求的内容长度 | 内容长度:348 |
内容类型 | 请求的与实体对应的MIME信息 | 内容类型:application / x-www-form-urlencoded |
日期 | 请求发送的日期和时间 | 日期:2010年11月15日星期二08:12:31 GMT |
期望 | 请求的特定的服务器行为 | 期待:100-继续 |
从 | 发出请求的用户的电子邮件 | 来自:user@email.com |
主办 | 指定请求的服务器的域名和端口号 | 主持人:www.zcmhi.com |
如果-匹配 | 只有请求内容与实体相匹配才有效 | 如果匹配:“737060cd8c284d8af7ad3082f209582d” |
如果-Modified-Since的 | 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 | If-Modified-Since:星期六,2010年10月29日19:43:31 GMT |
如果 - 无 - 匹配 | 如果内容未改变返回304代码,参数为服务器先前发送的的Etag,与服务器回应的Etag的比较判断是否改变 | 如果 - 无匹配:“737060cd8c284d8af7ad3082f209582d” |
如果量程 | 如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为的Etag | If-Range:“737060cd8c284d8af7ad3082f209582d” |
如果未修饰的,因为 | 只在实体在指定时间之后未被修改才请求成功 | If-Unmodified-Since:周六,2010年10月29日19:43:31 GMT |
马克斯 - 前锋 | 限制信息通过代理和网关传送的时间 | Max-Forwards:10 |
附注 | 用来包含实现特定的指令 | Pragma:没有缓存 |
代理授权 | 连接到代理的授权证书 | 代理授权:基本QWxhZGRpbjpvcGVuIHNlc2FtZQ == |
范围 | 只请求实体的一部分,指定范围 | 范围:字节= 500-999 |
引荐 | 先前网页的地址,当前请求网页紧随其后,即来路 | 推荐人:http: //www.baidu.com |
TE | 客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息 | TE:拖车,放气; q = 0.5 |
升级 | 向服务器指定某种传输协议以便服务器进行转换(如果支持) | 升级:HTTP / 2.0,SHTTP / 1.3,IRC / 6.9,RTA / x11 |
用户代理 | 用户代理的内容包含发出请求的用户信息 | 用户代理:Mozilla / 5.0(Linux; X11) |
通过 | 通知中间网关或代理服务器地址,通信协议 | 通过:1.0弗雷德,1.1 nowhere.com(Apache / 1.1) |
警告 | 关于消息实体的警告信息 | 警告:199其他警告 |
2.Respone
头 | 解释 | 示例 |
---|---|---|
接受-范围 | 表明服务器是否支持指定范围请求及哪种类型的分段请求 | Accept-Ranges:字节 |
年龄 | 从原始服务器到代理缓存形成的估算时间(以秒计,非负) | 年龄:12岁 |
允许 | 对某网络资源的有效的请求行为,不允许则返回405 | 允许:GET,HEAD |
缓存控制 | 告诉所有的缓存机制是否可以缓存及哪种类型 | 缓存控制:无缓存 |
内容编码 | 网络服务器支持的返回内容压缩编码类型。 | 内容编码:gzip |
内容语言 | 响应体的语言 | 内容 - 语言:en,zh |
内容长度 | 响应体的长度 | 内容长度:348 |
内容位置 | 请求资源可替代的备用的另一地址 | 内容位置:/index.htm |
内容-MD5 | 返回资源的MD5校验值 | Content-MD5:Q2hlY2sgSW50ZWdyaXR5IQ == |
内容范围 | 在整个返回体中本部分的字节位置 | 内容范围:字节21010-47021 / 47022 |
内容类型 | 返回内容的MIME类型 | Content-Type:text / html; 字符集= utf-8的 |
日期 | 原始服务器消息发出的时间 | 日期:2010年11月15日星期二08:12:31 GMT |
ETag的 | 请求变量的实体标签的当前值 | ETag:“737060cd8c284d8af7ad3082f209582d” |
过期 | 响应过期的日期和时间 | 到期日:2010年12月1日星期四16:00:00 GMT |
最后修改 | 请求资源的最后修改时间 | Last-Modified:Tue,2010年11月15日12:45:26 GMT |
地点 | 用来重定向接收方到非请求URL的位置来完成请求或标识新的资源 | 地点:http: //baidu.com |
附注 | 包括实现特定的指令,它可应用到响应链上的任何接收方 | Pragma:no-cache Proxy-Authenticate它指出认证方案和可应用到代理的该URL上的参数Proxy-Authenticate:Basic |
刷新 | 应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持) | 刷新:5;网址= http://1213.com |
重发后 | 如果实体暂时不可取,通知客户端在指定时间之后再次尝试 | Retry-After:120 |
服务器 | 网络服务器软件名称 | 服务器:Apache / 1.3.27(Unix)(Red-Hat / Linux) |
设置Cookie | 设置Http Cookie | Set-Cookie:UserID = JohnDoe; 最大年龄= 3600; 版本= 1 |
预告片 | 指出头域在分块传输编码的尾部存在 | 预告片:Max-Forwards |
传输编码 | 文件传输编码 | 传输编码:分块 |
变化 | 告诉下游代理是使用缓存响应还是从原始服务器请求 | 变化:* |
通过 | 告知代理客户端响应是通过哪里发送的 | 通过:1.0弗雷德,1.1 nowhere.com(Apache / 1.1) |
警告 | 警告实体可能存在的问题 | 警告:199其他警告WWW-Authenticate表明客户端请求实体应该使用的授权方案WWW-Authenticate:Basic |
3.cookie应用
//设置cookie
Cookie cookie = new Cookie(Constants.COOKIE_NAME, sessionId);
cookie.setDomain(PropertiesUtil.getProperty("cookie", "domain"));
cookie.setMaxAge(60 * 60 * 24 * 180);
cookie.setHttpOnly(true);
cookie.setSecure(false);
cookie.setPath("/");
response.addCookie(cookie);
- 1
- 2
- 3
- 4
- 五
- 6
- 7
- 8
//获取cookie
tring sessionId = null;
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if (cookie.getName().equals(Constants.COOKIE_NAME)) {
sessionId = cookie.getValue();
break;
}
}
- 1
- 2
- 3
- 4
- 五
- 6
- 7
- 8
- 9
4.获取引荐
String viewerHeader = request.getHeader(Constants.REFERER_HEADER);
URL refererUrl = new URL(viewerHeader);
String url = refererUrl.getHost();