HTTP有两类报文:请求报文和响应报文。 

一、请求报文

http请求数据包的格式:请求头(请求行+请求头部+空行)+请求数据

(1)请求行
请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。
HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。

这里介绍最常用的GET方法和POST方法。
GET:当客户端要从服务器中读取文档时,使用GET方法。GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind。
POST:当客户端给服务器提供信息较多时可以使用POST方法。POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,可用来传送文件。

(2)请求头部

请求头部通知服务器有关于客户端请求的信息。
请求头部由(关键字:<空格>值)对组成,每行一对,关键字和值用英文冒号“:<空格>”分隔。,典型的请求头有:
User-Agent:产生请求的浏览器类型。
Accept:客户端可识别的内容类型列表。
Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。
(3)空行
最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。
对于一个完整的http请求来说空行是必须的,否则服务器会认为本次请求的数据尚未完全发送到服务器,处于等待状态。
(4)请求数据
请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。

POST报文头如下:                                     GET报文头如下:

               

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响应报文
HTTP响应也由两个个部分组成,分别是:响应头(状态行+消息报头)+响应正文。

状态行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
1xx:指示信息--表示请求已接收,继续处理。
2xx:成功--表示请求已被成功接收、理解、接受。
3xx:重定向--要完成请求必须进行更进一步的操作。
4xx:客户端错误--请求有语法错误或请求无法实现。
5xx:服务器端错误--服务器未能实现合法的请求。

常见状态代码、状态描述的说明如下。
200 OK:客户端请求成功。
400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
403 Forbidden:服务器收到请求,但是拒绝提供服务。
404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
500 Internal Server Error:服务器发生不可预期的错误。
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。

例子如下:

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>

http报文格式、GET与POST的区别相关推荐

  1. icmp报文格式_IPV6报文格式和IPV4有什么区别?

    前言 RFC2460定义了IPv6数据报格式. 总体结构上,IPv6数据报格式与IPv4数据报格式是一样的,也是由IP报头和数据(在IPv6中称为有效载荷)这两个部分组成的. 但在IPv6数据报数据部 ...

  2. ++实现 ipv6数据报_IPV6报文格式和IPV4有什么区别?

    前言 RFC2460定义了IPv6数据报格式. 总体结构上,IPv6数据报格式与IPv4数据报格式是一样的,也是由IP报头和数据(在IPv6中称为有效载荷)这两个部分组成的. 但在IPv6数据报数据部 ...

  3. 4G、5G RLC AM模式数据和控制报文格式的区别

    如下分别为LTE的初传.重传报文和NR的AMD报文格式 LTE/NR报文格式: SN号, RLC PDU的编号. RF是重分段标识.通过RF标志来判断是否存在LSF/SO域.LTE独有字段. P用于重 ...

  4. 带你一文看懂--应用层、传输层的协议,HTTP协议及实现,UDP和TCP的报文格式以及为什么3次握手和4次挥手

    网络基础:TCP/IP四层模型中的典型协议--理解网络通信的流程原理 应用层协议:负责应用程序之间的数据沟通 网络版计算器:客户端向服务端传递两个数字以及一个运算符,服务端收到数据进行解析得到数字与运 ...

  5. 接收不到其他机器发来的报文_TCP/IP报文格式,康康就知道了

    一.传输层协议 TCP特点: 面向连接 可靠 适用于可靠性要求高的应用 开销大 UDP特点: 无连接 不可靠 适用于更关注传输效率的应用 可靠性由应用层负责 TCP主要功能:可靠.准确的传输并控制源主 ...

  6. tcp报文格式_腾讯面试中的TCP/IP协议简述+经典面试题

    面试题有福利 TCP/IP协议简述+ TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器, ...

  7. 序列化解决方案,就是采用二进制通信协议(数据报文格式)

    前言 所谓的序列化解决方案,就是对象和二进制互相转换的解决方案. 为什么要采用二进制呢?这里有几个点要理解清楚. 1.应用程序里的数据是对象 2.网络传输的过程中一直是二进制 不管有没有进行对象和二进 ...

  8. CAN 与 CANFD数据报文格式解读

    ISO 11898-1:2015 协议详细定义了CAN网络报文的格式,包含了传统CAN与CANFD帧格式.CAN网络的帧类型共有4种,分别为数据帧.远程帧.错误帧.过载帧.本章将主要介绍CAN网络数据 ...

  9. IPv4 和 IPv6 报文格式详解

    文章目录 1 概述 2 报文格式 2.1 IPv4 2.2 IPv6 2.3 两者区别 3 网工软考真题 1 概述 2 报文格式 2.1 IPv4 中文名 英文名 长度 bit(位) 解释 版本 Ve ...

  10. 详解CAN总线:CAN总线报文格式—遥控帧

    目录 1.遥控帧格式 2.数据帧和遥控帧的区别 CAN总线上传输的信息称为报文,当总线空闲时任何连接的单元都可以开始发送新的报文. CAN通信是通过以下5种类型的帧进行的: 数据帧 遥控帧 错误帧 过 ...

最新文章

  1. 【运营】各大电商七夕活动对比
  2. Caffe —— Deep learning in Practice 深度学习实践
  3. matlab四维图程序,Matlab 四维图形绘制
  4. vue删除数组中的一条数据_删除排序数组中的重复项 II
  5. php 文件类型 html,HTML的文档类型怎么选择
  6. 证监会依法对4宗案件作出行政处罚
  7. 服务超时时间如何设置、如何对超时时间治理、超时设计原则一文揭秘!
  8. 移动端报表JS开发演示样例
  9. Eclipse配置Tomcat详细教学|Eclipse和Tomcat的下载安装
  10. 六个主要的社会网络分析软件的比较
  11. 计算机二级vb上机操作题库,2017年3月计算机二级VB上机操作题库及答案
  12. matlab机器学习预测股价+python爬虫
  13. oracle asm omf,Oracle Managed Files,OMF
  14. Distiller tutorial: Pruning Filters Channels
  15. 【巴什博弈】HDOJ2188悼念512汶川大地震遇难同胞——选拔志愿者
  16. 我的世界古代战争模组介绍java版_我的世界古代战争2mod教程零基础到专属军队...
  17. 滴水逆向三期 win10 ASLR UnmapViewOfSection傀儡进程 加密壳项目
  18. 字符与Unicode码相互转换器【Java】
  19. android 忽略wifi密码,android 连接指定SSID 的无密码Wifi ,连接不上
  20. php 日期转换为字符串,php如何日期转字符串?

热门文章

  1. 基础实验——ADC(模数转换)
  2. IO之 java中BIO NIO AIO原理、区别以及应用
  3. 组播地址MAC的计算
  4. 测试转开发,真有那么好?
  5. 手动设置网页cookie的值
  6. $.ajax跨域请求数据的解决方案
  7. VBA Rnd()函数不正确,应使用什么代替
  8. python正则表达式入门
  9. SQL数据库常用约束及建表、插入数据时注意事项
  10. 微信发展简史:微信成功的必然和偶然