博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP报文
阅读量:6431 次
发布时间:2019-06-23

本文共 1809 字,大约阅读时间需要 6 分钟。

  hot3.png

HTTP报文是在HTTP应用程序之间发送的数据块,这些数据块以一些文本形式的元信息开头,这些元信息描述了报文的内容,后面跟着可选的数据部分。

 

不管是请求报文还是响应报文,所有的报文都会向下游游动,所有的报文发送者都在接受者的上游。报文是简单的格式化数据块,它们由三部分构成:描述报文的起始行、包含属性的首部、可选的数据主体。起始行和首部都是由行分隔的ASCII文本,每一行都以回车换行结束。报文的数据主体是可选的,主体中可以包含文本数据或者二进制数据,也可以是空。

 

所有的报文可以归纳为两类:请求报文、相应报文。请求报文向web服务器请求一个动作,相应报文会将请求报文的结果返回给客户端。

请求报文格式如下:

   <method> <url> <version>

   <headers>

 

   <body>

响应报文格式如下:

    <version> <status> <phrase>

    <headers>

 

    <entity-body>

 

method是客户端希望对web服务器执行的动作,比如POST/GRT等,url是客户端请求的资源,version是报文所使用的http版本,类似http/<major>.<minor> 期中major是主版本号,minor是次版本号。status是状态码,反应了请求过程所发生的状况,用三位数字表示,phrase是数字状态码的可读版本,人们看起来更直观一些。headers可以有零个或者多个,每个首部包含一个名字,然后是一个冒号,接着是可选的空格,接着是值,最后以回车换行结尾。headers以空行表示结束。表示首部的结束和实体主体的开始。entity-body是实体的主体部分,主体可以由任何数据组成。

 

所有的http报文都是以一个起始行开始。请求报文的起始行包含一个方法和一个url,方法描述了web服务器应该执行的动作,url表示要对那个资源执行该方法,期中还包含http的版本。而响应报文的起始行则包含了相应报文的http版本,状态码,以及描述操作状态的可读短语。

 

HTTP规定了一组常用的请求方法,如下:

GET         获取web服务器资源

HEAD        从web服务器获取文档的首部

POST        给web服务器发送要处理的数据

PUT         将请求的主体部位分存储在服务器上

TRACE       对可能经过的代理进行跟踪

OPTIONS     决定在服务器上可以执行哪些方法

DELETE      删除服务器上的文档

 

并不是所有的服务器都支持这7种方法。GET和HEAD被认为是安全方法,因为它们执行多次,而结果都一样,GET通常用于请求服务器发送某个资源,HEAD与GET类似,但服务器只返回首部,而不返回实体的主体部分,这样就允许客户端在未实际获取资源的情况下,可以对首部进行检查。PUT方法会向服务器写入文档,PUT方法的语义就是让服务器用请求主体部分来创建一个由所请求的URL命名的文档。POST方法是用来向服务器输入数据的,通常用来支持HTML的表单。OPTIONS方法请求web服务器告知其支持的各种功能,这样客户端不用实际访问那些资源就能判定访问各个资源的最优方式。DELETE方法是请求服务器删除url所指定的文档,但是不一定保证成功,因为HTTP规范允许服务器在不通知客户端的情况下撤销请求。

 

状态码告诉客户端发生了什么事,位于响应报文的起始行中,状态码分类如下:

100~199  提示信息

200~299  成功

300~399  重定向

400~499  客户端错误

500~599  服务器错误

301在请求的url已经被移除时,响应的location首部中应该包含该资源现在所处的url。302与301类似,但是客户端应该使用location首部给出的url来临时定位资源。

 

 

HTTP首部向请求和响应报文中添加了一些附加信息,本质来说他们只是一些kry/value对,首部分为通用首部、请求首部、响应首部、实体首部、扩展首部。每个HTTP首部都是一个名字后面跟着冒号,然后是可选的空着,最后是字段值。有时候一个首部的信息过多,一行无法显示,则可以用多行表示,不过多出来的每一行前面至少要有一个空格。

 

HTTP实体的主体是HTTP报文的负载,就是HTTP要传输的内容,可以承载很多类型的数据,文本、二进制、图片、视频等等。

转载于:https://my.oschina.net/guol/blog/121868

你可能感兴趣的文章
matlab画直线,指定斜率与x坐标范围
查看>>
介词表示时间
查看>>
makefile知识点归纳的
查看>>
GOF提出的23种设计模式是哪些 设计模式有创建形、行为形、结构形三种类别 常用的Javascript中常用设计模式的其中17种 详解设计模式六大原则...
查看>>
[Redux] Reducer Composition with combineReducers()
查看>>
Spring-IOC
查看>>
Python学习笔记6-异常捕获取
查看>>
设置Sql Agent运行Job时的执行账户
查看>>
Unity3D - 详解Quaternion类(一)
查看>>
lintcode :搜索旋转排序数组
查看>>
InnoDB Record, Gap, and Next-Key Locks
查看>>
云端中间层负载均衡工具 Eureka
查看>>
如何启动ResourceManager和NodeManager
查看>>
如何使用angularjs实现抓取页面内容
查看>>
玩转SSH(五):Struts + Spring + MyBatis(注解版)
查看>>
Android Studio系列-签名打包
查看>>
[MongoDB] Remove, update, create document
查看>>
iOS网络编程-ASIHTTPRequest框架同步请求-备用
查看>>
cobbler 修改 distro_signatures.json
查看>>
conv2、filter2、imfilter的区别
查看>>