码迷,mamicode.com
首页 > 编程语言 > 详细

Java web基础总结二之—— http协议

时间:2015-05-07 14:37:11      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:java web   http协议   web服务器   浏览器   server   

Java web基础总结之二——http协议

 

       由于java web是基于B/S的,所以http协议是java web 最基础,也非常重要的知识。HTTP协议用于定义客户端与web服务器之间进行通信的格式。从web服务器中获得某个web资源或者web 服务器接受客户端的请求都需要遵守一定的通讯格式,就是http协议。

 

 

一.HTTP协议是什么?

        HTTP协议是学习java web的基石,同时也是管理和维护一些复杂的WEB站点的必备的基础,如果你想要深入的理解java web的服务器的实现,就更需要掌握它。

        HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是在TCP/IP协议之上的一个应用层协议,默认的端口是80,用于定义WEB浏览器与WEB服务器之间交换数据的格式和规范。

        HTTP协议是无状态的协议,是因为一个web服务器并不会保存关于客户机的任何的信息。在B/S架构中,web服务器总是打开的,具有固定的IP地址,同时服务成千上万的不同的浏览器。

        HTTP协议有两个版本:HTTP/1.0、HTTP/1.1。现在基本使用的都是HTTP/1.1。他们之间有一个重要的区别:在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源。HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。也就是常说的持久连接。

二.持久连接和非持久连接的区别

          一个web页面,也被称为文档。是由对象组成的,简单的说,对象就是文件,比如html文件,图片文件等等。大部分的web页面含有一个基本html文件以及多个引用对象。比如一个web页面含有一个基本的html文件和2个图片文件,那么这个web页面就有6个对象。基本html文件通过对象的URL地址对对象进行引用。URL地址由两部分组成:存放对象的服务器的主机名和对象相对于主机的路径名。例如:

http://c.csdnimg.cn/www/images/pic_foot_BNIA.png  中的 c.csdnimg.cn就是主机名,

/www/images/pic_foot_BNIA.png就是路径名。

        非持久连接就是当客户端请求一个web页面时,对每一个对象的请求/响应都是经过一个单独的TCP连接发送。例如,如果一个web页面包含一个基本html文件和5个JPEG的图片文件。则使用非持久连接时,用户请求这个页面,会建立11个TCP连接。

        持久连接则是对一个页面的请求,甚至在同一个服务器上的多个web时,都可以在单个的持久TCP连接上进行传送。比如上面的例子中,可能只需要一个持久的TCP连接。一般来说,如果一个连接经过一定的时间间隔没有被使用,HTTP服务器就会关闭这个连接。

 

 

三.HTTP的请求

    客户端的浏览器连上web服务器后,会向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括:一个请求行、一些消息头、和实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。

 

1. 请求行

    请求行中需要注意的是请求方式,主要有:

         POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT

         我们常用的有:POST、GET 。其他的比较少遇到,这里就不多叙述了。

       POST或GET,都是用于客户端向服务器请求某个WEB资源,他们都可以带一些数据给服务器,但是他们有一定的区别:

如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:

                  GET/aaa/bbb?name=ccc&password=ddd HTTP/1.1

         GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量不能超过1K。可以看到,使用GET请求方式时,参数是显示在浏览器的输入框里的,所以是可见的。

当请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,例如:

         POST /user/loginHTTP/1.1

         Host:

         Content-Type:application/x-www-form-urlencoded

         Content-Length:28

 

         name=aaa&password=bbb

         Post方式的特点:传送的数据量没有大小的限制,而且参数不会在浏览器的地址框里显示。

 

2. 消息头

   http请求头是必须存在的,它携带了很多的重要的信息,比如客户端的浏览器的标识,下面是HTTP请求中的常用头:

Accept: text/html,image/*   

Accept-Charset: ISO-8859-1

Accept-Encoding: gzip,compress

Accept-Language: en-us,zh-cn

Host: http://www.csdn.net:80

If-Modified-Since: Tue, 11 Jul 2010 18:23:51 GMT

Referer: http:// http://www.csdn.net

User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)

Cookie

Connection: close/Keep-Alive  

Date: Tue, 11 Jul 2010 18:23:51 GMT

 

 

四.HTTP的响应

        和HTTP的请求相对应,一个HTTP响应表示服务器向客户端回送的数据,它也包括三个部分:一个状态行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用一个空行作为间隔。

        状态行中需要知道的就是状态码,状态码表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码总共分为5类,如下所示:

 

100~199

表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程

200~299

表示成功接收请求并已完成整个处理过程,常用200

300~399

为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址,常用302、307和304。比如304的重定向

400~499

客户端的请求有错误,常用如403的禁止访问和404的找不到资源

500~599

服务器出现错误,比如服务器端程序抛出了异常,常用 500。

 

 

 和 HTTP请求头一样,HTTP也有一些常用的响应头,如下所示:

Location: http:// www.csdn.net

Server:apache tomcat

Content-Encoding: gzip

Content-Length: 80

Content-Language: zh-cn

Content-Type: text/html; charset=GB2312

Last-Modified: Tue, 11 Jul 2010 18:23:51 GMT

Refresh: 1;url=http://www.csdn.net

Content-Disposition: attachment; filename=aaa.zip

Transfer-Encoding: chunked 

Set-Cookie:SS=Q0=5Lb_nQ; path=/aaa

Expires: -1

Cache-Control: no-cache 

Pragma: no-cache  

Connection: close/Keep-Alive  

Date: Tue, 11 Jul 2000 18:23:51 GMT

 

   需要注意的是,有一些通用的消息头,既可以用于请求,也可以用于响应,比如:

  Cache-Control:no-cache    用于指定是否需要缓存

  Pragma:no-cache   Pragma: no-cache兼容http 1.0 ,Cache-Control:no-cache是http 1.1新加的消息头。

  Connection:close/Keep-Alive   这个就是控制是持久连接还是非持久连接。

  Date: Tue, 11Jul 2000 18:23:51 GMT 

Java web基础总结二之—— http协议

标签:java web   http协议   web服务器   浏览器   server   

原文地址:http://blog.csdn.net/qfycc92/article/details/45559569

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!