浅谈《图解HTTP》

感悟

滑至尾页的那一刻,内心突兀的涌来一阵畅快的感觉。如果说从前对互联网只是懵懵懂懂,但此刻却觉得她是如此清晰而可爱的呈现在哪里。

介绍中说,《图解HTTP》适合作为第一本网络协议书。确实,它就像一座桥梁,连接了 "零基础" 与 "系统性学习",对入门者及其友好。

不过,从辩证的角度来看,这毕竟是十年前的老书了,HTTP早以更新至HTTP/3,而本书是以HTTP/1.1为核心讲解,多少让人有点遗憾。不过好在,该有的知识点,还都有( •̀ ω •́ )✧

核心知识点

  • 系统的讲解了 HTTP/1.1 协议核心内容:
    • 报文格式(请求行、首部字段、实体主体)
    • 状态码(如200、404、503)
    • 缓存机制(Cache-Control、ETag)
    • Cookie与会话管理
  • 对HTTP加密原理(SSL/TLS握手、混合加密机制)的简化解释足够清晰。

当然,我写这篇博客的意义不是为了赞美或批评《图解HTTP》。接下来,我会把大纲列出,用最白的话,来叙述每章大致内容,方便日后浏览、复习。

总览大纲


一、了解Web及网络

1、使用HTTP协议访问Web:

客户端与服务器端之间 在遵守一个叫HTTP协议的规范前提下,进行交流。

2、HTTP的诞生:

早期,世界各地知识分子为了共享知识,于是诞生了Web。以HTML(SGML标准通用标记语言)、HTTP(文档传递协议)、URL(指定文档所在地址的统一资源定位符)为基础形成了WWW(World Wide Web,万维网)。

3、网络基础TCP/IP:

TCP/IP也就是TCP/IP协议族,HTTP是它内部的一个子集。TCP/IP按层次分可分为四层:应用层(HTTP·主要)、传输层(TCP·主要)、网络层(IP·主要)、链路层(网络·主要)。

4、与HTTP关系密切的协议:IP、TCP和DNS:

IP协议(包括 IP地址、MAC地址)为寻找到传输目的地而存在。

TCP协议,功能有:为建立连接,实现三次握手(SYN、SYN/ACK、ACK)。将大块数据分割成以报文段等。

5、负责域名解析的DNS服务:

计算机适合辨别二进制,而人适合记忆字母。所以在为主机名和域名赋名时,用字母。在查找对应计算机时,通过DNS将对应字母转化为二进制。

6、各种协议与HTTP协议的关系:

大致是相互配合,传递信息。

HTTP协议生成报文->TCP协议切割->IP协议进行传递中转->TCP协议组装->HTTP协议响应

7、URI与URL:

URI(统一资源标识符)、URL(统一资源定位符)。

其中URL是URI的子集。

URI格式:


二、简单的HTTP协议

1、HTTP协议用于客户端和服务器之间的通讯:

请求的一端是客户端,响应的一端是服务器端。通信时两者皆存在,两者身份可互换。

2、通过请求和响应的交换达成通信:

字面意思,你问他要,并且他给你了,代表你俩交流成功。

3、HTTP是不保存状态的协议:

简而言之,客户端与服务器端都有健忘症,他俩都不记得曾经说过啥,也就是不论发多少个http协议,双方都记不住。

4、请求URI定位资源:

互联网上的所有资源都被URI打了个标记,就相当与你家的地址,只要知道URI就能找到资源所在地。

5、告知服务器意图的HTTP方法

GET、POST、PUT、HEAD、DELETE、OPTIONS、TRACE、CONNECT、LINK、UNLINE等

重点:大写

6、使用方法下达命令:

其中,有三个较为常用:

7、持久连接节省通信量:

每次通信都需要TCP连接,完毕后在断开。大规模通信情况下,会极大的增加开销。于是就找了个持久的通道。

8、使用Cookie的状态管理:

前面不是说,服务器与客户端健忘吗,记不住曾经发过的http协议。于是搞了个备忘录,起名叫Cookie,专门用来提醒对方。


三、HTTP报文内的HTTP信息

1、HTTP报文:

应用层通过http协议生成的。

结构为:报文首部、报文主体。两部分通过 空行(CR+LF) 分割开。

2、请求报文及响应报文的结构:

3、编码提升传输效率:

就是传输的数据太大,压缩一下在传输。就像用微信传输时,一般先压缩为zip格式,在发送。

4、发送多种数据的多部份对象集合:

这里的多部分对象为:文本、图片、音频等,需要在传输时划分开。

5、获取部分内容的范围请求:

举个简单的例子,在网上下载东西时,总是1%、1%的下载,每次只申请百分之一的资源。

既能防止一次性传输内容过大,而且能在突然断网后,在联网之后知道从哪里重新申请资源。

6、内容协商返回最合适的内容:

相当于,你申请过来了一个网站的大概框架,里面数据返回的具体内容,是中文还是其他语言,是经过辨别你发的请求后给出的。


四、返回结构的HTTP状态码

1、状态码告知从服务器端返回的请求结果:

通过状态码,你能知道你发出的请求是正确还是错误。她就相当于反馈。

2、2XX 成功:

  • 200 OK
  • 204 No Content
  • 206 Partial Content

3、3XX 重定向:

  • 301 Moved Permanently
  • 302 Found
  • 303 See Other
  • 304 Not Modified
  • 307 Temporary Redirect

4、4XX 客户端错误:

  • 400 Bad Request
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found

5、5XX 服务器错误:

  • 500 Internal Server Error
  • 503 Service Unavailable

五、与HTTP写作的Web服务器

1、用单台虚拟主机实现多个域名:

相当于厉害点的人格分裂症、这个人还顶聪明。有一个主人格,并且能有意识的切换人格。

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

代理:相当于中间人角色,你拿不了的东西,让代理替你拿,在交给你。(VPN)

网关:让不同协议之间通信,功能上类似代理。

隧道:使用 SSL 加密手段建立的一个通信线路

3、保存资源的缓存:

缓存是指代理服务器或客户端本地磁盘内保存的资源副本。再次请求时,如果缓存中有,就可以直接用,而不用,在向服务器发出请求。


六、HTTP首部

1、HTTP报文首部:

前面已经看过了(三-2)分为:请求报文首部与响应报文首部。

2、HTTP首部字段

分别就是下方的3、4、5、6。

通用首部字段、请求首部字段、响应首部字段、实体首部字段。

3、HTTP/1.1 通用首部字段

通用首部字段是指,请求报文和响应报文双方都会使用的首部。

4、请求首部字段

请求首部字段是从客户端往服务器端发送请求报文中所使用的字段, 用于补充请求的附加信息、客户端信息、对响应内容相关的优先级等 内容。

5、响应首部字段

响应首部字段是由服务器端向客户端返回响应报文中所使用的字段, 用于补充响应的附加信息、服务器信息,以及对客户端的附加要求等 信息。

6、实体首部字段

实体首部字段是包含在请求报文和响应报文中的实体部分所使用的首部,用于补充内容的更新时间等与实体相关的信息。

7、为Cookie服务的首部字段

8、其他首部字段

HTTP 首部字段是可以自行扩展的。所以在 Web 服务器和浏览器的应 用上,会出现各种非标准的首部字段。


七、确保Web安全的HTTPS

1、HTTP的缺点:

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

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

简单来说就是:HTTP协议+SSL/TLS协议+有信誉的认证公司+确保发送的信息是完整的=HTTPS

φ(* ̄0 ̄)。所以HTTPS就是,穿上了安全服的HTTP。


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

1、何为认证:

简单点说,就是计算机本身无法判断坐在显示器前的使用者的身份。所以需要类似账号密码的认证。

2、BASIC认证:

就是简单的账号、密码认证,虽被Base64编码,但是在传输过程中几乎仍为明文传输,容易被监听窃取。

3、DIGEST认证:

为弥补 BASIC 认证存在的弱点,从 HTTP/1.1 起就有了 DIGEST 认证。 DIGEST 认证同样使用质询 / 响应的方式 (challenge/response),但不会像 BASIC 认证那样直接发送明文密码。但仍然无法从根本上解决问题。

4、SSL客户端认证:

SSL是凭借着,证书进行认证。相当于你找了个担保人。但实际操作可远不止这么简单,具体去下方链接了解一下吧( ̄︶ ̄)↗ 

5、基于表单认证:

简而言之,就是用户通过表单提交账号密码,服务器验证身份后授权访问。


九、基于HTTP的功能

1、基于HTTP的协议:

这个小节的大概意思是,Web长大了,http配不上了,但又因为抛弃不了http。所以就给http,又扩展了些新功能,让他适应Web。

2、消除HTTP瓶颈的SPDY:

SPDY通过多路复用、头部压缩和服务器推送降低延迟,提升了加载速度。

3、使用浏览器进行全双工通信的WebSocket:

WebSocket全双工通信的大致流程为:1. 客户端发起HTTP升级请求(Upgrade: websocket),服务端响应101状态码切换协议;2. TCP连接保持,双方通过数据帧实时双向通信;3. 数据以消息形式传输,无需重复握手;4. 任一端可发送关闭帧终止连接,实现低延迟双向通信。

4、期盼已久的HTTP/2.0

HTTP/2.0 的目标是改善用户在使用 Web 时的速度体验。

5、Web服务器管理文件的WebDAV

WebDAV(Web-based Distributed Authoring and Versioning,基于万维网 的分布式创作和版本控制)是一个可对 Web 服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统。

除了创建、删除文件等基本功能,它还具备文件创建者管理、文件编辑过程中禁止其他用户内容覆盖的加锁功能,以及对文件内容修改的 版本控制功能。

简而言之,WebDAV 是用于 Web 服务器管理文件的扩展协议,支持多种文件操作。


十、构建Web内容的技术

1、HTML:

HTML(HyperText Markup Language,超文本标记语言)是为了发送 Web 上的超文本(Hypertext)而开发的标记语言。

超文本是一种文档 系统,可将文档中任意位置的信息与其他信息(文本或图片等)建立 关联,即超链接文本。

标记语言是指通过在文档的某部分穿插特别的 字符串标签,用来修饰文档的语言。我们把出现在 HTML 文档内的 这种特殊字符串叫做 HTML 标签(Tag)。

2、动态HTML:

所谓动态 HTML(Dynamic HTML),是指使用客户端脚本语言将静 态的 HTML 内容变成动态的技术的总称。鼠标单击点开的新闻、 Google Maps 等可滚动的地图就用到了动态 HTML。

动态 HTML 技术是通过调用客户端脚本语言 JavaScript,实现对 HTML 的 Web 页面的动态改造。利用 DOM(Document Object Model,文档对象模型)可指定欲发生动态变化的 HTML 元素。

3、Web应用:

Web 应用是指通过 Web 功能提供的应用程序。

4、数据发布格式及语言:

里面有可拓展的标记语言XML,具有信息聚合功能的RSS,轻量级数据标记语言JSON


十一、Web的攻击技术

1、针对Web的攻击技术:

攻击分为主动攻击(主动出击)与被动攻击(诱导用户自己掉进陷阱)两种。

2、因输出值转义不完全引发的安全漏洞:

意如其名,问题就出在了转义上。

3、因设置或设计上的缺陷引发的安全漏洞:

一般有强制浏览、不正确的错误消息处理、开放重定向等。

4、因会话管理疏忽引发的安全漏洞:

会话管理是用来管理用户状态的必备功能,但是如果在会话管理上有 所疏忽,就会导致用户的认证状态被窃取等后果。

5、其他安全漏洞:

一般有密码破解、点击劫持、DoS 攻击、后门程序等。


到这里基本结束,如有错,请及时私信,必会接纳。( •̀ ω •́ )✧


参考书籍:

《图解HTTP》


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/68960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Alibaba开发规范_异常日志之日志规约:最佳实践与常见陷阱

文章目录 引言1. 使用SLF4J日志门面规则解释代码示例正例反例 2. 日志文件的保存时间规则解释 3. 日志文件的命名规范规则解释代码示例正例反例 4. 使用占位符进行日志拼接规则解释代码示例正例反例 5. 日志级别的开关判断规则解释代码示例正例反例 6. 避免重复打印日志规则解释…

自动化软件测试的基本流程

一、自动化测试的准备 1.1 了解测试系统 首先对于需要测试的系统我们需要按照软件需求说明书明确软件功能。这里以智慧养老系统作为案例进行测试,先让我们看看该系统的登录界面和用户管理界面。 登录界面: 登录成功默认界面: 用户管理界面…

Windows电脑本地部署运行DeepSeek R1大模型(基于Ollama和Chatbox)

文章目录 一、环境准备二、安装Ollama2.1 访问Ollama官方网站2.2 下载适用于Windows的安装包2.3 安装Ollama安装包2.4 指定Ollama安装目录2.5 指定Ollama的大模型的存储目录 三、选择DeepSeek R1模型四、下载并运行DeepSeek R1模型五、常见问题解答六、使用Chatbox进行交互6.1 …

计算机网络中常见高危端口有哪些?如何封禁高危端口?

保障网络安全,从封禁高危端口开始! 在计算机网络中,端口是设备与外界通信的“大门”,但某些端口因常被黑客利用而成为高危入口。封禁这些端口是防御网络攻击的关键一步。本文将详解 10个常见高危端口,并提供多平台封禁…

CommonJS

CommonJS 是由 JavaScript 社区于 2oo9 年提出的包含模块、文件、IO、控制台在内的一系列标准。Node.js 的实现中采用了 CommonJS 标准的一部分,并在其基础上进行了一些调整。我们所说的 CommonJS 模块和 Node.js 中的实现并不完全一样,现在一般谈到 Com…

[SAP ABAP] ABAP SQL跟踪工具

事务码ST05 操作步骤 步骤1:使用事务码ST05之前,将要检测的程序生成的页面先呈现出来,这里我们想看下面程序的取数操作,所以停留在选择界面 步骤2: 新建一个GUI窗口,输入事务码ST05,点击 Acti…

蓝桥杯备考:高精度算法之除法

我们除法的高精度其实也不完全是高精度,而是一个高精度作被除数除以一个低精度 模拟我们的小学除法 由于题目中我们的除数最大是1e9,当它真正是1e9的时候,t是有可能超过1e9的,所以要用long long

算法竞赛(Python)-堆栈

文章目录 一 基础知识二 题目有效的括号字符串解码 一 基础知识 堆栈(Stack):简称为栈。一种线性表数据结构,是一种只允许在表的一端进行插入和删除操作的线性表。   我们把栈中允许插入和删除的一端称为 「栈顶(top…

SpringBoot 中的测试jar包knife4j(实现效果非常简单)

1、效果图 非常快的可以看见你实现的接口 路径http://localhost:8080/doc.html#/home 端口必须是自己的 2、实现效果 2.1、导入jar包 <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-openapi3-jakarta-spring-boot-star…

16.1.STM32F407ZGT6-CAN基础概念

参考&#xff1a; https://blog.csdn.net/sunlight_vip/article/details/128639144 前言&#xff1a; 学习总结CAN的知识点&#xff1a; 1.can是什么&#xff0c;历史由来和背景 2.can的物理层&#xff0c;链路层 3.初始化的流程和关键点 4.波特率怎么设置 5.can id怎么过滤 6…

Linux环境下的Java项目部署技巧:Nginx 详解

Nginx 的启动 Nginx 启动会生成 2 个进程&#xff1a;主进程与守护进程 主进程&#xff1a;常用于提供反向代理服务。特点&#xff1a;占内存大守护进程&#xff1a;防止主进程以外关闭。特点&#xff1a;占内存小 Nginx 启动需要占用 80 端口: 当 Ngnix 启动失败时&#xff0…

【Pytorch和Keras】使用transformer库进行图像分类

目录 一、环境准备二、基于Pytorch的预训练模型1、准备数据集2、加载预训练模型3、 使用pytorch进行模型构建 三、基于keras的预训练模型四、模型测试五、参考 现在大多数的模型都会上传到huggface平台进行统一的管理&#xff0c;transformer库能关联到huggface中对应的模型&am…

relational DB与NoSQL DB有什么区别?该如何选型?

Relational Database(关系型数据库,简称RDB)与NoSQL Database(非关系型数据库)是两类常见的数据库类型。它们在设计理念、数据存储方式、性能优化、扩展性等方面有许多差异。下面我们将会详细分析它们的区别,以及如何根据应用场景进行选型。 一、数据模型的区别 关系型…

Flutter常用Widget小部件

小部件Widget是一个类&#xff0c;按照继承方式&#xff0c;分为无状态的StatelessWidget和有状态的StatefulWidget。 这里先创建一个简单的无状态的Text小部件。 Text文本Widget 文件&#xff1a;lib/app/app.dart。 import package:flutter/material.dart;class App exte…

智能小区物业管理系统推动数字化转型与提升用户居住体验

内容概要 在当今快速发展的社会中&#xff0c;智能小区物业管理系统的出现正在改变传统的物业管理方式。这种系统不仅仅是一种工具&#xff0c;更是一种推动数字化转型的重要力量。它通过高效的技术手段&#xff0c;将物业管理与用户居住体验紧密结合&#xff0c;无疑为社区带…

给AI加知识库

1、加载 Document Loader文档加载器 在 langchain_community. document_loaders 里有很多种文档加载器 from langchain_community. document_loaders import *** 1、纯文本加载器&#xff1a;TextLoader&#xff0c;纯文本&#xff08;不包含任何粗体、下划线、字号格式&am…

游戏引擎 Unity - Unity 设置为简体中文、Unity 创建项目

Unity Unity 首次发布于 2005 年&#xff0c;属于 Unity Technologies Unity 使用的开发技术有&#xff1a;C# Unity 的适用平台&#xff1a;PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域&#xff1a;开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…

小红的小球染色期望

B-小红的小球染色_牛客周赛 Round 79 题目描述 本题与《F.R小红的小球染色期望》共享题目背景&#xff0c;但是所求内容与范围均不同&#xff0c;我们建议您重新阅读题面。 有 n 个白色小球排成一排。小红每次将随机选择两个相邻的白色小球&#xff0c;将它们染成红色。小红…

ASP.NET Core与配置系统的集成

目录 配置系统 默认添加的配置提供者 加载命令行中的配置。 运行环境 读取方法 User Secrets 注意事项 Zack.AnyDBConfigProvider 案例 配置系统 默认添加的配置提供者 加载现有的IConfiguration。加载项目根目录下的appsettings.json。加载项目根目录下的appsettin…

Redis集群理解以及Tendis的优化

主从模式 主从同步 同步过程&#xff1a; 全量同步&#xff08;第一次连接&#xff09;&#xff1a;RDB文件加缓冲区&#xff0c;主节点fork子进程&#xff0c;保存RDB&#xff0c;发送RDB到从节点磁盘&#xff0c;从节点清空数据&#xff0c;从节点加载RDB到内存增量同步&am…