HTTP协议

1. HTTP是什么?

HTTP(超文本传输协议)是一种应用层协议,基于TCP/IP通信协议来传递数据(html文件、图片等等)
HTTP协议用于客户端和服务端之前的通信,通过请求和相应的交互达成通信(协议规定,请求从客户端出发,最后服务器端响应请求并返回数据)。

HTTP是一种无状态协议,即协议自身不对请求和响应之间的通信状态进行保存。

TCP/IP协议族

咱们通常使用的网络是在TCP/IP协议族的基础上运作的,而http属于它内部的一个子集,所以我们先来了解一下TCP/IP协议族。

什么是TCP/IP协议族呢?

计算机与网络设备之间进行互相通信,双方就必须基于一种相同的规则,否则就无法进行通信,我们把这种规则或者标准称之为协议,把与互联网相关的各种协议集合起来总称为TCP/IP协议族。

TCP/IP的通信传输过程:
3.png

与HTTP协议有密切关系的其他协议:

IP协议,TCP协议,DNS协议
IP协议: IP协议的作用是把各种数据包准确的传递给对方,其实最重要的两个条件是IP地址和MAC地址。IP地址指明了节点被分配到的具体地址,MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址进行配对,IP地址可变,但MAC地址基本上不会更改。

TCP协议:
TCP协议位于传输层,提供可靠的字节流服务。
所谓的字节流服务是指,为了方便传输,把大块数据分割成以报文段为单位的数据包进行管理。
为了准确无误的将数据送达目标处,TCP协议采用了三次握手的策略。

什么是三次握手??

发送端首先发送一个带有SYN标记的数据包给对方,接收端收到以后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。最后,发送端再回传一个带有ACK标志的数据包,代表“握手”结束。

2.png

DNS服务:
DNS服务是和HTTP协议一样位于应用层的协议。它提供域名到IP地址之间的解析服务。

4.png

URI和URL

URI的全称是统一资源标识符,就是用来标识互联网资源,这里的资源可以是文档、图像或服务等等。
URI的格式:

URL标识资源的地址(互联网所处的位置)。

2.告知服务器意图的HTTP方法:

  • GET:用来请求访问已被URI识别的资源,指定的资源经服务器解析后返回响应内容
  • POST:传输实体主体
  • PUT:传输文件,由于HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传文件,存在安全性问题。若配合web应用程序的验证机制,或架构设计采用REST标砖的同类Web网站,就可能会开放使用PUT方法。
  • HEAD:获取报文首部,和GET方法一样,只是不返回报文主体部分,用于确认URI的有效性及资源更新的日期时间等。
  • DELETE: 删除文件,和PUT方法一样不带验证机制。
  • OPTIONS: 用来查询针对请求URI指定的资源支持的方法。
  • TRACE: 追踪路径,客户端发送请求时,在Max-Forwards首部字段中填入数值,每经过一个服务器就将该数字减1,当数值刚好减到0时,就停止继续传输,最后接收到请求的服务器端则返回状态码200 OK的响应,以此方式来追踪发送出去的请求是怎样被加工修改/篡改的。
  • CONNECT: 要求用隧道协议连接代理,CONNECT方法在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TLS协议把通信内容经网络隧道传输。

持久连接节省通信量

在HTTP早起版本中,每进行一次HTTP通信就要断开一次TCP连接。随着HTTP的普及,文档中包含大量图片的情况增多,如果每次请求都会造成无谓的TCP连接建立和断开,增加通信量的开销。
为解决上述问题,HTTP/1.1和HTPP/1.0想出了持久连接(也成为HTPP keep-alive),持久连接的特点:只要任意一端没有明确提出断开连接,则保持TCP连接状态

5.png

持久连接的好处在于减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务端的负载,减少开销的时间使HTTP请求和响应能够更早的结束,提高了web页面的显示速度。

HTTP/1.1中,所有的连接默认都是持久连接。

3. HTTP报文

用于HTTP协议交互的信息被称为HTTP报文,客户端发送的报文称之为请求报文,服务端响应的报文称之为响应报文。HTTP报文大致可以分为报文首部和报文主体两部分。


1.png
编码提升传输速率:

为了提高在传输过程中的速度,HTTP协议中提供了一种内容编码的功能。常见的内容编码有以下几种:

  • gzip (GNU zip)
  • COMPRESS(Unix 系统的标准压缩)
  • deflate(zlib)
  • identity(不进行编码)
分割发送的分块传输编码

在传输大量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。这种把实体主题分块的功能称为分块传输编码

发送多种数据的多部分对象集合
获取部分内容的范围请求

在实现断点续传的功能的时候,就需要使用范围请求这个字段了。eg.Range: byte = 5001 - 10000

内容协商返回最合适的内容

内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为合适的资源。内容协商会以语言、字符集、编码方式等为基准判断响应的资源

  • Accept
  • Accept-Charset
  • Accept-Encoding
  • Accept-Language
  • Content-Language

4.从服务器返回请求结果的HTTP状态码

状态码种类 类别 原因短语
1xx (信息性状态码) 接收的请求正在处理
2xx (成功状态码) 请求正常处理完毕
3xx (重定向状态码) 需要进行附加操作以完成请求
4xx (客户端错误状态码) 服务器无法处理请求
5xx (服务器错误状态码) 服务器处理请求出错

5. HTTP报文首部

  1. HTTP报文首部结构

  2. 4种HTTP首部字段类型:

  • 通用首部字段: 请求报文和响应报文都会使用的首部
  • 请求首部字段: 从客户端向服务器发送请求报文时使用的首部,补充了请求的附加内容、客户端信息、响应内容相关优先级等信息
  • 响应首部字段: 从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。
  • 实体首部字段:针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。

3.首部字段列表

通用首部字段
首部字段名 说明
Cache-Control 控制缓存的行为
Connection 逐跳首部、连接的管理
Date 创建报文的日期时间
Pragma 报文指令
Trailer 报文末端的首部一览
Transfer-Encoding 指定报文猪蹄的传输编码方式
Upgrade 升级为其他协议
Via 代理服务器的相关信息
Warning 错误通知
请求首部字段
首部字段名 说明
Accept 用户代理可处理的媒体类型
Accept-Charset 优先的字符集
Accept-Encoding 优先的内容编码
Accept-Language 优先的语言
Authorization Web认证信息
Expect 期待服务器的特定行为
From 用户的电子邮箱地址
Host 请求资源所在服务器
If-Match 比较实体标记(Etag)
If-Modified-Since 比较资源的更新时间
If-None-Match 比较实体标记(与If-Match相反)
If-Range 资源未更新时发送实体Byte的范围请求
If-Unmodified-Since 比较资源的更新时间(与If-Modified-Since相反)
Max-Forwards 最大传输逐跳数
Proxy-Authorization 代理服务器要求客户端的认证信息
Range 实体的字节范围请求
Referer 对请求中URI的原始获取方
TE 传输编码的优先级
User-Agent HTTP客户端程序的信息
响应首部字段
首部字段名 说明
Accept-Ranges 是否接受字节范围请求
Age 推算资源创建经过时间
Etag 资源的匹配信息
Location 令客户端重定向至指定URI
Proxy-Authenticate 代理服务器要求客户端的认证信息
Retry-After 对再次发起请求的时机要求
Server HTTP服务器的安装信息
Vary 代理服务器缓存的管理信息
WWW-Authenticate 服务器对客户端的认证信息
实体首部字段
首部字段名 说明
Allow 资源可支持的HTTP方法
Content-Encoding 实体主体使用的编码方式
Content-Language 实体主体的自然语言
Content-Length 实体主体的大小(单位:字节)
Content-Location 替代对应资源的URI
Content-MD5 实体主体的报文摘要
Content-Range 实体主体的位置范围
Content-Type 实体主体的媒体类型
Expires 实体主体过期的日期时间
Last-Modified 资源的最后修改日期时间
Cache-Control

该指令的参数是可多选的,多个指令之间通过‘,’分隔。

Cache-Control:private,max-age=0,no-cache
Expires

缓存服务器在接收到含有Expires的响应后,会以缓存来应答请求,在Expires字段值指定的时间之前,响应的副本会一直被保存。当超过指定时间后,则需要向源服务器发起请求。
max-age优先级高于Expires

Connection

控制代理不再转发

connection:不再转发的首部字段名

管理持久连接

connection: close/keep-alive
Date: 表明创建HTTP报文的日期和时间
Pragma

Pragma是http/1.1之前的历史遗留字段,仅作为与http/1.0的向后兼容而定义,规范定义的形式唯一,如下

pragma:no-cache
Upgrade

用于检测HTTP协议及其他协议是否可使用更高的版本进行通信。其参数值可以用来指定一个完全不同的通信协议。
发送端

GET /index.html HTTP/1.1
Upgrade: TLS/1.0
Connection: Upgrade

服务器端

HTTP/1.1 101 Switching Protocols
Upgrade: TLS/1.0,HTTP/1.1
Connection: Upgrade

Upgrade首部字段产生作用的Upgrade对象仅限于客户端和相邻服务器,所以要与connection属性搭配使用。

If-Match : 只有当If-Match的字段值与Etag值匹配一致时,服务器才会接受请求
If-None-Match:只有在If-None-Match的字段值与Etag值不一致时,可处理该请求,与If-Match相反
If-Modified-Since:如果在If-Modified-Since字段指定的日期时间后,资源发生了更新,服务器会接受请求
If-Unmodified-Since:如果在If-Modified-Since字段指定的日期时间后,资源未更新的情况下,服务器才能处理请求
ETag

用来标识实体的唯一值。ETag分为强ETag和弱ETag。
强ETag值:不论实体发生多么细微的变化都会改变其值
弱ETag值:只有资源发生了根本变化,产生差异时才会改变ETag值,并且会再字段值最开始出附加W/

ETag: W/"errds-123456"
Last-Modified:指明资源最终修改的时间。

6. HTTP缺点

  • 通信使用明文(不加密),内容可能会被窃听
  • 不验证通信方的身份,因此有可能遭遇伪装
  • 无法证明报文的完整性

HTTP协议中没有加密机制,但可以通过和SSL(Secure Socket Layer,安全套接层)或TLS (Transport Layer Security, 安全传输层协议)的组合使用,加密HTTP的通信内容。

用SSL简历安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP被称为HTTPS.

HTTP+加密+认证+完整性保护 = HTTPS

虽然HTTPS很可靠,但是也存在一些问题,那就是当使用SSL时,它的处理速度会变慢。一种是指通信变慢。另一种是指由于大量消耗CUP及内存等资源,导致处理速度变慢。因此如果是非敏感信息则使用HTTP通信,只有在包含个人信息等敏感数据时,才利用HTTPS加密通信

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容