HTTP协议
2016-06-25 11:32
591 查看
基础概念
什么是Http协议客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式。
HTTP是HyperText Transfer Protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。
Http 1.0和http 1.1的区别
在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源。
HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。
Http请求
客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括如下内容:
请求行
请求头
请求的内容,如果没有,就是空白字符
其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。
GET(请求的方式) /books/java.html(请求的目标资源) HTTP/1.1(请求采用的协议和版本号)
Accept: /(客户端能接收的资源类型)
Accept-Language: en-us(客户端接收的语言类型)
Connection: Keep-Alive(维护客户端和服务端的连接关系)
Host: localhost:8080(连接的目标主机和端口号)
Referer: http://localhost/links.asp(从来于哪里)
User-Agent: Mozilla/4.0(客户端版本号的名字)
Accept-Encoding: gzip, deflate(客户端能接收的压缩数据的类型)
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT(缓存时间)
Cookie(客户端暂存服务端的信息)
Date: Tue, 11 Jul 2000 18:23:51 GMT(客户端请求服务端的时间)
总结:想让浏览器有何种行为,服务端只能通过响应头的方式来设置
Http响应
一个HTTP响应代表服务器向客户端回送的数据,它包括:
响应行
响应头
响应的内容,如果没有,就是空白字符
其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。
HTTP/1.1(响应采用的协议和版本号)
Location: http://www.baidu.com(服务端需要客户端访问的页面路径)
Server:apache tomcat(服务端的Web服务端名)
Content-Encoding: gzip(服务端能够发送压缩编码类型)
Content-Length: 80(服务端发送的压缩数据的长度)
Content-Language: zh-cn(服务端发送的语言类型)
Content-Type: text/html; charset=GB2312(服务端发送的类型及采用的编码方式)
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT(服务端对该资源最后修改的时间)
Refresh: 1;url=http://www.it315.org(服务端要求客户端1秒钟后,刷新,然后访问指定的页面路径)
Content-Disposition: attachment; filename=aaa.zip(服务端要求客户端以下载文件的方式打开该文件)
Transfer-Encoding: chunked(分块传递数据到客户端)
Set-Cookie:SS=Q0=5Lb_nQ; path=/search(服务端发送到客户端的暂存数据)
Expires: -1//3种(服务端禁止客户端缓存页面数据)
Cache-Control: no-cache(服务端禁止客户端缓存页面数据)
Pragma: no-cache(服务端禁止客户端缓存页面数据)
Connection: close(1.0)/(1.1)Keep-Alive(维护客户端和服务端的连接关系)
Date: Tue, 11 Jul 2000 18:23:51 GMT(服务端响应客户端的时间)
状态码:
200(状态码) OK(描述信息)
302(客户端请求服务端,但服务端没有对应的资源,服务端要客户端再次请求找其它的服务端,即客户端二次请求,重定向)
307(客户端请求服务端,但服务端没有对应的资源,服务端自行再次请求找其它的服务端,即客户端一次请求,转发)
304(客户端请求服务端,此时客户端缓存中有,无需再从服务端下载新的内容,服务端叫客户端自行找缓存,优化)
500(客户端请求的资源,服务端存在,但在执行时出错)
想让服务器知道何种行为,浏览器只能通过请求头的方式来设置
通用消息头
指既能用于请求,又能用于响应的一些消息头,比如
Cache-Control: no-cache
Pragma: no-cache
Connection: close/Keep-Alive
Date: Tue, 11 Jul 2000 18:23:51 GMT
常见的提交方式
GET
特点:请求参数无论多少,都会根着URL后传递到服务端,以明文方式传递
GET方式传递有大小限制
GET方式传递信息不安全
POST
特点:
请求参数无论多少,都不会根着URL后传递到服务端,而是以参数形式在请求体中传递到服务端
POST方式传递无大小限制
POST方式传递信息相对安全
测试(Java)
302重定向response.setStatus(302);
response.setHeader( “Location”, “/HttpDemo/index.jsp”);
响应头设置浏览器打开压缩数据
压缩的数据
String data="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ; //压缩前的数据长度 System. out.println(data.length());
压缩前的字节数组长度为88
压缩
ByteArrayOutputStream bout = new ByteArrayOutputStream(); GZIPOutputStream gout = new GZIPOutputStream(bout); gout.write(data.getBytes()); gout.flush(); gout.close(); //取出压缩后的数据 byte[] buf = bout.toByteArray(); System. out.println(buf. length);
压缩之后的数组长度为24
通过设置响应头让浏览器解压数据
//将压缩后的数据输出到浏览器
response.setHeader( "content-encoding", "gzip" ); response.setHeader( "content-length", buf. length+ ""); //服务端以字节的方式输出 response.getOutputStream().write(buf);
设置响应头让浏览器打开图片
response.setHeader("Content-Type", "image/jpeg"); String imageName = request.getParameter( "imageName"); String path = "E:\\我的照片(肥嘟嘟说不能删)\\" +imageName; InputStream is = new FileInputStream( new File(path)); OutputStream os = response.getOutputStream(); byte buf[] = new byte[1024]; int len = 0; while((len = is.read(buf))>0){ os.write(buf, 0, len); } is.close(); os.close();
设置响应头让浏览器下载图片
// 通知浏览器下载图片 response.setHeader( "Content-Disposition", "attachment; filename="+imageName);
让浏览器在指定时间后访问指定url
//让浏览器三秒后访问指定URL response.setHeader( "Refresh", "3;url=/HttpDemo/index.jsp");
禁止浏览器缓存数据
response.setHeader("Expires", "-1"); response.setHeader( "Cache-Control", "no-cache"); response.setHeader( "Pragma", "cache");
相关文章推荐
- Android IPC进程间通讯机制
- Android Manifest 用法
- Android学习笔记(二九):嵌入浏览器
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 回顾 Firefox 历史
- 小白观察:微软释放出其基于 Chromium 的 Edge 浏览器
- 浏览器 cookie 限制
- 玩转浏览器IE7的5个顶级使用技巧
- 字符集导致的浏览器跨站脚本攻击分析
- 更改IE浏览器的图标
- 如何创建ajax对象并兼容多个浏览器
- css ie6 ie7 ff的CSS hack使用技巧
- CSS 浏览器的等宽空格问题解决
- 区分IE6,IE7,firefox的CSS hack
- PHP检测用户是否关闭浏览器的方法
- PHP限制页面只能在微信自带浏览器访问的代码
- asp.net实现获取客户端详细信息
- ASP.NET实现推送文件到浏览器的方法
- PHP实现连接设备、通讯和发送命令的方法