(3) HTTP
来源:互联网 发布:linux php log 编辑:程序博客网 时间:2024/06/06 06:42
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 并不是这个区间的状态码全部存在。
模拟 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-Length:80[ 告诉浏览器发送的数据大小是 80 字节 ]Content-Type:text/html; charset=GB2313[ 内容格式 text/html; 编码gb2312 ]Content-Language:zh-cn[ 支持中文 ]Last-Modified:tue,11 jul 2001-2-2[ 告诉浏览器,该资源上次的更新时间,和缓存比较,如果资源修改了,及时更新 ]Refresh:1;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 页面:
// 获取 URLString 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();
- (3) HTTP
- 《图解HTTP》笔记3HTTP首部
- HTTP协议3-HTTP请求方法
- 【HTTP协议系列3】http请求
- HTTP协议介绍(3)
- 3 HTTP报文
- 1.5.3 HTTP HEADERS
- http 请求 详解 3
- http协议(3)
- 3-HTTP Messages
- 55. 安全 HTTP(3)
- 3 HTTP协议
- HTTP (3) HTTPs
- http
- http
- HTTP
- HTTP
- HTTP
- HNOI 2004 打砖块 动态规划
- ios面试题分享
- 静态链接库设计
- java基础--面向对象
- python xml.etree ElementTree解析 编辑 xml
- (3) HTTP
- Abstract
- svn如何使用命令从主干(trunk)拉一条分支到branches
- POJ 题目分类
- Ubuntu 14 安装jdk8,MySql的安装卸载等一些常用的命令
- JSTL标签的使用示例
- 做出图形用户接口1
- 源泉书签,今日更新: 编辑页面和删除页面的UI优化
- 凸包应用