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

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

时间: 2024-10-09 08:38:01

Java web基础总结二之—— http协议的相关文章

Java Web基础(二)(Servlet编写与配置)

下面的内容都是基础的Servlet知识,如果你想打好基础,就别急着学习JSP,而是从Servlet开始学习.因为JSP页面最终会被转译为Servlet,掌握了Servlet,JSP也就学会了一半,而且在写JSP页面时也能更准确地定位错误. 开发环境的搭建我就不说了,百度一搜一大堆,说一下我的开发环境:MyEclipse + Tomcat 7.0 + JDK 7 编写一个基本的Servlet 我们使用最原始的方式编写一个Servlet,首先遇到建一个类,然后继承HttpServlet,并实现其中的

Java Web基础教程(二)开发基础

Java Web基础教程(二)开发基础 转载:Future魏来 前言 Java web是一种基于B\S(浏览器\服务器)架构的网络应用程序的技术实现.这种结构的Web应用程序被大量的企业级应用所采用.随着Web应用程序的规模不断扩大,传统的Web开发模式无法满足日渐复杂的业务需要,所以出现了更加合理更加先进的MVC开发模式.随之而来的也出现了一系列的基于MVC模式的开发框架,Struts框架.Spring MVC 等. 1. Web 技术的发展 1. 第一阶段 静态网站 Web技术出现伊始,由于

Java Web基础 --- Servlet 综述(实践篇)

摘要: 伴随 J2EE 6一起发布的Servlet 3.0规范是Servlet规范历史上最重要的变革之一,它的许多新的特性都极大的简化了 Java Web 应用的开发.本文从一个简单的 Servlet 例子开始,说明了如何开发.配置一个 Servlet.此外,还重点叙述了Servlet的一些新特性,包括Servlet 异步处理.Servlet 非阻塞IO 以及 Servlet 文件上传等内容,以便我们对Servlet有一个更全面的了解. 本篇主要介绍 Servlet 实践方面的知识,更多关注于S

Java web基础总结五之—— HttpServletRequest与HttpServletResponse

Java web基础总结五之-- HttpServletRequest与HttpServletResponse 在前面总结过,每当客户端给Web服务器发送一个http请求,web服务器就会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象就代表请求和响应,所以我们可以通过request对象获得请求相关的数据和操作.通过response对象进行对响应相关的数据封装和一些其他的操作. 一.HttpServletRequ

Java web基础总结四之—— Servlet基础

Java web基础总结四之-- Servlet基础 一.什么是Servlet? 通过名字就能看出来,Servlet 就是在服务器上运行的小程序.Servlet是sun公司(现在已经属于oracle了)实现的一门用于开发动态java web资源的技术.Sun公司在其API中提供了一个servlet接口,如果你想开发一个动态的java web资源,需要完成以下2个步骤:编写一个Java类,实现servlet接口.把开发好的Java类部署到web服务器中. Servlet接口已经有了两个默认的实现类

Java web基础总结三之—— java web 服务器

Java web基础总结三之-- java web 服务器 一.什么是java web服务器 首先来看一下什么是web服务器,它一般指网站服务器,是指一个再互联网一个主机上的一个程序.它可以解析客户端发送来的遵循http协议的请求,并且经过逻辑业务处理后,以http协议向浏览器等Web客户端提供文档. 互联网上供外界访问的Web资源可以分为两种:一个是静态web资源(如html 页面),指web页面中供人们浏览的数据始终是不变.另一个动态web资源,指web页面中供人们浏览的数据是由程序动态产生

Java Web基础 --- Servlet 综述(理论篇)

摘要: Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.本文首先从请求/响应架构应用的大背景谈起 Servlet 的由来,明确 Servlet 的产生动机,并揭示了 Servlet 的本质以及其在标准MVC模式中所扮演的角色.紧接着,给出了 Servlet族的继承结构,并对族内的接口和抽象类作了进一步的介绍,并给出开发一个Servlet程序的常用做法.在此基础上,我们图文并茂地介绍了 Servlet 的生命周期与执行流程,清晰展现

Java Web基础 - Servlet

Java Web基础学习---Servlet 1.什么是servlet jsp的前生就是servlet,servlet就是在服务器端上运行的小程序,一个servlet就是一个java类,并且可以通过"请求-响应",编程模型来访问这个驻留在服务器内存里的servlet程序 2. 手工编写第一个Servlet Servlet层级关系: Servlet(接口)-->GenericServlet(抽象类,与协议无关的Servlet)-->HttpServlet(抽象类,实现了Htt

从Java Web 基础看SSH架构

Java Web开发现在已然成为大型Wed项目的标准,之前一直盲目的使用框架,往往知其然不知其所以然.在经过一段时间的学习与开发,大概掌握了其脉络的基础上,对其做一定总结. 一.Java Web 基础 一个典型的Java Web项目往往包含这些元素:Jsp页面.Servlet.Listener.Filter,以及配置文件web.xml.其中: Jsp和Servlet基本是一回事,主要用来响应客户端的请求.当然Jsp中可以直接嵌入HTML标签,主要还是负责展现. Listener则是负责监听Web