一、简单的HTTP协议

(一) HTTP 特点

  1. 无状态:HTTP 协议自身不具备保存之前发送过的请求或响应的功能,有了 Cookie 再用 HTTP 协议通信,就可以管理状态了。
  2. 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。
  3. 基于请求和响应:在两台计算机之间使用 HTTP 协议通信时,在一条通信线路上必定有一端是客户端,另一端则是服务器端。请求必定由客户端发出,而服务器端回复响应,服务器端在没有接收到请求之前不会发送响应。
  4. 简单快速、灵活
  5. 通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性

(二) 告知服务器意图的 HTTP 方法

二、HTTP 报文内的 HTTP 信息

HTTP 报文大致可分为报文首部和报文主体两块。两者由最初出现的 空行(CR+LF)来划分。通常,并不一定要有报文主体。

(一) 请求报文

请求报文是由请求方法、请求 URI、协议版本、可选的请求首部字段和内容实体构成的。

(二) 响应报文

响应报文由协议版本、状态码、原因短语、可选的响应首部字段以及实体主体构成。

(三) 编码提升传输速率

  1. HTTP 在传输数据时可以按照数据原貌直接传输,但也可以在传输过程中通过编码提升传输速率。通过在传输时编码,能有效地处理大量 的访问请求。但是,编码的操作需要计算机来完成,因此会消耗更多的 CPU 等资源。

  2. 压缩传输的内容编码:

    内容编码指明用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。常用的内容编码有以下几种:gzip(GNU zip),compress(UNIX 系统的标准压缩),deflate(zlib),identity(不进行编码)。

  3. 分割发送的分块传输编码:

    在 HTTP 通信过程中,请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求页面。在传输大容量数据时,通过把数据分割成 多块,能够让浏览器逐步显示页面。

(四) 发送多种数据的多部分对象集合

  1. HTTP 协议中采纳了多部分对象集合,发送的一份报文主体内可含有多类型实体。通常是在图片或文本文件等上传时使用。
  2. 多部分对象集合包含的对象如下:
  • multipart/form-data:在 Web 表单文件上传时使用。
  • multipart/byteranges:状态码 206(Partial Content,部分内容)响应报文包含了多个范围的内容时使用。
  1. 在 HTTP 报文中使用多部分对象集合时,需要在首部字段里加上Content-type。

(五) 获取部分内容的范围请求

  1. 所谓恢复是指能从之前下载中断处恢复下载,要实现该功能需要指定下载的实体范围。指定范围发送的请求叫做范围请求(Range Request)。
  2. 执行范围请求时,会用到首部字段 Range 来指定资源的 byte 范围。
  3. 针对范围请求,响应会返回状态码为 206 Partial Content 的响应报文。另外,对于多重范围的范围请求,响应会在首部字段 Content- Type 标明 multipart/byteranges 后返回响应报文。
  4. 如果服务器端无法响应范围请求,则会返回状态码 200 OK 和完整的实体内容。

(六) 内容协商返回最合适的内容

  1. 当浏览器的默认语言为英语或中文,访问相同 URI 的 Web 页面时,则会显示对应的英语版或中文版的 Web 页面。这样的机制称为内容协商(Content Negotiation)。
  2. 内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。
  3. 内容协商技术有以下 3 种类型。
  • 服务器驱动协商:由服务器端进行内容协商。以请求的首部字段为参考,在服务器端自动处理。但对用户来说,以浏览器发送的信息作为判定的依据,并不一定能筛选出最优内容。
  • 客户端驱动协商:由客户端进行内容协商的方式。用户从浏览器显示的可选项列表中手动选择。还可以利用 JavaScript 脚本在 Web 页面上自动进行上述选择。比如按 OS 的类型或浏览器类型,自行切换成 PC 版页面或手机版页面。
  • 透明协商:是服务器驱动和客户端驱动的结合体,是由服务器端和客户端各自进行内容协商的一种方法。

三、HTTP 状态码

转载自精读《图解HTTP》:https://juejin.im/post/5b32f82a518825749e4a218b

四、与 HTTP 协作的 Web 服务器

(一) 用单台虚拟主机实现多个域名

HTTP/1.1 规范允许一台 HTTP 服务器搭建多个 Web 站点,即使物理层面只有一台服务器,但只要使用虚拟主机的功能,则可以 假想已具有多台服务器。

(二) 通信数据转发程序 :代理、网关、隧道

  1. 代理:代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。
  2. 网关:网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。
  3. 隧道:隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。

(三) 保存资源的缓存

  1. 缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问,因此也就节省了通信流量和通信时间。
  2. 即使存在缓存,也会因为客户端的要求、缓存的有效期等因素,向源服务器确认资源的有效性。若判断缓存失效,缓存服务器或浏览器将会再次从源服务器上获取“新”资源。

五、HTTP 首部

HTTP 首部字段根据实际用途被分为以下 4 种类型。

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

(一) HTTP 首部

(二) 非 HTTP/1.1 首部字段

在 HTTP 协议通信交互中使用到的首部字段,不限于 RFC2616 中定 义的 47 种首部字段。还有 Cookie、Set-Cookie 和 Content-Disposition 等在其他 RFC 中定义的首部字段,它们的使用频率也很高。 这些非正式的首部字段统一归纳在 RFC4229 HTTP Header Field Registrations 中。

(三) End-to-end 首部和 Hop-by-hop 首部

  1. 端到端首部(End-to-end Header):分在此类别中的首部会转发给请求 / 响应对应的最终接收目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发。

  2. 逐跳首部(Hop-by-hop Header):分在此类别中的首部只对单次转发有效,会因通过缓存或代理而不再转发。HTTP/1.1 和之后版本中,如果要使用 hop-by-hop 首部,需提供 Connection 首部字段。

  3. 除这 8 个首部字段之外, 其他所有字段都属于端到端首部。

    Connection,Keep-Alive,Proxy-Authenticate,Proxy-Authorization,Trailer,TE,Transfer-Encoding,Upgrade

(四) 为 Cookie 服务的首部字段

  1. HTTP 是无状态协议,它不对之前发生过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。
  2. Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。
  3. 当下次客户端再往该服务器 发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。
  4. 服务器端发现客户端发送过来的 Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

六、确保 Web 安全的 HTTPS

(一) HTTP 的缺点

  1. HTTP 报文使用明文(不加密),内容可能会被窃听。
  2. HTTP 协议中的请求和响应不会对通信方进行确认,不验证“服务器是否就是发送请求中 URI 真正指定的主机,返回的响应是否真的 返回到实际提出请求的客户端”,有可能遭遇伪装。
  3. HTTP 协议无法证明通信的报文完整性,在请求或响应送出之后直到对方接收之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉。换句话说,没有任何办法确认,发出的请求 / 响应和接收到的请求 / 响应是前后相同的。

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

  1. 内容加密:采用混合加密技术,中间者无法直接查看明文内容
  2. 验证身份:通过证书认证客户端访问的是自己的服务器
  3. 保护数据完整性:防止传输的内容被中间人冒充或者篡改

七、确认访问用户身份的认证

判断访问服务器的使用者的身份。

(一) BASIC 认证(基本认证)

使用用户的 ID/密码作为凭证信息,并且使用 base64 算法进行编码。

(二) DIGEST 认证(摘要认证)

服务器端以nonce进行质询,客户端以用户名,密码,nonce,HTTP方法,请求的URI等信息为基础产生的response信息进行认证的方式。

(三) SSL 客户端认证

SSL 客户端认证是借由 HTTPS 的客户端证书完成认证的方式。凭借客户端证书认证,服务器可确认访问是否 来自已登录的客户端。

(四) FormBase 认证(基于表单认证)

客户端会向服务 器上的 Web 应用程序发送登录信息(Credential),按登录信息的验证结果认证。

八、基于 HTTP 的功能追加协议

(一) SPDY

  1. 多路复用流

    通过单一的 TCP 连接,可以无限制处理多个 HTTP 请求。所有请求的处理都在一条 TCP 连接上完成,因此 TCP 的处理效率得到提高。

  2. 赋予请求优先级

    SPDY 不仅可以无限制地并发处理请求,还可以给请求逐个分配优先级顺序。这样主要是为了在发送多个请求时,解决因带宽低而导致响 应变慢的问题。

  3. 压缩 HTTP 首部

    压缩 HTTP 请求和响应的首部。这样一来,通信产生的数据包数量和 发送的字节数就更少了。

  4. 推送功能

    支持服务器主动向客户端推送数据的功能。这样,服务器可直接发送 数据,而不必等待客户端的请求。

  5. 服务器提示功能

    服务器可以主动提示客户端请求所需的资源。由于在客户端发现资源之前就可以获知资源的存在,因此在资源已缓存等情况下,可以避免发送不必要的请求。

  6. 只是将单个域名( IP 地址)的通信多路复用,所以当一个 Web 网站上使用多个域名下的资源,改善效果就会受到限制。

(二) WebSocket

  1. 推送功能

    支持由服务器向客户端推送数据的推送功能。这样,服务器可直接发 送数据,而不必等待客户端的请求。

  2. 减少通信量

    只要建立起 WebSocket 连接,就希望一直保持连接状态。和 HTTP 相比,不但每次连接时的总开销减少,而且由于 WebSocket 的首部信息 很小,通信量也相应减少了。

(三) HTTP/2.0

  1. 二进制分帧:将所有传输信息分割为更小的消息和帧,并对它们采用二进制格式的编码将其封装。
  2. 首部压缩:首部表来跟踪和存储之前发送的键值对。
  3. 流量控制:HTTP 2.0 利用流来实现多路复用,这引入了对TCP连接的使用争夺,会造成流被阻塞。流量控制方案确保在同一连接上的多个流之间不会造成破坏性的干扰。流量控制会用于各个独立的流,也会用于整个连接。
  4. 多路复用:允许通过单一的HTTP 2.0连接发起多重的请求-相应消息。
  5. 请求优先级:优先值确定着客户端跟服务器处理不同的流采取不同的优先级策略,高优先级优先发送。
  6. 服务器推送:服务器可以对一个客户端请求发送多个响应。服务器向客户端推送资源无需客户端明确的请求。

(四) WebDAV

WebDAV是一个可对 Web 服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统。除了创建、删除文件等基本功能,它还具备文件创建者管理、文件编辑过程中禁止其他用户内容覆盖的加锁功能,以及对文件内容修改的版本控制功能。

九、Web 的攻击技术

(一) 因输出值转义不完全引发的安全漏洞

1. 跨站脚本攻击

跨站脚本攻击(Cross-Site Scripting,XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。

  1. 对输入和URL参数进行过滤,将容易导致XSS攻击的边角字符替换成全角字符。

  2. 对输出进行编码,对所有要动态输出到页面的内容,通通进行相关的编码和转义。

2. 跨站脚本攻击

SQL 注入(SQL Injection)是指针对 Web 应用使用的数据库,通 过运行非法的 SQL 而产生的攻击。该安全隐患有可能引发极大 的威胁,有时会直接导致个人信息及机密信息的泄露。

3. 跨站脚本攻击

OS 命令注入攻击(OS Command Injection)是指通过 Web 应用,执行非法的操作系统命令达到攻击的目的。只要在能调用 Shell 函数的地方就有存在被攻击的风险。

4. 跨站脚本攻击

HTTP 首部注入攻击(HTTP Header Injection)是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。

5. 跨站脚本攻击

目录遍历(Directory Traversal)攻击是指对本无意公开的文件目录, 通过非法截断其目录路径后,达成访问目的的一种攻击。

6. 跨站脚本攻击

远程文件包含漏洞(Remote File Inclusion)是指当部分脚本内容需要 从其他文件读入时,攻击者利用指定外部服务器的 URL 充当依赖文 件,让脚本读取之后,就可运行任意脚本的一种攻击。

(二) 因设置或设计上的缺陷引发的安全漏洞

1. 强制浏览

强制浏览(Forced Browsing)安全漏洞是指,从安置在 Web 服务器 的公开目录下的文件中,浏览那些原本非自愿公开的文件。

2. 不正确的错误消息处理

不正确的错误消息处理(Error Handling Vulnerability)的安全漏洞是指,Web 应用的错误信息内包含对攻击者有用的信息。

3. 开放重定向

开放重定向(Open Redirect)是一种对指定的任意 URL 作重定向跳转的功能。

(三) 因会话管理疏忽引发的安全漏洞

1. 会话劫持

会话劫持(Session Hijack)是指攻击者通过某种手段拿到了用户的会 话 ID,并非法使用此会话 ID 伪装成用户,达到攻击的目的。

2. 会话固定攻击

会话固定攻击(Session Fixation)会强制用户使用攻击者指定的会话 ID。

3. 跨站点请求伪造

跨站点请求伪造(Cross-Site Request Forgeries,CSRF)攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信 息或设定信息等某些状态更新。

  1. 客户端防范:对于数据库的修改请求,全部使用POST提交,禁止使用GET请求。
  2. 服务器端防范:一般的做法是在表单里面添加一段隐藏的唯一的token(请求令牌)。

(四) 其他安全漏洞

1. 密码破解

密码破解攻击(Password Cracking)即算出密码,突破认证。

2. 点击劫持

点击劫持(Clickjacking)是指利用透明的按钮或链接做成陷阱,覆盖在 Web 页面之上。然后诱使用户在不知情的情况下,点击那个链接 访问内容的一种攻击手段。

3. DoS 攻击

DoS 攻击(Denial of Service attack)是一种让运行中的服务呈停止状态的攻击。

4. 后门程序

后门程序(Backdoor)是指开发设置的隐藏入口,可不按正常步骤使 用受限功能。利用后门程序就能够使用原本受限制的功能。

转载于:https://juejin.im/post/5d009cf46fb9a07ecc447dae

计算机网络和HTTP协议:HTTP篇相关推荐

  1. 计算机网络11种协议报文格式

    文章目录 TCP UDP IP IPV6 IPSec 以太网帧结构 802.1Q以太网帧结构 802.11无线链路帧 SSL记录 RTP实时传输协议 OpenFlow流表 参考 TCP 源端口号和目的 ...

  2. 前端需要了解的计算机网络知识, 这一篇就够了!(图文并茂,万字长文!)

    作者:lio-mengxiang 原文链接:https://juejin.im/post/5e51febde51d4526c932b390 本文主要目的也是为了非科班前端补充计算机科班基础知识,比如你 ...

  3. 计算机网络实验arp协议分析,计算机网络ARP地址协议解析实验报告

    计算机网络ARP地址协议解析实验报告 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 计算机网络实验报告.实验目的:1. 掌握ARP协议 ...

  4. 计算机网络选择重传,计算机网络选择重传协议实验报告..docx

    计算机网络选择重传协议实验报告. <计算机网络>选择重传协议实验报告1.实验内容和实验环境描述实验内容:利用所学数据链路层原理,设计一个滑动窗口协议,在仿真环境下编程实现有噪音信道环境下两 ...

  5. 计算机网络协议的特点,计算机网络传输层协议类型与特点

    我们在上文中给大家简单介绍了计算机网络体系的七层结构,而今天我们就一起来了解一下,计算机网络传输层协议类型与特点. 传输层涉及到两个重要的协议:UDP和TCP,本节我们重点介绍这两个协议. 1.UDP ...

  6. 计算机网络体系结构及协议

    第3章 计算机网络体系结构及协议 3.4 网络层 网络层是OSI参考模型中的第三层,介于运输层和数据链中路层之间.它在数据路层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的数据通 信, ...

  7. 计算机网络协议ppt,计算机网络基础——TCP-IP协议.ppt

    计算机网络基础--TCP-IP协议.ppt (50页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.9 积分 第 4 章 TCP/IP协议栈*1069 ...

  8. 计算机网络【IP协议与以太网】

    计算机网络[IP协议与核心协议]

  9. 计算机网络各层协议说明及常见协议

    计算机网络协议,记录 目录 概念图 各层说明及协议 一.物理层(Physical Layer) 二.数据链路层(Datalink Layer) 三.网络层(Network Layer) 四.传输层(T ...

  10. 计算机网络与协议分析,计算机网络-使用网络协议分析器捕捉和分析协议数据包...

    <计算机网络-使用网络协议分析器捕捉和分析协议数据包>由会员分享,可在线阅读,更多相关<计算机网络-使用网络协议分析器捕捉和分析协议数据包(10页珍藏版)>请在人人文库网上搜索 ...

最新文章

  1. qtextbrowser 大量数据卡顿_800万行的数据,Excel 10秒钟就能完成统计?这个工具太良心了!...
  2. redis设置开机自启动
  3. 工作226:for循环逻辑
  4. Windows中导出电脑文件名或者文件结构的方法
  5. C++关键字this
  6. 巨人网络:已组建研发团队对元宇宙游戏开展自研探索
  7. mysql mongodb binlog_订阅MongoDB的数据变更比解析mysql的binlog更简单
  8. 程序员必备简捷开发辅助工具总结
  9. 百度网盘无需开会员也能享受高速下载通道
  10. EXCEL——处理大批量数据
  11. 前端五个拿来就能用的炫酷动画登录页面
  12. 将路由器当成交换机使用
  13. GB2312区位码、编码表与编码规则
  14. 跨境电商个人物品清单申报开发代码
  15. H3C交换机WEB管理时间_H3C 交换机之VLAN配置与VLAN间访问
  16. 夺命雷公狗---微信开发61----在线点播电影网2之电影网之个人中心
  17. 另一个视角看春节红包大战,为什么说智能云是百度第二增长引擎
  18. Android吃鸡 3dtouch,吃鸡主播为何不用3Dtouch技术操作?主播:只有新手才会用
  19. 用Easy UI快速搭建一个后台
  20. 如何处理授权和监督?

热门文章

  1. SAP资产负债表实现方案探索 - 基于 Excel-DNA 自定义函数方法
  2. 如何收集SparkSteaming运行日志实时进入kafka中
  3. 网络笔记:路由选路原则
  4. 钛灵科技入驻中国视界,共筑人工智能视觉产业新高地
  5. mvcnn代码详解_使用colab运行tensorflow版本的faster-rcnn
  6. 数独问题流程图_数独游戏的难度等级分析及求解算法研究
  7. 【C语言】第五章 - 操作符
  8. A870省电内核超频内核编译及制作
  9. Python 常用模块简介
  10. Mqtt精髓系列之精简之道