博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP报文内的HTTP信息
阅读量:7103 次
发布时间:2019-06-28

本文共 1555 字,大约阅读时间需要 5 分钟。

HTTP报文:用于HTTP协议交互的信息,是由多行数据构成的字符串文本(用CR+LF作换行符)。

结构:报文首部+空行+报文主体(非必需)

请求报文:客户端的HTTP报文。  报文首部的内容:请求行,请求首部字段,通用首部字段,实体首部字段,其他。

响应报文:服务器端的HTTP报文。 报文首部的内容:状态行,响应首部字段,通用首部字段,实体首部字段,其他。

 

编码提升传输速率

HTTP在传输数据时可以进行编码来提升传输速率。编码的操作需要计算机来完成,因此会消耗更多的CPU等资源。

内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接受并负责解码。

常见的内容编码有:gzip(GNU zip)、compress(UNIX系统的标准压缩)、deflate(zlib)、identity(不进行编码)。

 

分块传输编码(Chunked Transfer Coding):一种把实体主体分块的功能。

分块传输编码会将实体主体分成多个部分(块)。每一块都会用十六进制来标记块的大小,而实体主体的最后一块会用“0(CR+LF)”来标记。

由客户端进行解码。

HTTP/1.1中存在传输编码(Transfer Coding)的机制。它可以在通信时按照某种编码方式传输,但只定义作用域分块传输编码中。

 

发送多种数据的多部分对象集合

在HTTP报文中使用多部分对象集合时,需要在首部字段里加上Content-type。

multipart/form-data:在Web表单文件上传时使用。

multipart/byteranges:状态码206(Partial Content,部分内容)响应报文包含了多个范围的内容时使用。

 

范围请求(Range Request)

问题:下载一个图片发生中断时,需要重新下载。

解决:指定下载的实体范围。

比如:对于一个1000字节的图片,下载到一半时发生网络中断,待网络恢复时可以只请求下载501~1000字节内的资源。

执行范围请求时,会用到首部字段Range来指定资源的byte范围。

#5001~10000字节Range: bytes=5001-10000#从5001字节之后全部的Range: bytes=5001-#从一开始到3000字节,和5000-7000字节的多重范围Range: bytes=-3000, 5000-7000

针对范围请求,相应会返回状态码为206 Partial Content的响应报文。

对于多重范围的范围请求,相应会在首部字段Content-Type标明multipart/byteranges后返回响应报文。

如果服务器端无法响应范围请求,则会返回状态码 200 OK和完整的实体内容。

 

内容协商(Content Negotiation)

内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。

用处:当浏览器的默认语言为英语或中文,访问相同URI的Web页面,会显示对应的英语班或中文版Web页面。

三种类型:

1.服务器驱动协商(Server-driver Negotiation):由服务器端进行内容协商。以浏览器发送的首部字段作为判定的依据,并不一定能筛选出最优的内容。

2.客户端驱动协商(Agent-driver Negotiation):由客户端进行内容协商的方式。用户从浏览器显示的可选列表中手动选择。

3.透明协商(Transparent Negotiation):是服务器驱动和客户端驱动的结合体,由服务器端和客户端各自进行内容协商的一种方法。

转载于:https://www.cnblogs.com/drake-guo/p/6247844.html

你可能感兴趣的文章
前端进阶系列(五):flex布局
查看>>
【静态页面架构】CSS之其它元素
查看>>
openresty下lua的function定义及调用
查看>>
TypeScript学习笔记—变量的声明
查看>>
Python基础之文本格式化
查看>>
理解javascript类数组
查看>>
ClojureScript 1.10.x 新技能 cljs.main 快速开启
查看>>
Logistic分类函数
查看>>
"irest" 一个 nodejs 命令行工具的制作过程
查看>>
Combining Character
查看>>
学习《深入react技术栈》--简介
查看>>
数据库事务的四种隔离级别
查看>>
关于Vue.nextTick()的使用
查看>>
WPF项目示例1:入门
查看>>
Dubbo 新编程模型之注解驱动
查看>>
从template到DOM(Vue.js源码角度看内部运行机制)
查看>>
Sequelize 中文文档 v4 - Working with legacy tables - 使用遗留表
查看>>
《Java Concurrency in Practice》中三个VehicleTracker例子的分析
查看>>
spring-springmvc项目介绍
查看>>
为什么要从0开始计数
查看>>