(3) HTTP

HTTP 简介:
HTTP:HyperText Transfer Protocol (超文本传输协议)
是工作在 TCP/IP 协议基础上的,所有的 WWW 文件都必须遵守
这个标准。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。
① HTTP 协议 是建立在 TCP/IP 协议基础上的
② HTTP 协议 1.0 1.1 版本,目前使用的是 1.1
1.0 短连接  会话结束后,就挂断
1.1 长连接  会话结束后,会保留一段时间

HTTP 请求部分:

基本结构:
请求行 : GET /LoginDemo/LoginServlet HTTP/1.1
消息头: Accept : text/html, application/xhtml+xml, /
     Accept-Language : zh-CN
     Accept-Encoding : gzip, deflate
     Host : localhost:8080
     Connection : Keep-Alive
(空行)
内容体:

请求方式:
常用的 GET POST

详解 HTTP 响应头:

Accept:text/html,image/*    
[ 告诉服务器,我可以接收,文本,网页,图片 ]
Accept-Charset:ISO-8859-1
[ 接收字符编码 ISO-8859-1 ]
Accept-Encoding:gzip,compress
[ 可以接收 gzip,compress 压缩后的数据 
告诉浏览器我可以接收什么样的压缩格式,节省带宽 ]
Accept-Language:en-us,zh-cn
[ 浏览器支持 中,英文 ]
Host:www.sohu.com:80
[ 要找的主机是 www.sohu.com:80 ]
If-Modified-Since:Tue,11 Jul 2000 16:16:16
[ 告诉服务器,我的缓存中有这个资源文件,该文件的时间是....如上.. 
如果服务器上的文件有修改,就给我。没修改,就不要给我了。]
Referer:http://www.sowu.com
[ 告诉服务器,我来自哪里。该消息头常用于防止盗链 ]
User-Agent:Mozilla/4.0(compat...........)
[ 告诉服务器,浏览器内核 ]
Cookie
[ 后续 ]
Connection:close/Keep-Alive
[ 保持连接,发完数据后,我不关闭连接 ]
Date:Tue,11 Jul.......
[ 浏览器发送该 HTTP 请求的时间 ]

HTTP 响应部分:

基本结构:
状态行: HTTP 版本号 状态码 原因叙述
消息头:
(空行)
内容 :

状态行:
格式:HTTP 版本号 状态码 原因叙述
例子:HTTP/1.1 200 OK
状态码 ( status ) 是用于表示服务器对请求的处理结果,它是一个三位的十进制数。
响应状态码分为 5 类:

状态码含义
100~199表示成功接收请求,要求客户端继续提交,下一次请求才能完成整个处理过程
200~299表示成功接收请求并已完成整个处理过程,常见 200
300~399为完成请求,客户需要进一步细化请求。例如,请求的资源已经移动一个新地址,常用 302、307
400~499客户端请求有错误,常见 404
500~599服务器端出现错误,常用 500

注:每个范围内的所有数字并不是都有含义,例如 100~199 并不是这个区间的状态码全部存在。
模拟 302 状态码:

response.setStatus(302);
response.setHeader("Location","/webapp.servlet");
// 上两行等价于下一行 ↓
response.sendRedirect("/webapp.servlet");

响应头详解:

Location:http://www.baidu.com 
[ 让浏览器重新定位到URL ]

Server:apache tomcat 
[ 告诉浏览器,我是 Tomcat ]

Content-Encoding:gzip
[ 告诉浏览器,这个数据是 gzip 压缩数据 ]

Content-Length80
[ 告诉浏览器发送的数据大小是 80 字节 ]

Content-Type:text/html; charset=GB2313
[ 内容格式 text/html; 编码gb2312 ]

Content-Language:zh-cn
[ 支持中文 ]

Last-Modified:tue,11 jul 2001-2-2
[ 告诉浏览器,该资源上次的更新时间,和缓存比较,如果资源修改了,及时更新 ]

Refresh1;url=http://www.baidu.com
[ 过多久,刷新到此 URL 。如果 URL 写自己的页面,就是定时刷新]

Content-Disposition:attachment;filename=aaa.zip
[ 告诉浏览器,有文件要下载 ]
下载的过程:
① 服务器先读取 web 应用的资源文件进服务器内存
② 然后在把数据传输给浏览器客户端

Transfer-Encoding:chunked
[ 传输编码 ]

SetCookie:ss=Q0; path=/search
[ 后续 ]

Expires:-1  -1 是数字,response.setDateHeader("Expires",-1);
[ 告诉浏览器,如何缓存页面 ] IE 浏览器 ↑
Cache-Control:no-cache
[ 告诉浏览器,如何缓存页面 ] 其他浏览器 ↑
Pragma:no-cache
[ 告诉浏览器,如何缓存页面 ] 其他浏览器 ↑

Connection:close/KeepAlive
[ 连接方式,长连接 ]

Date:tue,11.......
[ 传回来的时间 ]

文件下载案例(防盗链):

需求:
① 防盗链
② 一个 Servlet 文件支持多个文件下载

View 页面:
// 在View页面,使用 ?来传递参数
URL:………. / DownloadServlet ? filename=myeclipse1.jpg

Servlet 页面:

// 获取 URL
String url = request.getHeader("Referer");
// 判断 URL 是否符合标准
if (url == null||!=
     (url.startsWith("http://localhost:8080/DownloadDemo"))) {
     response.sendRedirect("/DownloadDemo/Error");
}
String filename = request.getParameter("filename");
response.setHeader("Content-Disposition", "attachment;filename=" + filename);
// 获取真实路径
String realPath = this.getServletContext().getRealPath("/" + filename);
FileInputStream fis = new FileInputStream(realPath);
OutputStream os = response.getOutputStream();
byte[] buffer = new byte[1024];
int length = -1;
while ((length = fis.read(buffer)) > 0) {
    os.write(buffer, 0, length);
}
os.close();
fis.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值