`
seara
  • 浏览: 648731 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java网络编程从入门到精通(21):HTTP消息的格式

阅读更多

本文为原创,如需转载,请注明作者和出处,谢谢!

上一篇:Java网络编程从入门到精通(20):HTTP协议简介

当用户在浏览器中输入一个基于HTTP协议的URL时(以http://开头的URL),就相当于通知器按着这个URL组织生成一个HTTP请求,并交过个请求发送到服务器;同时,等待服务器的响应。无论是请求还是响应,都统称为HTTP消息。

HTTP协议分为两部分:

1. HTTP请求消息。

2. HTTP响应消息。

一、HTTP请求消息

HTTP请求消息分为请求消息头以及请求实体内容两部分。请求消息头的第一行必须由以下三部分组成:

请求的方法(GET、POST和HEAD等)。

Web资源的路径(http://www.website.com/test/test.html中的/test/test.html

部分)。

HTTP协议的版本(HTTP/1.0或HTTP/1.1)。

在请求消息头的其他行是请求头字段。每一行的格式是:

"头字段" ":" "头字段的值"

请求头以一个空行结束。如下面上一个GET请求的例子:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->GET/HTTP/1.1
Host:www.csdn.net
Connection:Keep-Alive
Accept:*/*

如果是POST请求,将要提交的实体内容放到消息头的空行后面,如下面是一个POST请求的例子:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->POST/servlets-examples/servlet/RequestParamExampleHTTP/1.1
Host:localhost:
8888
Content-Length:
29
Connection:Close

firstname
=Bill&lastname=Gates

在上面的请求消息中Content-Length表示请求内容的以字节为单位的长度(" firstname=Bill&lastname=Gates"的长度)。在使用POST方法时,这个字段必须提供,而且长度必须等于实体内容的长度,否则服务器将返回一个错误状态码。

二、HTTP响应消息

HTTP响应消息同样也分为消息头和实体内容两部分。HTTP的响应消息头和请求消息头类似;第一行是请求的结果,也就是说,在响应消息头的第一行表明了请求消息是否成功地获得了服务器上的Web资源。第一行必须由以下三部分组成:

1. 响应消息的HTTP版本。

格式为HTTP/1.1或HTTP/1.0。这个版本号未必和请求消息头的版本号一致;这主要是

因为,服务器未必支持HTTP请求中所描述的HTTP版本,如使用GET / HTTP/1.1去请求服务器,当服务器只支持HTTP1.0时,那么就会返回HTTP/1.0。

2. 状态码。

这个状态码由三位的数字组成,分为五个档次。下面是HTTP1.1的响应码:

(1)以1开头的数字(1xx)。

临时请求状态码。由100和101组成。这类状态码并不经常使用,它们的作为主要是服务器为客户端返回的临时的状态。

(2)以2开头的数字(2xx)。

请求成功状态码。范围从200到206。其中最常用的是200,它表示客户端请求成功,服务器已经将所请求的Web资源返回到了客户端。其他的六个状态码类似,都表示请求成功,只是要指引客户端进和下一步的动作。如状态码206表示服务器只是返回了一部分请求资源,客户端要想获得全部的Web资源,必须继续发出HTTP请求。其他的响应码的含义可以参阅HTTP1.1的规范RFC2616。

(3)以3开头的数字(3xx)。

Web资源重定向状态码。范围从300到307。所有以3开头的状态码都以不同的原因和方式使Web资源改变了原来的URL。如302通过一个Location字段确定了Web资源改变URL后的位置。有了这种状态码,当某个网站或其他的Web资源的URL变化后,而访问这些Web资源的用户并不能即使知道变化后的URL;因此,可以在用户访问原来的URL时加一个302响应,使客户端自动去访问新的URL。

(4)以4开头的数字(4xx)。

客户端错误状态码。范围从400到417。也许没人希望看到这状态码。但它们确实在Internet上大量存在。当用户访问的Web资源不存在或是没有权限访问Web资源时,服务器将返回这类状态码。这类状态码中最常遇到的是400。当用户发送一个不存在的Web资源路径时(GET、POST和HEAD方法后面跟的路径),服务器就会返回这个状态码。

(5)以5开头的数字(5xx)。

服务器错误状态码。范围从500到505。这类状态码也是一类错误状态码,只是它和4xx不同的是,5xx的错误是由于服务器的原因而产生的;如用户向服务器发送一个HTTP协议不支持的方法,如GET1,服务器将返回501错误,表示服务器不支持这个HTTP请求方法。

3. 状态信息。

响应信息的内容和状态码息息相关。如状态码为200,则状态信息为"OK"。状态码为501,状态信息为"Not Implemented"。要想详细了解每一个状态码所对应的状态信息,请参阅HTTP1.1的规范RFC2616。

HTTP响应消息的其他部分和请求消息一样,也是由很多响应头字段组成,每个字段和字段值占一行。响应消息头使用一个空行结束,空行的后面跟着HTTP响应消息的实体内容。如下面是一个完整的HTTP请求和响应的例子:

HTTP请求消息

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->GET/HTTP/1.1
Host:www.csdn.net

HTTP响应消息


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->HTTP/1.0200OK
Content-Length:
132273
Content-Type:text/html
Content-Location:http://www.csdn.net/index.htm
Last-Modified:Sun
,28Jan200709:20:00GMT
Accept-Ranges:bytes
ETag:
"eed72b7cbd42c71:1b0e"
Server:Microsoft-IIS/
6.0
X-Powered-By:ASP.NET
Date:Sun
,28Jan200709:23:26GMT
Age:
32
X-Cache:HITfromcachebj244.csdn.net
Connection:close
<!DOCTYPEhtml


从上面的HTTP消息可以看出,请求和响应消息中的HTTP版本并不一样,这说明CSDN的Web服务器为了和只支持HTTP1.0的客户端兼容,也采用了HTTP1.0协议。

注意:
在HTTP请求和响应消息中的第一行的请求方法(GET、POST等)以及HTTP/1.1或HTTP1.0中的字母必须大写,请求方法后面的路径大小写都可。消息头字段对大小写不敏感,但大多数的请求和响应字段名都采取了首字母大写的方式。

下一篇:
Java网络编程从入门到精通(22):实现HTTP模拟器



国内最棒的Google Android技术社区(eoeandroid),欢迎访问!

《银河系列原创教程》发布

《Java Web开发速学宝典》出版,欢迎定购

分享到:
评论

相关推荐

    java网络编程从入门到精通

    Java网络编程是开发分布式应用...通过阅读"Java网络编程从入门到精通"这本书,你将系统地学习到以上所有内容,并通过实例和练习加深理解,从而在实际项目中灵活运用这些知识,成为一名精通Java网络编程的专业开发者。

    Java并发编程从入门到精通(pdf)(附源码)

    《Java并发编程从入门到精通》是一本专为Java开发者设计的深度学习并发编程的书籍。作者韩剑锋,凭借其12年的IT行业经验,曾担任多家IT公司的研发总监和技术总监,以其丰富的实战经验和深厚的理论知识,为读者提供了...

    Java网络编程从入门到精通

    本教程"Java网络编程从入门到精通"旨在帮助初学者和有经验的开发者深入理解这一领域,从基础知识到高级主题,提供了一套全面的学习资源。 在Java中,网络编程主要涉及以下核心知识点: 1. **Socket编程**:Java的...

    java并发编程从入门到精通

    《Java并发编程从入门到精通》作者结合自己10多年Java并发编程经验,详细介绍了Java并发编程的基础概念、工作原理、编程技巧和注意事项,对Java高性能高并发编程有极大的参考价值。 《Java并发编程从入门到精通》...

    Java并发编程从入门到精通源码.rar

    这个资源包“Java并发编程从入门到精通源码.rar”显然是为了帮助开发者深入理解并掌握这一关键技能。它包含了从基础概念到高级技术的详细讲解,并提供了源码供学习者实践和探索。 在Java并发编程中,首先要了解的...

    java 网络编程从入门到精通

    Java网络编程是开发分布式应用程序的关键技术,它涵盖了网络通信的基础概念和高级应用。...通过编写网络通信的示例程序,可以更好地理解和掌握网络编程的概念和技术,从而达到从入门到精通的目标。

    Java从入门到精通.pdf

    Java基础知识,数据结构,算法,Java集合框架,Java8新特性,操作系统,网络原理,Java多线程及并发编程,Java的IO模型及网络编程,JVM,Mysql,JavaWeb和一个仿Tomcat实现的简易版HTTP服务器项目。适合小白及Java初...

    asp网络编程从入门到精通

    总的来说,通过“ASP网络编程从入门到精通”,你将具备创建动态、交互式的Web应用程序的能力,这不仅可以丰富你的编程技能,也为你在IT领域的发展打开新的可能性,即便你是一名Java开发者,了解不同的Web开发技术也...

    java从入门到精通PPT

    总的来说,“java从入门到精通PPT”提供了一个全面的学习路线,从基础到进阶,覆盖了Java编程的各个方面。通过这个压缩包,你可以按照章节逐步学习,每个PPT都是一个知识点的总结,方便查询和复习。不论你是初学者...

    java学习从入门到精通教程(pdf)

    这个“Java学习从入门到精通”教程覆盖了Java编程的各个方面,无论是初学者还是有一定经验的开发者,都能从中受益。通过深入学习和实践,你将能够熟练掌握Java编程,为未来的开发工作打下坚实的基础。

    C#编程从入门到精通

    C#编程从入门到精通 本书既为入门者提供了简单教程,同时也为高级编程人员提供了大量的例程。由3部分组成:第一部分是C#入门教程,用12章阐述了C#语言的最基本特征和主要功能,包括:C#介绍;一个简单的欢迎程序;...

    jsp网络编程从入门到精通 附带光盘

    《jsp网络编程从入门到精通》是一本专为初学者和有一定基础的开发者设计的教程,旨在帮助读者全面掌握JSP(JavaServer Pages)技术,从而实现高效、动态的Web应用开发。这本书由邹竹彪主编,其配套光盘包含了丰富的...

    JAVA网络编程从入门到精通

    ### JAVA网络编程从入门到精通知识点详解 #### 一、Internet地址概述 互联网中的每一台设备都需要有一个唯一的标识符——IP地址。当前广泛使用的IPv4地址由四个字节组成,而未来的趋势是采用16个字节的IPv6地址。 ...

    《Java从入门到精通(第4版)》随书PPT

    《Java从入门到精通(第4版)》随书PPT是针对初学者和进阶者设计的一套全面的学习资源,旨在帮助读者深入理解和掌握Java编程语言。这套PPT涵盖了从基础语法到高级特性的各个层面,以下是其中可能包含的一些核心知识...

    从入门到精通java部全代码

    总之,《从入门到精通Java全代码》是一份全面的学习资源,通过理论与实践相结合的方式,帮助初学者掌握Java编程,并逐步成长为熟练的Java开发者。通过解压缩包中的"sl"文件夹,读者可以跟随书中的实例,一步步实践所...

    JSP网络编程从入门到精通

    【JSP网络编程从入门到精通】 在互联网应用开发领域,Java Server Pages(JSP)是一种广泛使用的技术,尤其适用于创建动态网页。JSP是由Sun Microsystems引领开发的,旨在为Web请求处理提供便利。它是建立在Java ...

    java 从入门到精通 源代码

    本资源“java 从入门到精通 源代码”是针对初学者设计的一套完整的学习资料,旨在帮助读者从零基础逐步掌握Java编程的核心概念和技术。 在Java入门阶段,首先会接触到的是Java的基础语法。这包括数据类型(如整型、...

Global site tag (gtag.js) - Google Analytics