IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 认识HTTP协议和HTTPS协议 -> 正文阅读

[网络协议]认识HTTP协议和HTTPS协议

1、HTTP是什么?

  • HTTP (HyperText Transfer Protocol, 超文本传输协议) 是一种应用非常广泛的 应用层协议。
  • 所谓 “超文本” 的含义, 就是传输的内容不仅仅是文本(比如 html, css 这个就是文本), 还可以是一些其他的资源, 比如图片, 视频, 音频等二进制的数据。

2、HTTP版本迭代

  • HTTP0.9
  • HTTP0.9 是第一个版本的HTTP协议(已过时)。它的组成极其简单,只允许客户端发送GET这一种请求,且不支持请求头。由于没有协议头,造成了HTTP/0.9协议只支持一种内容,即纯文本。不过网页仍然支持用HTML语言格式化,同时无法插入图片。
  • HTTP0.9 具有典型的无状态性,每个事务独立进行处理,事务结束时就释放这个连接。即发起一次HTTP0.9的传输首先要建立一条客户端到服务端的TCP连接,服务端返回数据后,关闭TCP连接。
  • HTTP1.0
  • HTTP1.0 是第二个版本的HTTP协议。在HTTP0.9版本基础上扩展支持了(POST,PUT,HEAD,DELETE)请求方法。
  • 新增了5类状态响应码
  • 1、信息响应(100-199)
  • 100(这个临时响应表明,迄今为止的所有内容都是可行的,客户端应该继续请求,如果已经完成,则忽略它。)
  • 101(该代码是响应客户端的 Upgrade (en-US) 请求头发送的, 指明服务器即将切换的协议。)
  • 102(此代码表示服务器已收到并正在处理该请求,但当前没有响应可用。)
  • 103(此状态代码主要用于与 Link 链接头一起使用,以允许用户代理在服务器准备响应阶段时开始预加载preloading资源。)
  • 2、成功响应(200-299)
  • 200(请求成功。目前最常见的成功响应码)
  • 201(该请求已成功,并因此创建了一个新的资源。这通常是在POST请求,或是某些PUT请求之后返回的响应。)
  • 202(请求已经接收到,但还未响应,没有结果。意味着不会有一个异步的响应去表明当前请求的结果,预期另外的进程和服务去处理请求,或者批处理。)
  • 203 (服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,而是来自本地或者第三方的拷贝。当前的信息可能是原始版本的子集或者超集。例如,包含资源的元数据可能导致原始服务器知道元信息的超集。使用此状态码不是必须的,而且只有在响应不使用此状态码便会返回200 OK的情况下才是合适的。)
  • 204(对于该请求没有的内容可发送,但头部字段可能有用。用户代理可能会用此时请求头部信息来更新原来资源的头部缓存字段。)
  • 205(告诉用户代理重置发送此请求的文档。)
  • 206(当从客户端发送Range范围标头以只请求资源的一部分时,将使用此响应代码。)
  • 3、重定向信息(300-399)
  • 300(请求拥有不只一个的可鞥响应。用户带来或者用户应当从中选择一个。 (没有标准化的方法来选择其中一个响应,但是建议使用指向可能性的HTML链接,以便用户可以选择。) )
  • 301(永久重定向,请求资源的URL已永久更改。在响应中给出了新的URL。)
  • 302 (临时重定向,此响应代码表示所请求资源的URI已 暂时 更改。未来可能会对URI进行进一步的改变。因此,客户机应该在将来的请求中使用这个相同的URI。)
  • 303(服务器发送此响应,以指示客户端通过一个GET请求在另一个URI中获取所请求的资源。)
  • 304(自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。如果网页自请求者上次请求后再也没有更改过,您应将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。服务器可以告诉 Googlebot 自从上次抓取后网页没有变更,进而节省带宽和开销。)
  • 305(在HTTP规范中定义,以指示请求的响应必须被代理访问。由于对代理的带内配置的安全考虑,它已被弃用。)
  • 306 (此响应代码不再使用;它只是保留。它曾在HTTP/1.1规范的早期版本中使用过。)
  • 307(服务器发送此响应,以指示客户端使用在前一个请求中使用的相同方法在另一个URI上获取所请求的资源。这与302 FoundHTTP响应代码具有相同的语义,但用户代理 不能 更改所使用的HTTP方法:如果在第一个请求中使用了POST,则在第二个请求中必须使用POST)
  • 308(这意味着资源现在永久位于由Location: HTTP Response 标头指定的另一个 URI。 这与 301 Moved Permanently HTTP 响应代码具有相同的语义,但用户代理不能更改所使用的 HTTP 方法:如果在第一个请求中使用 POST,则必须在第二个请求中使用 POST。)
  • 4、客户端错误响应(400-499)
  • 400(由于被认为是客户端错误(例如,错误的请求语法、无效的请求消息帧或欺骗性的请求路由),服务器无法或不会处理请求。)
  • 401(虽然HTTP标准指定了"unauthorized",但从语义上来说,这个响应意味着"unauthenticated"。也就是说,客户端必须对自身进行身份验证才能获得请求的响应。)
  • 402(此响应代码保留供将来使用。创建此代码的最初目的是将其用于数字支付系统,但是此状态代码很少使用,并且不存在标准约定。)
  • 403(客户端没有访问内容的权限;也就是说,它是未经授权的,因此服务器拒绝提供请求的资源。与401 Unauthorized不同,服务器知道客户端的身份。)
  • 404(服务器找不到请求的资源。在浏览器中,这意味着无法识别URL。在API中,这也可能意味着端点有效,但资源本身不存在。服务器也可以发送此响应,而不是403 Forbidden,以向未经授权的客户端隐藏资源的存在。这个响应代码可能是最广为人知的,因为它经常出现在网络上。)
  • 408(请求超时,服务器等候请求时发生超时。)
  • 413(请求实体过大,服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。)
  • 414(请求URL过长,请求的 URI(通常为网址)过长,服务器无法处理。)
  • 5、服务端错误响应(500-599)
  • 500(服务器遇到了不知道如何处理的情况)
  • 501(服务器不支持请求方法,因此无法处理。服务器需要支持的唯二方法(因此不能返回此代码)是 GET and HEAD)
  • 502(网关错误,此错误响应表明服务器作为网关需要得到一个处理这个请求的响应,但是得到一个错误的响应。)
  • 503(服务器超载或停机维护,服务器没有准备好处理请求。常见原因是服务器因维护或重载而停机。请注意,与此响应一起,应发送解释问题的用户友好页面。这个响应应该用于临时条件和如果可能的话,HTTP头Retry-After字段应该包含恢复服务之前的估计时间。网站管理员还必须注意与此响应一起发送的与缓存相关的标头,因为这些临时条件响应通常不应被缓存。)
  • 504(网关超时,当服务器充当网关且无法及时获得响应时,会给出此错误响应。)
  • 505(HTTP 版本不受支持,服务器不支持请求中所用的 HTTP 协议版本。)
  • 存在的问题
  • 无法复用连接,每次发送请求,都需要进行一次TCP连接,而TCP的连接释放过程又是比较费事的。这种无连接的特性会使得网络的利用率变低。
  • 队头阻塞(head of line blocking),由于HTTP1.0规定下一个请求必须在前一个请求响应到达之前才能发送,假设前一个请求响应一直不到达,那么下一个请求就不发送,后面的请求就阻塞了。
  • 不支持断点续传,也就是说,每次都会传送全部的页面和数据。
  • HTTP1.1
  • HTTP1.1是HTTP协议的第三个版本,是目前使用最广泛的协议版本 。HTTP 1.1是目前主流的HTTP协议版本。
  • 新增了(OPTIONS,TRACE,CONNECT)请求方法
  • HTTP1.1继承了HTTP1.0的简单,克服了HTTP1.0性能上的问题,特色为(长连接,支持断点续传,管道传输,新的字段如cache-control,Host字段)
  • 长连接(长连接,HTTP1.1增加Connection字段,对于同一个host,通过设置Keep-Alive保持HTTP连接不断。避免每次客户端与服务器请求都要重复建立释放建立TCP连接。提高了网络的利用率。如果客户端想关闭HTTP连接,可以在请求头中携带Connection:false来告知服务器关闭请求。(长连接会给服务器造成压力)
  • 断点续传(通过使用请求头中的 Range 来实现)
  • 管道传输(可以使用管道传输,多个请求可以同时发送,但是服务器还是按照顺序,先回应 A 请求,完成后再回应 B 请求。要是 前面的回应特别慢,后面就会有许多请求排队等着。这称为「队头堵塞」)
  • HTTP2.0
  • HTTP2.0相比于HTTP1.1有很大改动,主要包括:
  • (1)它须搭配TLS1.2一起使用,也就是说它是HTTPS;
  • (2)HTTP2.0的头部和数据使用二进制表示,而不再是ASCII形式的文本;
  • (3)在一条连接内支持多条流并行,即多路复用(使用多个stream,每个stream又分帧传输,使得一个tcp连接能够处理多个http请求);
  • (4)首部压缩(双方各自维护一个header的索引表,使得不需要直接发送值,通过发送key缩减头部大小);
  • (5)服务端主动推送,HTTP2.0 允许服务器未经请求,主动向客户端发送资源。

2、URL

  • URL全称:Uniform Resource Locator统一资源定位器
  • URL一般由五部分组成:
  • 如(https://www.baidu.com/)
  • 1、协议:HTTP、HTTPS、SVN、SSH、FTP协议等
  • 2、主机地址:可以是IP地址,也可以IP地址对应的域名地址
  • 3、端口号:HTTP协议默认80端口,HTTPS协议默认443端口,FTP协议默认21端口等(如若是默认协议,端口号可以省略)
  • 4、资源地址:带层次的文件路径
  • 5、参数:以?开头,以&符号做分隔符

2、HTTPS是什么?

  • HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层(SSL/TLS)
  • HTTP是明文传输, 本来要传什么,实际上就传了什么,但是一旦这样传输,在传输的过程中, 被第三方截获到了,就可能造成信息泄露。于是引入了 HTTPS在HTTP基础上进行了加密,进一步的保护了用户的信息安全

加密方式:

  • 1、对称加密:简单说就是有一个密钥,它可以加密一段信息,也可以对加密后的信息进行解密,和我们日常生活中用的钥匙作用差不多。
  • 缺点:当客户端把密钥进行明文传输的时候,也可能被别人截获,再次发送密文,别人就可以通过密钥获取到明文,那此时的加密就没什么作用了(解决办法: 对密钥进行加密传输)
  • 2、非对称加密:简单说就是有两把密钥,通常一把叫做公钥、一把叫私钥,用公钥加密的内容必须用私钥才能解开,同样,私钥加密的内容只有公钥能解开。公钥和私钥是配对的. 最大的缺点就是运算速度非常慢,比对称加密要慢很多
  • 缺点:可能获取到的公钥就是假的。(解决办法:引入数字证书)
  • 3、数字证书:网站在使用HTTPS前,需要向CA机构申领一份数字证书,数字证书里含有证书持有者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明“该公钥对应该网站”。
  • 缺点:证书本身的传输过程中,容易被篡改
  • 解决办法:客户端获取到这个证书之后, 对证书进行校验(防止证书是伪造的)。
  • 1、判定证书的有效期是否过期
  • 2、判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构)
  • 3、验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为 hash2. 对比 hash1 和 hash2 是否相等.如果相等, 则说明证书是没有被篡改过的
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-12 16:42:19  更:2022-05-12 16:42:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:21:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码