我是靠谱客的博主 顺利日记本,最近开发中收集的这篇文章主要介绍第十三天:ABNF-请求头-响应头,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

第十三天:ABNF-请求头-响应头

启动hello工程,打开抓包工具,监听8080端口,查看抓包数据

image-20211016091922129

可以看到他的整个数据

image-20211016092008504

我们打开请求报文,可以看到相关数据,但是这样的数据是不严谨的,怎样才是严谨的?

ABNF

ABNF (Augmented BNF)
是BNF (Backus-Naur Form,译为:巴科斯瑙尔范式)的修改、增强版
在RFC 5234中表明: ABNF用作internet中通信协议的定义语言
ABNF是最严谨的HTTP报文格式描述形式,脱离ABNF谈论HTTP报文格式,往往都是片面、不严谨的

image-20211016092326867

HTTP的报文(请求报文和响应报文)应该长成这个样子

image-20211016092554097

image-20211016093313602

这就是使用ABNF描述的报文格式

标注的就是header-field

一个header-field要加一个CRLF(这就是回车换行)

image-20211016092903022

当我们走到最后一对header-field,还需要额外加一个CRLF

image-20211016093204498

数据在请求体里面

所以说报文用不用换行,会不会换行,完全取决于ABNF有没有CRLF,但是奇怪的一点就是ABNF的strat-line后面没有CRLF,但是它还是换行了,这是为什么?

因为start-line里面本身就存在一个换行

我们看看它的格式

image-20211016093737540

我们很明显就能看到后面存在CRLF

我们再来看看herder-field、message-body的格式

herder-field不包括CRLF

image-20211016094336103

message-body

image-20211016094630185

OCTET是一个八位的字符串,所以说就是字符串格式的都行

ULR的编码

URL中一旦出现了- -些特殊字符(比如中文、空格),需要进行编码

在浏览器地址栏输入URL时,是采用UTF-8进行编码

image-20211016095016317

image-20211016095155315

与实际的URL编码是一致的

image-20211016095234101

Xshell的好处

安装- -个Xshell (安全终端模拟软件) ,在Xshell中使用telnet
可以直接面向HTTP报文与服务器交互
可以更清晰、直观地看到请求报文、响应报文的内容
可以检验请求报文格式的正确与否

第一步

image-20211016095555866

然后直接填写请求体

image-20211016095626853

发现出现错误

当我们填写更改数据后,发现数据出来了

image-20211016095717645

相关的的请求方法

RFC 7231,section 4: Request methods:描述了8种请求方法
GET、HEAD、POST、PUT、DELETE、 CONNECT、 OPTIONS、 TRACE

GET:常用于读取的操作,请求参数直接拼接在URL的后面(浏览器对URL是有长度限制的)

POST:常用于添加、修改、删除的操作,请求参数可以放到请求体中(没有大小限制)

  • post可以用URL传参,也可以用请求体传递参数

HEAD:请求得到与GET请求相同的响应,但没有响应体

  • 相当于发了一个GET请求,但是没有响应题

  • 使用场景举例:在下载一 个大文件前,先获取其大小,再决定是否要下载。以此可以节约带宽资源

OPTIONS:用于获取目的资源所支持的通信选项,比如服务器支持的请求方法

image-20211016101129607

看看服务器能支持哪些请求方法

不常用

PUT:用于对已存在的资源进行整体覆盖
PATCH:用于对资源进行部分修改(资源不存在,会创建新的资源)
DELETE:用于删除指定的资源

TRACE:请求服务器回显其收到的请求信息,主要用于HTTP请求的测试或诊断

CONNECT:可以开启- -个客户端与所请求资源之间的双向沟通的通道,它可以用来创建隧道(tunnel)

  • 可以用来访问采用了SSL (HTTPS)协议的站点

头部字段

image-20211016101442067

头部字段可以分为4种类型

请求头字段(Request Header Fields)

客服端发给服务器的

  • 有关要获取的资源或客户端本身信息的消息头

    image-20211016101938833

    referer:告诉服务器这个连接从那个网页来的,往常是为了做防盗链,当URL请求不是通过我指定的网页来的,我就拒绝你的连接。

    Accept:告诉服务器我只接收哪些数据

    Accept复杂情况

    image-20211016102811437

    这里的q是什么意思,这里代表的是权重值,值越大,优先级越高

    image-20211016102738641

    range:代表我只想拿你部分数据,一般来说我下载一个服务器要一个完整的数据才有意义,那么这个有什么意义呢

    可以用在多线程断点下载

    image-20211016103205592

    假设这是我的数据,分成了四部分,我们通过四部分分段点的下载,会提高下载的速度

    image-20211016103021283

响应头字段(Response Header Fields)

  • 有关响应的补充信息,比如服务器本身(名称和版本等)的消息头

    image-20211016103514204

    可以通过服务器设置header

    image-20211016103718525

    image-20211016103551956

    Content-Disposition:一个可以让客户端下载文件并建议文件名的头部

实体头字段(Entity Header Fields)

  • 有关实体主体的更多信息,比如主体长度(Content-Length) 或其MIME类型

    image-20211016101643401

通用头字段(General Header Fields)

  • 同时适用于请求和响应消息,但与消息主体无关的消息头

  • image-20211016101607056

最后

以上就是顺利日记本为你收集整理的第十三天:ABNF-请求头-响应头的全部内容,希望文章能够帮你解决第十三天:ABNF-请求头-响应头所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部