http报文是在http应用程序之间发送的数据块,这些数据块以一些文本形式的元信息。

请求报文从客户端流入服务器,向服务器请求数据,服务器响应请求,响应报文从服务器流出,回到客户端。

这就构成了一个事务.报文总是向下流动,所有的报文的发送者都在上游,所有的报文接受者都在下游。所以无论是浏览器还是服务器,他们都既可以在上游,也可以在下游。这个是用火狐浏览器得到的一个报文内容

报文由以下的部分组成:

  起始行(start line)

  首部(header)

  主体(body)

接下来详细看看报文的内容。

请求报文格式:

  <method>  <request-URL>  <version>

  <headers>

  <entity-body>

第一行是报文请求的起始行,它说明了这个报文要做什么。这好像是我们去吃饭,告诉服务员,我们要吃什么。

现在再来看看第一篇中请求报文的例子:

  Get /index.html HTTP/1.1

  Host: 192.168.170.171

  Accept: *

第一行中,第一个词   get  是HTTP中规定的一个请求的方法,它会获取一个文档。下面列出几种http方法:

方法

描述

是否有主体

get

获取一份文档

head

只获取文档首部

post

向服务器发送需要处理的页面

put

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

trace

对报文进行追踪

options

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

delete

从服务器上删除一份文档

在<method>之后, 是请求资源的路径,也就是我们要点的菜了,本行最后是http的一个版本号。

在请求报文的第二行起,是报文的首部,这里放置的都是一些附加信息,就像这里的

Host: 192.168.170.171 说明了服务器的位置。

Accept: * 说明了客户端期待接受的文件类型。这个很重要。比如我想去下载一张图片,结果服务器却给你显示了一张图片,这是客户端不期待得到的结果。所以,这个信息很重要。它让http更准确地工作。这里的文件类型是指一个MIME类型,如:text/html;text/xml等。

请求部分还包括了一些,对我们开发很有帮助的内容。比如:

Client-IP  提供了客户端的IP地址

UA-color  提供了客户端采用的显示色信息(比如一家网站对视网膜屏幕做优化就可以从这里得到信息)

UA-OS   提供了客户端采用的操作系统

在http报文中第三部分并不是都需要的。像表单中要传送的内容都会放在这里被发送到服务器中去。

接下来分析下响应报文,服务员要上菜啦!

这个是响应报文的格式:

  <version> <status> <reason-phrase>

  <headers>

  <entity-body>

其实可以发现  响应报文的格式和请求报文的格式是差不多的。只是起始行有所区别罢了。

起始行中version说明了http 的版本,status,reason-phrase是告诉客户端,对于刚才的请求,发生了什么。他们唯一的不同就是 status是数字,它给机器看,reason-phrase是字母,它是给人看的。通过这些状态码,客户端将反馈给我们,上次的请求是不是成功了。

这里我们可以详细地了解下status 状态码。没有状态码,我就不知道我点的鱼到底怎么样了。下面是状态码的分类

1XX

信息提示

2XX

成功

3XX

重定向

4XX

客户端错误

5XX

服务器错误

我们最想看得到的状态码就是200了,这意味着我的请求成功。而404是我们最常见的错误,它告诉我们,我们请求的资源找不到了,这一般都是因为代理服务器缓存过期。如果是500的错误,那么我们只能联系网站的管理员解决问题了。

Header部分则告诉客户端,它请求的这个页面一些相关信息。比如这个响应产生的时间,实体部分的长度。实体部分的内容是什么类型的。

这里我们可以看看几个常见的响应首部:

首部

描述

server

服务器所用的版本和名称

age

响应持续的时间

date

请求的时间

Last-Modified

页面上次被修改的时间(和date进行比较,可以确定这是否是最新页面)

Connection:close

这就是上一篇中讲的通知客户端关闭连接了

Content-Type:text/html; charset=UTF-8

表示这次发送的响应信息的主体MIME格式,和字符编码。(MIME类型,我会在随后的笔记中说明)

Content-Base

这个是用于解析主体中相对URL的基础URL

这里只列出了极少数的部分,因为完整的首部资料实在是太庞大了。

主体部分自然就是我们希望获得的html页面了。这也是浏览器最关心的部分,我们由此看到了一个完整的页面。

报文中的内容是可以控制的,我们可以通过控制这些内容,解决类似乱码、缓存等问题。从而提高自己的开发效率。

转载于:https://www.cnblogs.com/whthomas/p/3162841.html

http学习笔记(四)——HTTP报文相关推荐

  1. 【http学习笔记四】安全篇

    [http学习笔记四]安全篇 文章目录 [http学习笔记四]安全篇 一.HTTPS 与 SSL/TLS ① 什么是安全? 机密性 完整性 身份认证 不可否认 ② 什么是HTTPS? ③ SSL/TL ...

  2. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  3. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  4. RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决)

    RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) 参考文章: (1)RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) (2)https://www.cnblogs. ...

  5. JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档

    POI操作excel的确很优秀,操作word的功能却不敢令人恭维.我们可以利用iText生成rtf文档,扩展名使用doc即可. 使用iText生成rtf,除了iText的包外,还需要额外的一个支持rt ...

  6. Ethernet/IP 学习笔记四

    Ethernet/IP 学习笔记四 EtherNet/IP Quick Start for Vendors Handbook (PUB213R0): https://www.odva.org/Port ...

  7. OpenCV学习笔记四-image的一些整体操作

    title: OpenCV学习笔记四-image的一些整体操作 categories: 编程 date: 2019-08-08 12:50:47 tags: OpenCV image的一些操作 sP4 ...

  8. 吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码

    吴恩达<机器学习>学习笔记四--单变量线性回归(梯度下降法)代码 一.问题介绍 二.解决过程及代码讲解 三.函数解释 1. pandas.read_csv()函数 2. DataFrame ...

  9. esp8266舵机驱动_arduino开发ESP8266学习笔记四—–舵机

    arduino开发ESP8266学习笔记四-–舵机 使用时发现会有ESP8266掉电的情况,应该是板上的稳压芯片的限流导致的,观测波形,发现当舵机运转时,电源线3.3V不再是稳定的3.3V,大概是在3 ...

  10. mysql新增表字段回滚_MySql学习笔记四

    MySql学习笔记四 5.3.数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本:char, varchar 较长的文本:text, blob(较长的二进制数据) 日期型 原则:所选择类 ...

最新文章

  1. crt脚本怎么添加等待时间_secureCRT自动化脚本(之定时任务)
  2. Hadoop hdfs文件操作常用命令
  3. scikit-learn工具包使用建议(转)
  4. 只让输入数字、字母、中文的输入框
  5. React开发(165):ant design validateFields
  6. 使用hbuilder的maps模块调起百度地图导航
  7. 整型数据类型java_Java 六种基本整型数据类型变量的取值范围
  8. python 数据结构包_python 中numpy科学计算工具包——基础数据结构
  9. WAF(NGINX)中502和504的区别
  10. 科学与技术计算机图片解释,【图片】计算机-科普—都是从网上找的【计算机科学与技术吧】_百度贴吧...
  11. 后端基础概念:各种OCV一网打尽(下篇)
  12. jmu-python-函数-找钱_6-1 jmu-python-杨辉三角
  13. C#.NET通用权限管理系统组件中用少数几行代码实现记录页面状态
  14. Win7下更改iTunes备份路径最便捷的方法
  15. winrar破解方法
  16. RGB转CMY最简单的方法
  17. 【装机吧U盘装系统】
  18. 2022Java后端学习主流知识学习系列(建议先收藏)
  19. 万字长文带你 搞定 linux BT 宝塔面板 之外网上快速搭建苹果CMS电影网站
  20. 大型综合股票金融财经门户网站模板源码

热门文章

  1. Cisdem DVD Burner for Mac(DVD光盘刻录软件)
  2. M1 Mac上运行Windows 11
  3. hihocoder 1513 小Hi的烦恼——bitset
  4. Homebrew简单使用
  5. [Android Security] DEX文件格式分析
  6. Docker中配置国内镜像
  7. 6、PXE安装ESXI6.0
  8. overflow与BFC解说
  9. java 中如何连接 oracle 数据库
  10. windows下用notepad++配置go语言开发环境