http请求/响应包格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了http请求/响应包格式相关的知识,希望对你有一定的参考价值。

一、什么是http协议?

转载:http://blog.csdn.net/daijin888888/article/details/51025634

        由w3c制订的一种网络应用层协议,定义了浏览器与web服务器之间通信的过程以及通信时所使用的数据格式。
        1)通信的过程
            step1,浏览器建立与web服务器之间的连接
            step2,浏览器将请求数据打包(生成请求数据包)并发送给web服务器。
            step3,web服务器将处理结果打包(生成响应数据包)并发送给浏览器。
            step4,web服务器关闭连接。
        如果浏览器要再发请求,需要重新建立新的连接。
        特点: 一次请求,一次连接
        优点:    web服务器可以利用有限的连接为尽可能多的客户端(浏览器)服务。
        2)数据格式

            a,请求数据包

                如:

[plain] view plain copy
 
  1. POST /web02/hello HTTP/1.1  
  2.   
  3. Host: localhost:8080  
  4. User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0.1  
  5. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8  
  6. Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3  
  7. Accept-Encoding: gzip, deflate  
  8. Connection: keep-alive  
  9. Referer: http://localhost:8888/web02/hello_form.html  
  10. Content-Type: application/x-www-form-urlencoded  
  11. Content-Length: 16  

 

                请求行: 请求方式 请求资源路径 协议类型和版本
                消息头:
                    消息头是一些键值对,一般由w3c定义,浏览器与web服务器之间都可以发送,表示特定的某种含义,比如,浏览器可以发送"user-agent"消息头,告诉web服务器浏览器的类型和版本。
                实体内容:
                    只有当请求方式为post时才有值(请求参数),如果请求方式为get,请求参数会添加到请求资源路径的后面。

            b,响应数据包

                如:

 

[plain] view plain copy
 
  1. HTTP/1.1 200 OK  
  2. Server: Apache-Coyote/1.1  
  3. Content-Type: text/html;charset=utf-8  
  4. Content-Length: 30  
  5. Date: Thu, 05 Dec 2013 07:16:28 GMT  

 

                状态行: 协议类型和版本 状态码 状态描述
                    b1,什么是状态码
                        是一个三位数字,由w3c定义,表示服务器处理请求的状态。
                    b2,常见的状态码
                        200:  服务器处理请求正常。
                        404:  服务器依据请求路径找不到对应的资源。
                        500:  系统错误,服务器端的程序在运行过程当中出错了。
                        405: 服务器找不到可执行的方法来处理请求。        
                消息头:
                     服务器也可以发送一些消息头给浏览器,比如"content-type",告诉浏览器,服务器返回的数据类型和编码格式(字符集)。
                实体内容:
                    程序处理的结果,浏览器会将实体内容中的数据取出来,生成相应的页面。

二、请求方式

        1)哪一些情况下,浏览器会发送get请求
            a,直接在浏览器地址栏输入某个地址
            b,点击链接
            c,表单使用默认的提交方式
        2)get请求的特点
            a,会将请求参数放到请求资源路径的后面,只能提交少量的数据(因为请求行最多只能存放2k左右的数据)。
            b,会将请求参数显示在浏览器地址栏,不安全(路由器会记录请求地址)。
        3)哪一些情况下,浏览器会发送post请求
            设置了表单的method属性值为post
        4)post请求的特点
            a,会将请求参数放到实体内容里面,能提交大量的数据。
            b,不会将请求参数显示在浏览器地址栏,相对安全(浏览器没有加密)。
        不管是get还是post,都不会对请求参数加密,所以如果是敏感数据,一般都需要加密处理(https)。

Http协议支持六种请求方法,即:
  0,GET
  1,HEAD
  2,PUT
  3,DELETE
  4,POST
  5,OPTIONS

  6.trace

但其实我们大部分情况下只用到了GET和POST。如果想设计一个符合RESTful规范的web应用程序,则这六种方法都会用到。不过即使暂时不想涉及REST,了解这六种方法的本质仍然是很有作用的。大家将会发现,原来web也是很简洁明了的。下面依次说明这六种方法。
  0,GET:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
  1,HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。
  2,PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。
  3,DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。
  4,POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。
  5,OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。
  其实还有一个TRACE方法,不过这个基本上不会用到,这里就不介绍了。

 

以上是关于http请求/响应包格式的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 请求报文和响应报文的格式

计算机网络HTTP协议(格式报头请求响应)

网络编程 应用层协议 -HTTP

网络编程 应用层协议 -HTTP

HTTP协议详解

前端必备HTTP技能之请求头响应头格式以及请求方法简述