HTTP报文格式(我们研究的是HTTP/1.1版本的)

文章目录

  • HTTP报文格式(我们研究的是HTTP/1.1版本的)
    • HTTP请求报文
      • POST
      • HEAD
      • PUT
      • DELETE
    • HTTP响应报文
      • 状态行
      • 头行
        • 状态码
    • 用户-服务器交互:Cookies
      • 实体主体

首先有两种类型的HTTP报文

  • 请求报文
  • 响应报文

不一样,我们分别来介绍哦

HTTP请求报文

下面看一个typical的HTTP请求报文的例子

GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr

1.HTTP请求报文是ASCII text
2.每一行都有一个carriage return and a line feed,最后一行再附加一个carriage return and line feed
3.第一行叫请求行,请求行有3个字段:方法字段, URL字段, HTTP版本字段
方法字段可以有很多值:GET, POST, HEAD, PUT, and DELETE
URL字段是请求对象在服务器上的路径
HTTP版本字段:是自我解释的,解释我这个浏览器实现的是HTTP的哪个版本。
4.紧接着请求行的叫做头行(header lines)
Host: www.someschool.edu证明了请求对象所在的主机,Web代理缓冲需要Host头
Connection: close, 这个浏览器高速服务器它不屑于使用持久性连接,它希望服务器在发送这个对象之后就关闭掉TCP连接
User-agent: 指明了浏览器的类型,这个头很有用,因为服务器可以将相同对象的不同版本发送给不同类型的浏览器。每个版本都是由相同的URL寻址。
Accept-language: fr, 如果在服务器上有这个对象的法语版本的话,这个头表明了用户偏好这个对象的法语版本。如果服务器上没有这个对象的法语版本,服务器将发送这个对象的默认版本。

下面是HTTP报文的通用格式,一定要记住了!

对,跟我们上面讲解的例子相比,多了个entity body(实体主体)。
因为对GET方法来讲,实体主体为空。但是实体主体在POST方法中要用到。

POST

什么时候使用POST方法呢?
通常是用户在HTTP客户单填写表单的时候,例如当一个用户给一个搜索引擎提供搜索关键字的时候。用户提供的关键字就被包含在实体主体中。

但是并不是表单一定要用POST方法,HTML表单也经常使用GET方法,并将表单中输入的数据包含在URL中。
例如这种:
www.somesite.com/animalsearch?monkeys&bananas.

下面参考了wiki post
通过设计,POST请求方法要求web服务器能够接受封装在请求报文entitybody中的数据。该方法经常用于上传文件和提交一个表单时。

相比之下,HTTP GET方法是从服务器中获取信息。作为GET请求的一部分,某些数据可以通过URL的query string来传递,指定某些搜索项,数据的范围或者是其他可以定义query的信息。

作为POST请求的一部分,任意类型,任意大小的数据都可以在请求报文的entitybody中被发送到服务器。POST请求中的某个头行经常表明了报文题中的网络媒体类型
例如,当POST方法用于提交Web表单时,当一个Web浏览器向Web表单发送一个POST请求之后,默认的网络媒体类型是"application/x-www-form-urlencoded". 这是一种专门用于编码key-value pairs的格式(key可以重复)。每一个key-value pair是由&分开的。And each key is separated from its value by an “=” character. Keys and values are both escaped by replacing with the ‘+’ character and then using percent-encoding on all other non-alphanumeric characters.
例如,下面这个key-value pairs

Name: Gareth Wylie
Age: 24
Formula: a + b == 13%!

就会编码成下面这个样子

Name=Gareth+Wylie&Age=24&Formula=a+%2B+b+%3D%3D+13%25%21

HEAD

HEAD方法和GET方法有点类似。当一个服务器收到一个带有HEAD方法的请求时,服务器会用一个HTTP报文响应,但是并不返回请求的对象。应用开发者经常使用HEAD方法来debug,好吧,我服了

PUT

PUT方法经常与Web发行工具联合使用,它允许用户上传对象到指定的Web服务器上指定的路径。PUT方法也被那些需要向Web服务器上传对象的应用程序使用。

DELETE

DELETE方法允许用户或者应用程序删除Web服务器上的对象

HTTP响应报文

下面我们提供一条typical的HTTP响应报文,该响应报文可以是对刚刚讨论的例子中的请求报文的回应。

HTTP/1.1 200 OK
Connection: close
Date: Tue, 09 Aug 2011 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 09 Aug 2011 15:11:03 GMT
Content-Length: 6821
Content-Type: text/html(data data data data ...)

响应报文包含3个区域

状态行

状态行包含3个字段

  • 协议版本字段
  • 状态码
  • 对应的状态报文

头行

Connection: close, 服务器告诉客户端服务器在发送完这个报文之后就要关闭TCP连接了。
Date: 表明了HTTP响应创建和发送的时间,注意!这不是对象创建的时间,而是服务器从服务器的文件系统中获取对象,将对象插入到相应报文的,发送相应报文的时间。
Server: Apache/2.2.3 (CentOS)表明了这条报文是由Apache Web Server产生的。它有点儿类似于HTTP请求报文中的User-agent.
Last-Modified: 表明的是对象创建或者上次修改的时间和日期,这个头对对象缓存来说很关键。
Content-Type: text/html 表明在实体主题中的对象是HTML text。这个对象的类型通常是由Content-Type头表明,而不是由文件的后缀名决定。

下面是通用的HTTP响应报文的格式:

基本和我们上面的例子是一致的,我们就状态码多说两句。

状态码

  • 200 OK
  • 301 Moved Permanently: 请求的对象已经被永久移除,这个对象的新的URL在响应消息的Location字段中指定。这个客户端软件会自动获取新的URL.
  • 400 Bad Request 这个一个通常的错误,表明请求无法被服务器所理解。
  • 505 HTTP版本不支持

用户-服务器交互:Cookies

HTTP使用了cookies,允许网站keep track of users. 许多重大的商业Web站点今天都使用了cookies.
cookie技术有4个部分:
(1)在HTTP响应报文中的cookie头行
(2)在HTTP请求报文中的cookie头行
(3)一个cookie文件,保存在用户的端系统中,由用户的浏览器管理
(4)Web站点的一个后端数据库
我们看下这个图就明白了。

实体主体

报文的核心部分,它包含了请求的对象本身, represented by (data data data …)

HTTP协议之——HTTP报文格式相关推荐

  1. 网络协议分层及报文格式大全

    推荐一个查看网络协议分层及报文格式的网站,非常清晰! http://www.023wg.com/message/message/cd_feature_cover.html

  2. 网络七层协议地图,报文格式一览无遗。绝对是干货,值得收藏

    从事网络工作的小伙伴们,在排查网络故障时,往往需要抓包,分析问题.所以,要对每一层的报文格式有一定的了解才行.但是,每一层报文协议众多,全部背下来是不可能的.只需要用到的再去查. 今天给大家分享一个网 ...

  3. UDP协议相关及报文格式

    转载于:https://blog.51cto.com/itcnjd/37417

  4. tcp报文格式_面试必备TCP(一):三次握手

    TCP大家都知道是什么东西,这个协议的具体报文格式如下: 标志位 URG:指示报文中有紧急数据,应尽快传送(相当于高优先级的数据). PSH:为1表示是带有push标志的数据,指示接收方在接收到该报文 ...

  5. http报文格式简介

    前端和后端的沟通其实和我们生活中人与人之间的沟通是一样的,也是一种通信,只不过是计算机之间的通信.人与人之间之所以能沟通是因为我们遵循了同一种规则(协议)--语言.通信的双方只有遵循一种共同的通信协议 ...

  6. 解析HTTP报文格式

    一.浏览器端(客户端)向WEB服务器端访问页面的过程和HTTP协议报文的格式. 基于HTTP协议的客户机访问包括4个过程,分别是建立TCP套接字连接.发送HTTP请求报文.接收HTTP应答报文和关闭T ...

  7. ARP协议的报文格式

    结构ether_header定义了以太网帧首部:结构arphdr定义了其后的5个字段,其信息 用于在任何类型的介质上传送ARP请求和回答:ether_arp结构除了包含arphdr结构外, 还包含源主 ...

  8. RLC协议简单理解1-RLC报文格式

    RLC协议简介 RLC(Radio Link Control)在无线协议架构中属于数据面协议中的一部分,数据传输从基站到终端的过程中,一共要经历UDP/SCTP-->SDAP/RRC--> ...

  9. 【计算机网络】网络层 : BGP 协议 ( BGP 协议简介 | BGP 协议信息交换 | BGP 协议报文格式 | BGP-4 常用报文 | RIP 、OSPF、BGP 协议对比 )

    文章目录 一.路由选择协议分类 二.BGP 协议 简介 三.BGP 协议 信息交换过程 三.BGP 协议 报文格式 四.BGP 协议 特点 五.BGP-4 协议的 四种报文 六.RIP .OSPF.B ...

最新文章

  1. *【CodeForces - 280C】Game on Tree(期望模型,期望的线性性)
  2. Android性能优化之内存篇
  3. 华谊兄弟:拟向阿里影业、腾讯等发行不超8.2亿股股票
  4. 如何简单快速的修改Bootstrap
  5. CentOS6.4 xen4.2 虚拟机 桥接网络设置
  6. 郭宏志的android无线点餐系统,Android无线点餐系统--含代码.doc
  7. 2019年全国大学生电子设计竞赛试题 简易电路特性测试仪(D) 题 设计报告
  8. 《算法第四版》学习心得一——怎么学算法
  9. jsp内置对象request
  10. 扫描到计算机怎么转换为文字,扫描仪扫描出来的图片怎么转换成文字
  11. 不属于计算机系统的输出设备,不是电脑的输出设备的是什么
  12. MATLAB论文绘图模板与尺寸设置
  13. 基于Hexo搭建Next主题博客
  14. redis 键值占用内存分析 RDR(Redis Data Reveal)
  15. 关于STM32中SPI硬件的NSS配置
  16. win7无线网突然上不了网桌面有个黄色三角叹号dns服务器未响应,Win7系统DNS服务器未响应的解决方法...
  17. Ext2.02事件机制缺陷分析,以及解决方案 (fins)
  18. 企业知识管理怎样做?一些解决方案分享!
  19. 实用 ps -ef | grep php-fpm | grep -v grep | cut -c 9-15 | xargs kill -s 9
  20. 如何设置office2003为默认打开方式

热门文章

  1. 根据基因名称查看基因详细信息的网址
  2. 本周游戏体验:卧虎藏龙
  3. Security——Spring LDAP
  4. Camera对焦模式
  5. 超详图解DNS域名解析全过程
  6. Python 处理 PDF —— PyMuPDF 的安装与使用
  7. 【推荐系统】DSSM双塔召回2
  8. redis对象保存方式?
  9. .NetCore 打包发布及引用
  10. MSP430F5529学习笔记(一)——点灯|IO输出