前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你需要知道的http协议

你需要知道的http协议

作者头像
kinnylee
发布2020-10-15 10:08:37
6650
发布2020-10-15 10:08:37
举报
文章被收录于专栏:kinnylee钻研技术

前言

1. http和tcp有什么区别和联系?

2. http报文格式是什么样的?

3. http常用的头部字段分别代表什么含义?

4. http常用的状态码分别代表什么含义?

5. https提供了哪些机制保证安全?

6. websocket解决了http的什么弊端?

目录

http相关基本概念

http报文

http响应状态码

http安全-https

http认证

websocket协议

一. 基本概念

1. 概述

  • web理念:文档之间相关关联,连成可相互参阅的万维网(www)
  • web互连(通讯)的基础:tcp/ip协议族,http属于它内部的子集
  • web(www)的三项构建技术:
    • html:页面使用什么语言展示
    • URL:页面在什么位置
    • http:文档之间传递的协议是什么
  • tcp/ip协议族分层包括:数据链路层,网络层,传输层 ,应用层
  • tcp/ip协议族分层作用:各层各司其职,模块划分清晰,便于维护,解耦

2. 各分层概述

2.1 应用层

  • 决定了向用户提供应用服务时通讯的活动
  • 包括:FTP,DNS,HTTP等

2.2 传输层

  • 提供网络中两台计算机之间的数据传输
  • 包括:TCP,UDP

2.3 网络层

  • 众多选项中选择合适的传输路径传输数据包

2.4 链路层

  • 用来处理网络的硬件部分

3. tcp/ip数据传输方式

  • 利用tcp/ip协议族通讯时,通过分层顺序通讯。
  • 发送端从应用层往下走,接收端从应用层往上走
  • 发送端每经过一层都会被打上该层所属的首部信息,接收端每经过一层将把首部去掉

4. 与http协议密不可分的协议

4.1 IP协议

  • 位于网络层
  • 作用是把各种数据包传送给对方
  • 确保传送正确的两个条件
    • IP地址:指明了节点被分配到的地址。可变。
    • MAC地址:网卡所属的固定地址。不可变。

4.2 TCP协议

  • 位于传输层
  • 作用是提供可靠的字节流服务
  • 字节流服务:将大块数据分割成以报文段为单位的数据包
  • 可靠:采用三次握手策略

4.3 DNS协议

  • 应用层协议
  • 作用是提供域名到ip地址之间的解析服务

4.4 各种协议的关系

4.5 http协议和tcp协议的区别与联系

区别
  • 所属协议层不同:tcp属于传输层,http属于应用层
  • 职责不同:tcp解决数据传输问题,http解决数据包装问题
联系
  • http协议是构建在tcp协议之上的
  • 打个比方:ip是高速公路,tcp是跑在高速公路上的卡车,http是卡车里面的包裹

5. URL与URI

  • URL:统一资源定位符,资源的地址。是URI的子集
  • URI:统一资源标识符,用字符串标识某一互联网资源
  • URI的格式

6. 应用程序划分

  • 客户端:请求资源的一端
  • 服务端:提供资源响应的一端
  • 代理:有转发功能的应用程序,位于客户端和服务器的中间人角色
    • 作用:缓存,访问控制
  • 网关:转发其他服务器通讯数据的服务器。与代理类似,不过网关能使通信线路上的服务器提供非http协议服务
    • 作用:提高安全性:客户端与网关之间的通信线路加密
  • 隧道:客户端与服务端建立一条特殊通信线路,使用ssl等手段加密,提高安全性

二. HTTP报文

1. 概述

  • 用于http协议交互的信息被称为报文
  • 报文分为请求报文和响应报文
  • 报文首部字段包括很多维度:内容编码,分块传输,多部分对象集合,范围请求,内容协商等

2. 报文格式

  • 报文由报文首部和报文主体两部分组成,中间由空行分开
  • 请求行:包含请求方法(get,post),请求URI,http版本
  • 状态行:响应结果状态码,原因,http版本
  • 首部字段:通用首部,实体首部,请求首部,响应首部
  • 其他:cookie等信息

3. 内容编码

  • 指明内容等编码格式,客户端负责解码
  • 能有效地处理大量等访问请求,不过会消耗更多cpu
  • 常用的内容编码
    • gzip(GNU zip)
    • compress(unix系统标识压缩)
    • deflate(zlib)
    • identity(不编码)

4. 分块传输

  • 把实体主体分块的功能
  • 用于传输大容量数据
  • 每一块都标记大小,最后一块用0标记

5. 多部分对象集合

  • 发送一份报文主体内可包含多类型实体
  • 使用时需要在首部字段里添加:Content-type
  • 包含的对象如下(content-type的值):
    • multipart/form-data:web表单文件上传时使用
    • multipart/byteranges:响应报文包含多个范围的内容时使用

6. 范围请求

  • 指定范围发送的请求
  • 解决网络中断必须从头下载的问题
  • 用到首部字段Range指定资源的byte范围:Ranges:bytes=5001-10000
  • 响应会返回206状态码和响应报文

7. 内容协商

  • 客户端和服务端就响应内容进行交涉,提供最合适的资源
  • 协商判断的依据有:响应资源的语言,字符集,编码方式
  • 包含的首部字段:Accept,Accept-Charset,Accept-Encoding,Accept-Language,Content-Language

三. 响应状态码

1. 概述

  • 描述请求的处理结果

状态码

类别

描述

1XX

信息性状态码

接收的请求正在处理

2XX

成功的状态码

请求正常处理完毕

3XX

重定向状态码

需要进行附加操作以完成请求

4XX

客户端错误状态码

服务器无法处理请求

5XX

服务器错误状态码

服务器处理请求出错

2. 2XX成功

  • 200: OK:正常处理
  • 204: No Content,服务器接受的请求成功处理,但返回但响应报文不包含主体部分
  • 206: Partial Content,服务器成功执行客户端的范围请求,响应报文中包含Content-Range指定范围的内容

3. 3XX重定向

  • 301: 永久性重定向,表示请求的资源已经分配了新的uri,以后应使用新的uri
  • 302: 临时性重定向,表示请求的资源uri临时性被移动
  • 303: 指明客户端应该用Get方法去请求,而不是post 当301, 302, 303状态码返回时,几乎所有浏览器都会把Post改为Get,并删除请求报文的主体,之后请求会自动再次发送
  • 304: Get请求中含有附加条件时,请求的资源不满足这些条件。这些附加条件包括:If-Math,If-Modified-Since,If-None-Match,If-Range,If-UnModified-Since中的任意一个
  • 307:临时重定向,类似302,不过不会从post变为get

4. 4XX客户端错误

  • 400:请求报文中存在语法错误
  • 401: 用户认证失败
  • 403: 无权限访问
  • 404: 无法找到请求的资源,url不存在

5. 5XX服务端错误

  • 500: 服务器处理出错,可能是内部的bug
  • 502: 错误的网关,资源发送给上游服务器时发送不了
  • 503: 服务器处理高负载或停机维护状态,无法处理请求

四. Http首部

1. 首部字段的格式

  • 首部字段名:字段值(可为多个)
  • 单值:Content-Type: text/html
  • 多值:Keep-Alive:timeout=15, max=100
  • 首部字段重复,规范里没有明确规定如何处理,各个浏览器不同

2. 首部字段分类

  • 通用首部字段:请求和响应都使用的字段
  • 请求首部字段:客户端信息,请求的附加信息等
  • 响应首部字段:响应的附加信息
  • 实体首部字段:请求和响应的实体部分使用的字段

3. 首部字段概览

  • http1.1共规定里47中首部字段

3.1 通用首部字段有:

  • Cache-Control:控制缓存的行为
  • Connection:连接的管理
    • Keep-Alive:维持持续连接(http1.1默认持久连接,之前版本没有)
    • close:表示关闭持久连接
    • 其他首部字段:表示这个首部字段不再转发给代理服务器
  • Date:创建时间
  • Pragma:报文指令
    • http1.0及向前版本的兼容字段
  • Trailer:报文末端的首部
  • Transfer-Encoding:报文主体传输编码方式
    • http1.1仅对分块传输有效
  • Upgrade:升级为其他协议
  • Via:代理服务器相关信息
  • Warning:错误通知

3.2 常用的请求首部字段有:

  • Accept:用户代理可处理的媒体类型
  • Accept-Charset:优先的字符集
  • Accept-Encoding:优先的内容编码
    • gizp
    • compress
    • deflate
    • identity
  • Accept-Language:优先的语言
  • Authorization:web认证信息
  • Host:请求资源的服务器
  • User-Agent:客户端程序信息
  • Range:字段范围请求
  • Referer:请求的原始资源的URI

3.3 常用的响应首部字段有:

  • Accept-Ranges:是否接受字段范围请求
  • Age:推算字段创建经过时间
  • Server:服务器的安装信息
  • Retry-After:再次发起请求的时机要求

3.4 常用的实体首部字段有:

  • Allow:可支持的http方法
  • Content-Encoding:实体主体的编码方式
  • Content-Language:实体主体的自然语言
  • Content-Length:实体主体大小
  • Content-Type:实体主体的媒体类型
  • Expires:过期时间
  • Last-Modified:最后修改时间

3.5 其他首部字段

  • Cookie:请求首部字段,服务器收到客户端传来的cookie
  • Set-Cookie:响应字段,服务器传给客户端的cookie。包含的属性:
    • name=value:cookie的名称和值
    • expires:有效期,不指定则默认为浏览器关闭时
    • path:服务器上的文件目录作为Cookie的适用对象
    • domain:cookie适用对象的域名
    • Secure:仅在https安全通信时才会发送cookie
    • HttpOnly:Cookie不能被javascript脚本访问
  • Connection
  • Keep-Alive

五. HTTPS

1. http的缺点

  • 通信适用明文(不加密),内容可能会被窃听
  • 不验证通信方的身份,可能遭遇伪装。典型如:DOS攻击
  • 无法证明报文的完整性,内容可以被篡改。典型如:中间人攻击(MITM)

2. 解决策略

2.1 防止被窃听的对策

  • 内容的加密:将http报文所含的内容进行加密。该方案的缺点:
    • 需要客户端和服务器都有加密和解密机制
    • 内容也有被篡改的风险
  • 通信的加密:http协议中没有加密机制,通过和SSL,TLS组合使用,加密http的通信内容。SSL在客户端和服务器建立安全的通信线路

2.2 防止伪装的对策

  • SSL提供的证书,可以作为通讯双方身份认证的功能

2.3 防止内容被篡改的策略

  • SSL提供的摘要功能可以解决

3. HTTPS

3.1 概述

  • https = http + 加密 + 认证 + 完整性保护
  • https并非应用层新协议,只是通信接口部分用SSL和TLS协议代替而已
  • http直接和tcp通信。使用ssl时,http先和ssl通信,再由ssl和tcp通信

3.2 常用的加密方式

共享密钥加密
  • 也叫对称密钥加密,加密和解密用同一个密钥
  • 缺点:无法安全的将密钥发送给接收方
公开密钥加密
  • 使用一对非对称的密钥,一把交私有密钥,一把交公开密钥。
  • 发送密文的一方使用对方的公开密钥进行加密,对方收到加密信息后用自己的私钥解密
  • 不需要发送私钥,不用担心信息被窃取
  • 要根据密文和公钥恢复原文信息,以目前的技术是非常困难的
  • 缺点:处理速度较慢

3.3 https的加密方式

  • 采用共享密钥加密和公开密钥加密两种方式
  • 交换密钥环节采用公开密钥加密
  • 建立通信之后,报文交换阶段采用共享密钥加密

3.4 数字证书

  • 公开密钥加密的问题:无法证明公开密钥本身的正确性
  • 解决方案:由数字证书机构和相关机构颁发的公开密钥证书

3.5 为什么不一直使用https

  • 加密通信会消耗更多的cpu和内存资源,服务器处理的请求量会降低。所以一般非敏感信息使用http,敏感信息才使用https
  • 购买证书的开销比较大

六. http认证

1. 概述

http1.1使用的认证方式有:

  • Basic认证
  • Digest认证
  • SSL客户端认证
  • FormBase认证

2. Basic认证

  • http1.0就定义的认证方式
  • 原理:将”用户名:密码”字符串做base64加密,然后作为首部Authorization字段的值传给服务端
  • 缺点:没有加密,安全等级低
  • 使用率:并不常用

3. Digest认证

  • http1.1定义的认证,为了弥补basic认证的不足
  • 原理:发送方请求认证->接收方返回质询码->发送方根据质询码计算响应码发给接收方做验证
  • 优点:提供防止密码被窃听的保护机制
  • 缺点:无法保证用户被伪装
  • 使用率:仍达不到web网站安全要求,使用受限

4. SSL客户端认证

  • 借助客户端的证书完成认证
  • 双因素认证方式:密码+证书。
  • 使用率:客户端证书需要一定费用,尚未普及

5. FormBase认证

  • web应用程序各自实现的认证方式
  • 使用率:web应用常用的认证方式

6. 状态的管理

  • http本身没有状态管理,每次请求并不知道上次请求内容
  • 使用Cookie和Session作为状态管理,弥补了http的不足

六. WebSocket协议

1. 概述

  • 是html5提供的一种在单个tcp连接上进行全双工通信的协议

2. 为什么会出现该协议?

http协议有以下弊端:

  • 一条连接上只可以发送一条请求
  • 请求只能从客户端开始,客户端不可用接受除响应以外的指令
  • 首部信息没有压缩,延迟大
  • 每次请求都要发送冗长的首部信息
  • 可任意选择压缩格式,没有强制压缩

websocket协议为解决这些弊端而生。

3. websocket的特点

  • 支持服务器向客户端推送数据的功能。服务器可直接发送数据,不用等待客户端请求
  • 减少通信量:只要建立连接,就一直保持连接状态。不仅连接开销小,且首部信息很少,减少通信量

4. websocket通信机制

  • 在http建立连接后,需要完成一次“握手”步骤
  • 附加头信息中添加"Upgrade: WebSocket",表明这是一个申请协议升级的 HTTP 请求
  • Sec-WebSocket-Key:记录握手过程中的键值
  • Sec-WebSocket-Protocol:记录使用的子协议

参考文献

《图解http》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 1. http和tcp有什么区别和联系?
      • 2. http报文格式是什么样的?
        • 3. http常用的头部字段分别代表什么含义?
          • 4. http常用的状态码分别代表什么含义?
            • 5. https提供了哪些机制保证安全?
              • 6. websocket解决了http的什么弊端?
              • 目录
                • http相关基本概念
                  • http报文
                    • http响应状态码
                      • http安全-https
                        • http认证
                          • websocket协议
                          • 一. 基本概念
                            • 1. 概述
                              • 2. 各分层概述
                                • 2.1 应用层
                                • 2.2 传输层
                                • 2.3 网络层
                                • 2.4 链路层
                              • 3. tcp/ip数据传输方式
                                • 4. 与http协议密不可分的协议
                                  • 4.1 IP协议
                                  • 4.2 TCP协议
                                  • 4.3 DNS协议
                                  • 4.4 各种协议的关系
                                  • 4.5 http协议和tcp协议的区别与联系
                                • 5. URL与URI
                                  • 6. 应用程序划分
                                  • 二. HTTP报文
                                    • 1. 概述
                                      • 2. 报文格式
                                        • 3. 内容编码
                                          • 4. 分块传输
                                            • 5. 多部分对象集合
                                              • 6. 范围请求
                                                • 7. 内容协商
                                                • 三. 响应状态码
                                                  • 1. 概述
                                                    • 2. 2XX成功
                                                      • 3. 3XX重定向
                                                        • 4. 4XX客户端错误
                                                          • 5. 5XX服务端错误
                                                          • 四. Http首部
                                                            • 1. 首部字段的格式
                                                              • 2. 首部字段分类
                                                                • 3. 首部字段概览
                                                                  • 3.1 通用首部字段有:
                                                                  • 3.2 常用的请求首部字段有:
                                                                  • 3.3 常用的响应首部字段有:
                                                                  • 3.4 常用的实体首部字段有:
                                                                  • 3.5 其他首部字段
                                                              • 五. HTTPS
                                                                • 1. http的缺点
                                                                  • 2. 解决策略
                                                                    • 2.1 防止被窃听的对策
                                                                    • 2.2 防止伪装的对策
                                                                    • 2.3 防止内容被篡改的策略
                                                                  • 3. HTTPS
                                                                    • 3.1 概述
                                                                    • 3.2 常用的加密方式
                                                                    • 3.3 https的加密方式
                                                                    • 3.4 数字证书
                                                                    • 3.5 为什么不一直使用https
                                                                • 六. http认证
                                                                  • 1. 概述
                                                                    • 2. Basic认证
                                                                      • 3. Digest认证
                                                                        • 4. SSL客户端认证
                                                                          • 5. FormBase认证
                                                                            • 6. 状态的管理
                                                                            • 六. WebSocket协议
                                                                              • 1. 概述
                                                                                • 2. 为什么会出现该协议?
                                                                                  • 3. websocket的特点
                                                                                    • 4. websocket通信机制
                                                                                    • 参考文献
                                                                                    相关产品与服务
                                                                                    云服务器
                                                                                    云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
                                                                                    领券
                                                                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档