学习笔记--HTTP-字段总结(一)-与传输实体相关的报文字段总结

目录

 

一、概述

二、介绍一些常用字段

三、传输实体的一些属性

1、传输的数据类型

2、实体的语言类型和编码

3、编码类型

四、文件类型和压缩编码字段

1、Accept

2、Content-Type

3、Accept-Encoding

4、Content-Encoding

五、语言类型和编码字段

1、Accept-Language

2、Content-Language

3、Accept-Charset

4、charset="xxx"

六、q表示的优先级

七、Vary协商字段

八、HTTP传输大文件的方法和相关字段

1、压缩

2、分块传输

3、范围请求

4、多段数据传输


一、概述:

对HTTP报文的处理就是对首部字段的处理,理解了头部字段就是理解了HTTP。

 

二、介绍一些常用字段:

  1. Host:请求字段,给出了接收请求的服务器的主机名和端口号;
  2. User-Agent:请求字段,将发起请求的应用程序名称告知服务器;
  3. Date:通用字段,通常出现在响应报文里;
  4. Server:响应字段,服务器应用程序的名称和版本;
  5. Content-Length:报文里body的长度;

 

三、传输实体的一些属性:

1、传输的数据类型:

MIME type:被传输的基本媒体类型;

相关字段:Accept, Content-Type;

常用类型:

text (纯文本类型):

  • text/html:html类型
  • text/plain:纯文本类型
  • text/css:样式表

image (图像文件):

  • image/gif: gif格式的图像
  • image/jpeg:jpeg格式的图像
  • image/png:png格式的图像

application(数据格式不固定,可能是文本也可能是二进制,必须由上层应用程序来解释):

  • application/json:json格式的数据
  • application/javascript:js文件
  • application/pdf:pdf格式的文件
  • application/octet-stream:不透明的二进制数据

注意:Content-Type 说明的是原始实体的媒体类型,即未被编码之前的实体主体类型。

2、实体的语言类型和编码:

相关字段:Accept-Language,Content-Language

语言类型(人类使用的自然语言):

  • en : 英语
  • en-US : 美式英语
  • en-GB : 英式英语
  • zh-CN : 常用汉语

编码(字符编码,用于处理文字):

  • Unicode
  • UTF-8

3、编码类型:

为了节约带宽,常会将大型数据进行压缩传输。

相关字段:Content-Encoding,Accept-Encoding

常用压缩格式:

  • gzip: GUN zip 压缩格式
  • deflate: zlib(deflate)
  • br:专为HTTP优化的新压缩算法

四、文件类型和压缩编码字段:

两个Accept 和 Content 字段

Accept:客户端表示要接受的数据相关的属性;

Content: 服务端表示传输给客户端的数据类型;

1、Accept:

标记的是客户端可理解的MIME type,可以用","做分隔符,

例如:

Accept: text/html,application/xml,image/webp,image/png

表示可以接受:HTML、xml的文件,还有webp和png的图片。

2、Content-Type:

服务器在响应头里告知客户端数据的真实类型。

例如:

Content-Type:text/html

Content-Type:image/png

3、Accept-Encoding:

标记客户端支持的压缩格式,格式同Accept字段。

4、Content-Encoding:

服务端告知客户端实体数据实际的压缩编码类型。

注意:在客户端POST请求中,Accept都为Content字段

五、语言类型和编码字段:

两个Accept,一个Content,一个charset=”xxx“

1、Accept-Language:

客户端可理解的自然语言。

例如:

Accept-Language: zh-CN,zh-en

2、Content-Language:

服务端告知客户端实体数据的实际语言。

例如:

Content-Language:zh-CN

3、Accept-Charset:

客户端接收的编码类型

例如:

Accept-Charset:gbk,utf-8

4、charset="xxx":

注意:响应字段必须为:Content-Type中用charset=”xxx“表示。

例如:

Content-Type : text/html;charset=utf-

六、q表示的优先级:

HTTP中,可在Accept,Accept-Encoding,Accept-Language 等请求字段加一个 q (质量)参数说明编码的优先级。

  • q 从0.0 到 1.0
  • 0.0:表示客户端不想接受所说明的编码
  • 1.0:表示客户端最想接受的编码类型。

例如:

Accept:text/html,application/xml;q=0.9,*/*;q=0.8

七、Vary协商字段:

响应报文,记录服务器在内容时参考的请求字段:

例如:

Vary:Accept-Encoding,User-Agent,Accept

表示服务器依据了Accept-Encoding,User-Agent和Accept这三个字段,然后决定了发回的响应报文。

八、HTTP传输大文件的方法和相关字段:

1、压缩:

见前文。

2、分块传输:

将大文件拆开分解成多个小块

相关字段:Transfer-Encoding

告知接收方为了可靠地传输报文,已经对其进行了编码。

例如:

Transfer-Encoding:chunked

表示报文中地body是分块逐步发送。

注意:Transfer-Encoding 和 Content-Length 是互斥地(不能同时出现)。

3、范围请求:

表示可以获取一个文件中的某一些分段的数据。

相关字段:

Range:客户端字段,属性:bytes=x-y

(x-y表示数据的范围)

Accept-Ranges:bytes

对于服务器来说,范围请求的功能不是必须的,所以服务器需要在响应报文中包含此字段告知客户端。

当服务器接收到Rnge字段后,它的动作是:

  1. 检查是否越界;
  2. 若范围正确,就根据Range中的属性计算偏移段,返回状态码:”206 Partial Content“
  3. 服务器里添加一个响应头字段:Content-Range(告知片段的实际偏移量和资源的总量),格式:bytes x-y/length
  4. 通过TCP将数据发送给客户端

4、多段数据传输:

在一次传输中,可以传输多段分段的数据。

相关字段:

请求:

Range字段,用逗号分隔;

例如:

Range: bytes=0-9, 20-29

响应:

Content-Type字段

属性:

multipart/byteranges:表示报文的 body 是由多段字节序列组成的

boundary: 给出段之间的分隔标记

例如:

Content-Type: multipart/byteranges; boundary=00000000001

“- -00000000001”就是多段的分隔符


参考资料:

1.《HTTP权威指南》

2.极客时间专栏-透视HTTP协议

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章