Http协议报文格式

2020-03-04  本文已影响0人  二狗不是狗

回车和换行

回车和换行的历史由来
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的机械打字机,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界,不卷动滚筒;另一个叫做“换行”,告诉打字机把滚筒卷一格,不改变水平位置。

回车和换行在计算机中应用
后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧,回车 \r 本义是光标重新回到本行开头,换行 \n 本义是光标往下一行(不一定到下一行行首)

在WIN系统下,这两个字符就是表现的本义,\r\n: window 系统行末结束符
在UNIX类系统,换行\n就表现为光标下一行并回到行首,\n: UNIX 系统行末结束符
在MAC上,\r就表现为回到本行开头并往下一行,\r: MAC OS 系统行末结束符

上面分歧导致的后果是:Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
而ENTER键的定义则是与操作系统有关的。通常用的Enter是两个加起来,也就是\r\n。

报文格式

请求报文格式

image.png
image.png

1.整个请求报文由(请求行 + 请求头 + 空白行 + 请求体)四部分组成
2.请求头包括(请求首部字段 + 通用首部字段 + 实体首部字段)
下面是一个标准化的请求示例


image.png

响应报文格式

image.png
image.png

1.整个响应报文由(响应/状态行 + 响应头部 + 空白行 + 响应体)四部分组成
2.响应头包括(响应首部字段 + 通用首部字段 + 实体首部字段)
下面是一个标准化的响应示例


image.png

请求首部字段(Request Header Fields)

从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。

Accept

用户代理/浏览器可处理的媒体类型
Accept: text/html,application/xhtml+xml,application/xml;q=

Accept-Charset

该首部字段可用来通知服务器用户代理支持的字符集及字符集的相对优先顺序
Accept-Charset: iso-8859-5, unicode-1-1;q=0.8

Accept-Encoding

表示当前客户端可以接受的页面编码
Accept-Encoding: gzip, deflate, br

Accept-Language

优先的语言(自然语言)
Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3
客户端在服务器有中文资源的情况下,会请求返回中文版对应的响应,没有中文时,则请求返回英文版响应。

Authorization

Web认证信息
请求资源 => 服务端返回401 Unauthorized => 客户端发送带有认证信息的请求
想要通过服务器认证的用户代理会在接收到返回401 状态码响应后,把首部字段 Authorization 加入请求中。
Authorization: Basic dWVub3NlbjpwYXNzd29yZA==

Host

请求被发送至服务器时,请求中的主机名会被 IP 地址直接替换。但如果这时,相同的 IP 地址下部署运行着多个域名,那么服务器就会无法理解究竟是哪个域名对应的请求。因此,就需要使用Host来明确指出请求的主机名
Host: www.hackr.jp

Referer

该首部字段会告知服务器请求的原始资源的URI
Referer:http://www.hackr.jp/index.html

响应首部字段(Response Header Fields)

从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。

Location

配合3xx:Redirection 的响应,提供重定向的URI,令客户端重定向至指定URI
Location: http://www.xker.com/

Server

包含了处理请求的源头服务器所用到的软件相关信息
Server: BWS/1.1

通用首部字段(General Headers Fields)

请求报文和响应报文两方都会使用的首部。

Connection

HTTP/1.1默认连接都是持久连接。当服务器端想明确断开连接时,则指定Connection字段的值为Close

Content-Type

这个字段用来表示报文主题的对象类型
text/plain:文本类型
text/html:html文档类型
application/json:json数据类型

实体首部字段(Entity Header Fields)

针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。

Content-Encoding

实体主体适用的编码方式
Content-Encoding: gzip

Content-Language

实体主体的自然语言;告知客户端/服务器,实体主体使用的自然语言(指中文或英文等语言)

Content-Length

实体主体的大小(单位:字节); 首部字段 Content-Length 表明了实体主体部分的大小(单位是字
节)
Content-Length: 6511

Content-Range

实体主体的位置范围。请求中断后,再次请求,发送范围请求
Content-Range: bytes 5001-10000/10000

Expires

实体主体过期的日期时间。但是,当首部字段 Cache-Control 有指定 max-age指令时,比起首部字段 Expires,会优先处理max-age
Expires: Thu, 27 Dec 2029 02:57:49 GMT

非标准化但常用字段

Set-Cookie

image.png

Set-Cookie: NSC_UFtuTTM=ffffffffaf115bdd45525d5f4f58455e445a4a42378b;expires=Thu, 05-Mar-2020 02:46:55 GMT;path=/;secure;httponly

Cookie

可以传递多个cookie
Cookie: lantag=zh_CN; BIGipServerpool_bpmapp_80=678433964.20480.0000; ASP.NET_SessionId=ncutd4ee032tecjnycta32ga; BIGipServerpool_bpmapp_9002=678433964.10787.0000

上一篇下一篇

猜你喜欢

热点阅读