网站首页 > 技术文章 正文
HTTP报文
用于HTTP协议交互的信息被称为HTTP报文,客户端的HTTP报文叫做请求报文,服务端的叫做响应报文
请求行:包含用于请求的方法,请求的URI和HTTP版本
状态行:响应结果的状态码,原因短语和HTTP版本
首部字段:通用首部、请求首部、响应首部和实体首部
其他:可能包含HTTP的RFC里未定义的首部(Cookie等)
报文主体和实体主体的差异
报文:HTTP通信中的基本单位,由8位字节流组成,通过HTTP通信传输
实体:由实体首部和实体主体组成,是有效载荷数据
通常,报文主体等于实体主体,只有当传输中进行编码时,实体主体的内容才发生变化,才导致发生差异
压缩传输的内容编码
内容编码是指应用在实体主体内容上的编码格式,并保持实体信息原样压缩,内容编码后的实体由客户端接收并负责解码,它是HTTP协议的功能
常见的内容编码有以下几种:
gzip(GNU zip)
compress(UNIX系统的标准压缩)
deflate(zlib)
identity(不进行编码)
分割发送的分块传输编码
分块传输编码:在传输大量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面
1)分块传输编码将实体主体分成多块,每一块都会用十六进制来标记块的大小,最后一块使用“0(CR+LF)”来标记
2)使用分块传输编码的实体主体由接收的客户端负责解码,恢复到解码前的实体主体
3)HTTP1.1中存在一种称为传输编码的机制,它可以在通信时按照某种编码方法进行传输,但只定义在分块传输编码中
发送多种数据的多部分对象集合
HTTP协议中采纳了多部分对象集合,发送的一份报文主体内可含有多类型的实体,在HTTP报文的首部字段里加上Content-Type
多部分对象集合包含的对象:multipart/form-data、multipart/byteanges
multipart/form-data:在Web表单上传时使用
multipart/byteanges:状态码206的响应报文中包含了多个范围的内容时使用
multipart/form-data实例:
Content-Type: multipart/form-data; boundary=AaB03x
--AaB03x
Content-Disposition: form-data; name="field1"
Joe Blow
--AaB03x
Content-Disposition: form-data; name="pics"; filename="file1.txt"Content-Type: text/plain ...(file1.txt的数据)...
--AaB03x--
multipart/byteanges实例:
HTTP/1.1 206 Partial ContentDate:
Fri, 13 Jul 2012 02:45:26 GMT
Last-Modified: Fri, 31 Aug 2007 02:02:20 GMT
Content-Type: multipart/byteranges; boundary=THIS_STRING_SEPARATES
--THIS_STRING_SEPARATES
Content-Type: application/pdf
Content-Range: bytes 500-999/8000
...(范围指定的数据)...
--THIS_STRING_SEPARATES
Content-Type: application/pdf
Content-Range: bytes 7000-7999/8000...(范围指定的数据)...-
-THIS_STRING_SEPARATES--
由上两个实例中:通过boundary字符串来划分多部分对象集合指明的各类实体,在指定的字符串前插入"--"标记开始,也作为结束标记,boundary=AaBO3x,则划分的字符串为--AaBO3x
获取部分内容的范围请求
指定范围发送的请求叫做范围请求,在首部字段中添加Range,如:Range:bytes = 5001-10000,即获取5001-10000字节的内容,也可写为Range:bytes = 3000,5000-7000,即从开始到3000字节和5000到7000字节的多重范围
针对范围请求,响应会返回状态码206Partial Content的响应报文,如果服务器无法响应范围请求,则会返回状态码200 OK 和完整的实体内容
内容协商机制
当浏览器的默认语言为中文或英文时,访问相同的URI的Web页面时,则会显示对应的中文版或英文版,这种机制称为内容协商机制(Content Negotiation)
内容协商机制会以响应资源的语言、字符集、编码方式等作为判断的基准
内容协商技术有以下三种类型:
1)服务器驱动协商:由服务端进行协商,以请求的首部字段为参考,在服务端自动处理
2)客户端驱动协商:由客户端进行协商,在用户的浏览器显示的可选项中手动选择,还可利用JavaScript脚本在Web页面上自动进行上述选择
3)透明协商:是服务端驱动和客户端驱动的结合,由各自进行协商
Android文章推荐
最全Android学习路线总结,绝对干货
http://mp.weixin.qq.com/s/9uDV16DVIMby1hNFL6-BKA
猜你喜欢
- 2024-10-11 如何在Java中将DOCX转换为PDF java实现docx转pdf
- 2024-10-11 字节跳动《Python项目开发实战》高清版 PDF 开放下载,简直神了
- 2024-10-11 牛!字节跳动《算法中文手册》火了,完整版 PDF 开放下载!
- 2024-10-11 字节跳动把python入门知识点整理成手册了,高清PDF开放下载
- 2024-10-11 字节大佬熬夜肝出的《Python知识手册》,高清pdf开放下载
- 2024-10-11 看了这份《算法中文手册》笔记,就再也不怕字节了
- 2024-10-11 字节跳动《算法中文手册》火了,完整版 PDF 开放下载!
- 2024-10-11 字节跳动《Python项目开发实战》高清版 PDF 开放下载
- 2024-10-11 Linux 内核 | 网络流量限速方案大 PK
- 2024-10-11 字节跳动把python基础知识点整理成手册了,高清版PDF开放下载
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)