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 ...
随机推荐
- Codeforces 679A Bear and Prime 100
链接:传送门 题意:给你一个隐藏数,这个隐藏数在[2,100]之间,现在最多可以询问20次,每次询问的是这个数是不是隐藏数的底数,是为yes,不是为no,每次询问后都需要flush一下输出缓冲区,最后 ...
- python hashlib、configparse、logging
一.hashlib 1.Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 2.摘要算法 通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目 ...
- java源码之LinkedHashMap
先盗两张图感受一下(来自:https://blog.csdn.net/justloveyou_/article/details/71713781) HashMap和双向链表的密切配合和分工合作造就了L ...
- 五大最佳开源java性能监控工具
如果你正在寻找性能监控工具,不妨看看以下推荐的这五款开源工具,这些工具目前已经可以替代付费工具了,你可以看看是否是你的最佳选择.本文推荐的五款开源工具目前是开源社区中最受欢迎的. 1. Stagemo ...
- MySQL 创建表时,设置时间字段自己主动插入当前时间
MySQL 创建表时,设置时间字段自己主动插入当前时间 DROP TABLE IF EXISTS `CONTENT`; CREATE TABLE `CONTENT` ( `ID` char(20) N ...
- 关于nodejs的线程模型可以看这篇文章
虽然还是有一些没有讲全,但是整体还是讲的很不错的. http://www.ruanyifeng.com/blog/2014/10/event-loop.html
- [TypeScript] Generic Functions, class, Type Inference and Generics
Generic Fucntion: For example we have a set of data and an function: interface HasName { name: strin ...
- (OpenGL ES 2.0 Shading Language) attribute 、uniform 和 varying
一:attribute .uniform 和 varying 都是glsl的变量的内存指示器(storage qualifiers),指明变量的内存特性 二:attribute attribute 是 ...
- awk双文件互相匹配查找
awk双文件互相匹配查找 要求: 文件a: 10/05766798607,11/20050325191329,29/0.1,14/05766798607 10/05767158557,11/200 ...
- bzoj1218: [HNOI2003]激光炸弹(DP二维前缀和)
1218: [HNOI2003]激光炸弹 题目:传送门 题解: 一道经典题目啊... 为了更好的操作...把整个坐标系向右上角移动,从(1,1)开始 那么f[i][j]统计一下以(i,j)作为右上角, ...