HTTP报文

这是看 HTTP权威指南 的笔记

HTTP报文

想要了理现今的因特网,就要了解http协议。想要深入了解http协议, 怎能不看一下http报文?

相关工具

在介绍http报文之前,先介绍查看http报文的工具

  • 如果是firefox用户,可以用Live HTTP headers查看http报文
  • 如果是chrome用户, 可以使用Http headers等插件,达到同样的效果

报文流

HTTP报文是在HTTP应用程序之间发送的数据块. 这些数据块以一些文本形式的元信息开头

报文组成部分

报文由起始行,首部和主体三部分组成

以下是报文的一个示例

组件示例
起始行HTTP/1.0 200 ok
首部Content-type: text/plain
content-length: 19

主体Hi! I'm a message!

起始行和首部就是由行分隔的ASCII文本.每行都以一个由两个字符组成的行终止序列作为结束. 其中包括一个回车符和一个换行符. 这个行终止序列可以写做CRLF

报文的语法

所有的HTTP报文都分为两类:请求报文(request message)

响应报文(response message)

请求报文的格式如下

						<method> <request-URL> <version>
						<headers>

						<entity-body>
					

响应报文的格式如下

						<version> <status> <reason-phrase>
						<headers>

						<entity-body>
					

下面对各部分简要描述

  • 方法(method)

    客户端希望服务器对资源执行的动作.是一个单独的单词如GET,POST

  • 请求URL(request-URL)

    命名了请求的资源的URL路径组件

  • 版本(version)

    报文的HTTP版本, 一般是HTTP/主版本号.次版本号,如HTTP/1.1

  • 状态码(status-code)

    三位数字描述了请求过程所发生的情况

  • 原因短语(reason-phrase)

    数字状态码的可读版本

  • 首部(header)

    可以有零到多个首部. 每个首部由一个名字,后面跟着一个冒号, 然后是一个可选的空格,接着一个值,最后是一个CRLF.首部由一个空行(CRLF)结束

  • 实体的主体部分(entity-body)

    实体的主体部分包含一个由任意数据组成的数据块

起始行

起始行说明了HTTP报文的作用:请求报文的起始行说明了要做些什么, 响应报文的起始行说明了发生了什么

  1. 请求行

    请求报文的起始行,或称为请求行, 包含一个方法和一个请求URL, 还有一个HTTP的版本

  2. 响应行

    响应报文的起始行,或称为响应行, 包含了HTTP版本, 状态码和原因短语

  3. 方法

    请求的起始行以方法作为开始,时方法用来告知服务器要做些什么. 以下是常用的HTTP方法

    方法描述是否包含主体
    GET从服务器获取一份文档
    HEAD只从服务器获取文档的首部
    POST向服务器发送需要处理的数据
    PUT将请求的主体部分存储在服务器上
    TRACE对可能经过代理服务器传送到服务器上去的报文进行追踪
    OPTIONS决定可以在服务器上执行哪些方法
    DELETE从服务器上删除一份文档
  4. 状态码

    状态码用来告诉客户端发生了什么事情, 以下列出了状态码的分类

    整体范围已定义范围分类
    100~199100~101信息提示
    200~299200~206成功
    300~399300~305重定向
    400~499400~415客户端错误
    500~599500~505服务器错误

    下面常见的状态码

    状态码原因短语含义
    200OK成功.请求的所有数据都在响应主体上
    401Unauthorized(未授权)需要输入用户名和密码
    404Not Found(未找到)服务器无法找到所请求URL对应的资源
  5. 原因短语

    原因短语是响应行的最后一个组件. 应用程序开发者把原因短语传给用户,用以说明请求期间发生了什么情况

  6. 版本号

    版本号会以HTTP/x.y 的形式出现在请求和响应报文的起始行中, 为HTTP应用程序提供了一种将自己遵循的协议告知对方的方式

    注意:版本号不会被当作小数来处理, 比如HTTP/2.22就比HTTP/2.3的版本高

首部

HTTP的首部实质上是一些名/值的列表,比如,下面的首部会向Content-length首部赋值为19

Content-length: 19

以下是一些常用的首部

首部实例描述
Date: Tue,30oct 1997 02:16:03 GMT服务器产生响应的日期
Content-length: 1024实体的主体部分包含了1024字节的数据
Content-type: image/gif实体的主体部分是一个GIF的图片
Accept: image/gif, image/jpeg, text/html客户端可以接收GIF图片和JPEG图片以及HTML

实体

HTTP报文的第三部分实体是可选的. 实体的主体是HTTP协议要传输的内容

HTTP报文可以承载很多类型的数字: 图片, 视频, HTML文档, 软件应用程序,信用卡事务,电子邮件等

转载请注明出处,请忽用于任何商业用途--nothi

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值