HTTP请求和响应

  

         HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文和响应报文。

  1HTTP请求格式:

 一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。


HTTP请求头

<request line>

<headers>

<blank line>

[<request-body>]

在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的 资源 以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)]。


(1)请求行

请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET  /index.html  HTTP/1.1。

HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。这里介绍最常用的GET方法和POST方法。

GET:使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制。如,/index.jsp?id=100&op=bind。

POST:POST方法将请求参数封装在HTTP请求数据中(具体位置看上图),以名称/值的形式出现,可以传输大量数据。

(2)请求头部

请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:

User-Agent:产生请求的浏览器类型。

Accept:客户端可识别的内容类型列表。

Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。

(3)空行

最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。

对于一个完整的http请求来说空行是必须的,否则服务器会认为本次请求的数据尚未完全发送到服务器,处于等待状态。

(4)请求数据

请求数据不在GET方法中使用,而是在POST方法中使用。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。


    get方式请求实例:

  

GET /books/?name=Professional%20Ajax HTTP/1.1  //请求行

Host: www.wrox.com                             //请求头

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)

Gecko/20050225 Firefox/1.0.1

Connection: Keep-Alive



   post方式请求实例:

POST / HTTP/1.1             //请求行

Host: www.wrox.com          //请求头

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)

Gecko/20050225 Firefox/1.0.1

Content-Type: application/x-www-form-urlencoded  //指定POST数据的编码类型
 
Content-Length: 40

Connection: Keep-Alive

     (此处空一行)

name=Professional%20Ajax&publisher=Wiley  //请求数据,POST形式参数保存在这里,与请求数据相关的请求头是Content-Type和Content-Length。


HTTP响应格式:

<status line>

<headers>

<blank line>

[<response-body>]

  在响应中唯一真正的区别在于第一行中用状态 信息 代替了请求信息。状态行status line)通过提供一个状态码来说明所请求的资源情况。


HTTP响应实例

HTTP/1.1 200 OK

Date: Sat, 31 Dec 2005 23:59:59 GMT

Content-Type: text/html;charset=ISO-8859-1

Content-Length: 122

<html>

<head>

<title>Wrox Homepage</title>

</head>

<body>

<!-- body goes here -->

</body>

</html>

        

  常用的状态值:

        2xx  成功

        200  正常;请求已完成。

        201  正常;紧接 POST 命令。

        202  正常;已接受用于处理,但处理尚未完成。

        203  正常;部分信息—返回的信息只是一部分。

         204  正常;无响应—已接收请求,但不存在要回送的信息。

         3xx  重定向

         301  已移动—请求的数据具有新的位置且更改是永久的。

         302  已找到—请求的数据临时具有不同 URI

         303  请参阅其它—可在另一 URI 下找到对请求的响应,且应使用 GET 方法检索此响应。

         304  未修改—未按预期修改文档。

        305  使用代理—必须通过位置字段中提供的代理来访问请求的资源。

        306  未使用—不再使用;保留此代码以便将来使用。

        307  暂时重定向

         4xx  客户机中出现的错误

       400  错误请求—请求中有语法问题,或不能满足请求。

         401  未授权—未授权客户机访问数据。

       402  需要付款—表示计费系统已有效。

         403  禁止—即使有授权也不需要访问。

       404  找不到—服务器找不到给定的资源;文档不存在。

         405  错误的方法

          406  没有可接受的

       407  代理认证请求—客户机首先必须使用代理认证自身。

       408  请求超时

      409  冲突

        410  已离开

       411  需要长度

       412  前提条件失败

      413  请求实体太大

       414  请求的 URI 太长

        415  介质类型不受支持—服务器拒绝服务请求,因为不支持请求实体的格式。

        416  请求的范围不满足要求

        417  期望失败

       5xx  服务器中出现的错误

    500  内部错误—因为意外情况,服务器不能完成请求。

      501  未执行—服务器不支持请求的工具。

        502  错误网关—服务器接收到来自上游服务器的无效响应。

       503  无法获得服务—由于临时过载或维护,服务器无法处理请求。

        504  网关超时

         505  HTTP 版本不受支持



        以下是一个简单的完整过程:

       首先,我们想访问本页面。在浏览器上敲入“http://www.maketop.net/resource/rs_041112_02.php”.浏览器将连接www.maketop.net然后发送:

>> GET /resource/rs_041112_02.php Http1.1
>> Host: www.maketop.net
>> Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
>> Accept-Language: en
>> Accept-Encoding: gzip, deflate
>> User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox/0.10
>> Connection: Keep-Alive
>>

解释:浏览器请求页面“/resource/rs_041112_02.php”。并使用HTTP1.1协议。并告诉服务器你的浏览器是Firefox0.10。操作系统是Windows XP。 浏览器希望保持与www.maketop.net之间的连接,并请求获得多的文件,包括网页中的图片。翻译成语言上面是:

>> 用HTTP1.1协议获得 /resource/rs_041112_02.php
>> 访问的主机是: www.maketop.net
>> 接收的文件包括了: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
>> 使用的语言是: en
>> 接收的编码方式(浏览器能够解释的)是: gzip, deflate
>> 用户的浏览器信息:Windows XP的操作系统 Firefox/0.10的浏览器
>> 保持连接: 还要去图片
>>



www.maketop.net的服务器发出响应:

<< HTTP/1.1 200 OK
<< Date: Mon, 12 Mar 2004 19:12:16 GMT
<< Server: Apache/1.3.31 (Unix) mod_throttle/3.1.2
<< Last-Modified: Fri, 22 Sep 2004 14:16:18
<< ETag: "dd7b6e-d29-39cb69b2"
<< Accept-Ranges: bytes
<< Content-Length: 3369
<< Connection: close
<< Content-Type: text/html
<<
<< File content goes here

浏览器并从服务器的响应中获得服务器的信息:比如运行在Apache。
上面翻译成翻译成语言上面就是RFC 2616



 参考:

http://blog.csdn.net/microtong/article/details/4155706

http://www.blogjava.net/honeybee/articles/164008.html

http://www.cnblogs.com/happyhotty/articles/2067673.html



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值