HTTP——学习笔记(3)
HTTP报文:用于HTTP协议交互的信息,客户端的HTTP报文叫做 请求报文,响应端的叫做 响应报文
本质:是由多行(用CR+LF作换行符)数据构成的字符串文本
注:CR:回车,打印针回到行首 LF:换行,打印针移至下一行
构成:报文首部、报文主体
报文首部:服务器端或客户端需处理的请求或响应的内容及属性
报文主体:应被发送的数据

请求报文(上) 响应报文(下)
请求行:请求的方法、请求URI、HTTP版本
状态行:响应结果状态码、原因短语、HTTP版本
首部字段:表示请求和响应的各种条件和属性的各类首部,一般有四种(见图)
其他:包含HTTP的RFC里未定义的首部(Cookie等)
HTTP中的编码
HTTP中可以直接传输数据,也可以编码后进行传输,编码的方法可以有效地处理大量的访问请求,但是编码过程需要计算机来完成,因此会消耗更多的CPU等资源
报文:HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输
实体:作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成
报文的主体用于传输请求或响应的实体主体,通常,报文主体等于实体主体,只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异
HTTP中的内容编码可以保持实体信息原样进行压缩,内容编码后的实体由客户端接收并负责解码
常用的内容编码:gzip compress deflate identity(不进行编码)
传输编码机制:在通信时按某种编码方式传输,但只定义 作用于分块传输编码中
分块传输编码:传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面
邮件中的MIME机制:多用途因特网邮件扩展,支持发送多种类型的文件,如邮件,文本,图片,视频等,因为使用一种称为多部分对象集合的方法
多部分对象集合:HTTP中也采用了多部分集合,发送的一份报文主体内可含有多类型实体,其中包含的对象如下:
multipart/form-data:在web表单文件上传时使用
multipart/byteranges:状态码206(部分内容),响应报文包含了多个范围的内容时使用
HTTP获取部分内容请求
在请求头部加上Range划定请求范围
例如:Range:bytes=5001-10000 5001-10000字节
Range:bytes=5001- 5001至后面全部的字节
Range:bytes=-3000,5000-7000 一开始到3000字节和5000到7000字节
返回状态码的206响应报文,若服务器无法响应范围请求,则会返回状态码200 OK和完整的实体内容
HTTP内容协商
同一个web网站有可能会有多份内容相同的页面,比如英语版和中文版,当浏览器的默认语言为英语或中文,访问相同的URI的web页面时会显示对应的英语版或中文版页面,这样的机制称为 内容协商
判断基准:响应资源的语言、字符集、编码方式等
首部字段:Accept
Accept-Charset
Accept-Encoding
Accept-Language
Content-Language
内容协商的技术:
服务器驱动协商:由服务器端进行内容筛选
客户端驱动协商:由客户端进行内容筛选,用户从可选列表中手动选择,也可利用Javascript进行选择
透明协商:由服务器端和客户端各自进行内容协商
HTTP——学习笔记(3)的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
- ucos实时操作系统学习笔记——任务间通信(消息)
ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...
随机推荐
- Flex tree展开节点问题!
问题: 使用 for each(var item:XML in menuTree.dataProvider) { menuTree.expandChildrenOf(item,true); ...
- pyqt5的QWebEngineView 使用方法
说明1:关于QWebEngineView pyqt5 已经抛弃 QtWebKit和QtWebKitWidgets,而使用最新的QtWebEngineWidgets. QtWebEngineWidget ...
- django-10-中间件和上下文管理器
<<<中间件的引入>>> 用户<->中间件<->url->视图 在app目录里面 middleware.py (1)中间件就是一个 ...
- oracle截取某一个字符之前或之后的值;substr();instr()
函数介绍: 截取的函数: substr(?,?); substr(?,?,?); 获取目标字符出现的位置: instr(? , ? , ? ); instr( ? , ? , ? , ? ) 例: 字 ...
- nutch的一些基础整理
nutch的一些基础整理 原创 2015年03月22日 18:18:01 标签: nutch / 240 编辑 删除 一.关于配置文件: nutch-default.xml:爬虫的默认配置.在${nu ...
- JavaWeb初学者session的使用
使用request对象的getSession()获取session,如果session不存在则创建一个 HttpSession session = request.getSession();将数据存储 ...
- [using_microsoft_infopath_2010]Chapter2 表单需求,使用表决矩阵
本章概要 1.从模板创建表单 2.从创建表单收集需求 3.使用全部表单决策 4.决定需要创建哪种表单
- BestCoder Round #52 (div.2) HDU 5418 Victor and World (DP+状态压缩)
[题目链接]:pid=5418">click here~~ [题目大意]: 问题描写叙述 经过多年的努力,Victor最终考到了飞行驾照. 为了庆祝这件事,他决定给自己买一架飞机然后环 ...
- HDU 2841 Visible Trees(容斥定理)
Visible Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- js中callback执行
<!DOCTYPE HTML> <html> <head> <meta charset="GBK" /> <title> ...