• Http报文格式学习及Get和Post主要区别总结


    HTTP(HyperText Transport Protocol,超文本传送协议)

    http请求数据包的格式:头部(request line + header)+  数据(data)

    头部和数据包体通过一个空行来隔开,头部的格式主要包括请求行+请求头部。如下图

    HTTP请求头

    请求行

    请求行由请求方法字段URL字段HTTP协议版本字段3个字段组成,它们用空格分隔如:

    GET /index.html HTTP/1.1。

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

    GET方式:在URL里面就说明要请求的资源,URL里面包含参数,“?”后面就是参数,而“?”前面就是URL的结束。“?ip=192.168.156.11&active=on”这种就是GET方式的包,而服务器把客户端请求的内容在数据段里面发回给客户端。

    POST方式:传输的数据不在URL里面出现,而是在数据段里面出现。但是请求头部多了Content-Type和Content-Length两个字段。

    请求头部

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

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

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

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

    下面是GET包的一个例子:传输的数据在URL里

    再看看POST包的例子:传输的数据在数据段里面

    HTTP响应报文

    HTTP响应也由两个个部分组成,分别是:响应头(状态行+消息报头)+响应正文

    状态行格式如下:

    HTTP-Version Status-Code Reason-Phrase CRLF

    HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。

    1xx:指示信息–表示请求已接收,继续处理。

    2xx:成功–表示请求已被成功接收、理解、接受。

    3xx:重定向–要完成请求必须进行更进一步的操作。

    4xx:客户端错误–请求有语法错误或请求无法实现。

    5xx:服务器端错误–服务器未能实现合法的请求。

    下面是http响应包的例子

     
    Get和Post主要区别如下:

    1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。
    2、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。
    3、Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说都是不可见的。
    4、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post。
    5、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
    6、Get是Form的默认方法。
     
     

          常见错误认识:

          "GET方式提交的数据最多只能是1024字节",因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了。而实际上,URL不存在参数上限的问题HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。

      注意这是限制是整个URL长度,而不仅仅是你的参数值数据长度。

          理论上讲,POST是没有大小限制的HTTP协议规范也没有进行大小限制,说“POST数据量存在80K/100K的大小限制”是不准确的,POST数据是没有限制的,起限制作用的是服务器的处理程序的处理能力。

     

          post请求只能适合于页面到页面之间的转移请求,从地址栏中直接输入地址,发出的请求是无法形成post请求的,post情况下,前一个页面的<input>域被作为参数传递到服务器,get情况下,参数依靠地址中“?”后面的字符串构成参数。而frame中src属性指定的地址,恰恰如同从地址栏中输入的地址一样,发出的请求是get请求。

    GET和POST两种方法都是将数据送到服务器,但你该用哪一种呢?
          HTTP标准包含这两种方法是为了达到不同的目的。POST用于创建资源,资源的内容会被编入HTTP请示的内容中。例如,处理订货表单、在数据库中加入新数据行等。
    当请求无副作用时(如进行搜索),便可使用GET方法;当请求有副作用时(如在数据库添加数据行),则用POST方法。一个比较实际的问题是:GET方法可能会产生很长的URL,或许会超过某些浏览器与服务器对URL长度的限制。


    若符合下列任一情况,则用POST方法:

    • 请求的结果有持续性的副作用,例如,数据库内添加新的数据行。
    • 若使用GET方法,则表单上收集的数据可能让URL过长。
    • 要传送的数据不是采用7位的ASCII编码。

    若符合下列任一情况,则用GET方法:   

    • 请求是为了查找资源,HTML表单数据仅用来帮助搜索。
    • 请求结果无持续性的副作用。
    • 收集的数据及HTML表单内的输入字段名称的总长不超过1024个字符。

    参考:http://blog.csdn.net/firefoxbug/article/details/7677240

             http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html

  • 相关阅读:
    labVIEW学习——属性节点
    MATLAB学习
    WinForm中键盘按键问题
    TextBox的智能感知
    使用脚本操作UpdatePanel中控件的问题
    DBNull.Value,null,String.Empty之间的区别和联系
    Hotmail如何对已经存在的邮件地址进行更改?
    第一个hibernate项目
    html静态实现左边导航右边显示链接页面
    Struts2学习
  • 原文地址:https://www.cnblogs.com/zhaoshuai1215/p/3656157.html
Copyright © 2020-2023  润新知