javaweb开发入门-http协议

来源:互联网 发布:mac可以玩steam吗 编辑:程序博客网 时间:2024/04/28 11:05
 
一、HTTP协议简介
lHTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。
lHTTP协议是学习JavaWEB开发的基石,不深入了解HTTP协议,就不能说掌握了WEB开发,更无法管理和维护一些复杂的WEB站点。
lHTTP协议的版本:HTTP/1.0、HTTP/1.1
二、HTTP基本运行方式
基于HTTP协议的客户/服务器模式(在WWW中,“客户”与“服务器”是一个相对的概念,只存在于一个特定的连接期间,即在某个连接中的客户在另一个连接中可能作为服务器)的信息交换过程,如图所示,它分四个过程,建立连接、发送请求信息、发送响应信息、关闭连接
l当用户向Web服务器送出请求时,Web服务器将会开启一个新连接。
l通过这个连接,用户可以将HTTP请求传送给Web服务器。
l当Web服务器收到HTTP请求时,将进行解析与处理,并将处理结果包装成HTTP回应。
l最后,Web服务器会将HTTP回应传送至用户。只要用户接收到HTTP回应,Web服务器就会关闭这个连接,用户的执行状态将不会被保存。
三、HTTP请求
客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括如下内容:
一个请求行、若干消息头、以及请求正文,如下所示 :
 
 
1、请求行
l请求行中的GET称之为请求方式,请求方式有:
POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
•常用的有: GET、 POST
•用户如没有设置,默认情况下浏览器向服务器发送的都是get请求,例如在浏览器直接输地址访问,点超链接访问等都是get,用户如想把请求方式改为post,可通过更改表单的提交方式实现。
l不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上:
如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:
•GET /mail/1.html?name=abc&password=xyz HTTP/1.1
GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。
如请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,Post方式的特点:传送的数据量无限制。
 
2、
l用于HTTP请求中的常用头
lAccept:浏览器可接受的MIME类型
lAccept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
lReferer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面
laccept-language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
lcontent-type:内容类型
laccept-encoding:浏览器能够进行解码的数据编码方式,比如gzip
luser-agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。
lHost:初始URL中的主机和端口
lcontent-length:表示请求消息正文的长度
lConnection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接
lCookie:这是最重要的请求头信息之一

对数据进行压缩传输,实例:采用Gzip格式

String data="sdkfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";

System.out.println("原始数据大小:"+data.getBytes().length);

ByteArrayOutputStream bout=new ByteArrayOutputStream();

GZIPOutputStream gout=new GZIPOutputStream(bout);

gout.wrtie(data.getBytes());

gout.close();

 

byte gzip[]=bout.toByteArray();

System.out.println("压缩后的大小"+gzip.length);

 

response.setHeader("Content-Encoding","gzip");

response.setHeader("Content-Length",gzip.length+"");

response.getOutputStream().write(gzip);

 

 
 
 
 
 
四、HTTP响应
1、状态行
l状态行
格式: HTTP版本号 状态码 原因叙述<CRLF>
举例:HTTP/1.1 200 OK
l状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:
状态码含义:
100~199
表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程
200~299
表示成功接收请求并已完成整个处理过程,常用200
300~399
为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址,常用302、304
400~499
客户端的请求有错误,常用404
500~599
服务器端出现错误,常用 500
二、常用响应头
•Location: http://www.it315.org/index.jsp 配合302状态码使用。
•Server:apache tomcat:告诉浏览器服务器类型
•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:告诉浏览器隔几秒刷新页面
•Content-Disposition: attachment; filename=aaa.zip:以下载的方式打开文件
•Set-Cookie:SS=Q0=5Lb_nQ; path=/search
•Expires: -1
Cache-Control: no-cache 
Pragma: no-cache  
Connection: close/Keep-Alive  
Date: Tue, 11 Jul 2000 18:23:51 GMT
原创粉丝点击