计算机网络(第六弹) --- 与 HTTP 有关的八个问题

news2025/8/10 13:31:48

当我们用浏览器打开一个网页时基本上都是基于 HTTP 协议来进行传输的, 其实用 APP 来打开一个界面看到的 APP 中的内容大概率也是基于 HTTP 协议传输的, 因此 HTTP 对于网络而言的重要性不言而喻!
HTTP 这个协议在传输层主要是基于 TCP 来实现的, TCP 是传输字节流的协议, 只是把数据按照字节来传输而已, 并没有传输一个 “结构化” 的数据, 而应用层协议就是将传输的字节流赋予一定的含义, 因此 HTTP 协议又可以认为是应用层协议中的典型代表.

HTTP

  • ❓❓❓问题一: HTTP 方法有哪些?
  • ❓❓❓问题二: GET 和 POST 的区别有哪些?
  • ❓❓❓问题三: 都知道哪些 HTTP 状态码?
  • ❓❓❓问题四: header 中都有什么? 解读
  • ❓❓❓问题五: 如何使用代码来构造 HTTP 请求(构造请求的方式)?
  • ❓❓❓问题六: HTTPS 与 HTTP 的区别?
  • ❓❓❓问题七: HTTPS 的传输过程? 为什么要有 HTTPS?
  • ❓❓❓问题八: 关于 URL

❓❓❓问题一: HTTP 方法有哪些?

  常用的方法有 GET 和 POST, 下文会进行详述; 不经常使用的还有以下几种:

  • HEAD: 用于获取报头, 查看状态码等;
  • PUT: 主要用于传输文件;
  • DELETE: 主要用来客户端指示服务端, 按照 URL 删除指定的资源;
  • OPTIONS: 用于查询支持的方法, 也就是用来查询针对请求 URL 指定资源支持的方法;
  • CONNECT: 此方法要求在与代理服务器通信的时候建立隧道, 并实现用隧道协议进行 TCP 通信;
  • TRACH: 主要针对客户端对请求消息传输路径的追踪, 此方法让 Web 服务器将之前的请求通信还给客户端的方法.

❓❓❓问题二: GET 和 POST 的区别有哪些?

HTTP 协议中的各种方法之间, 尤其是 GET 和 POST 之间是没有本质区别的, 但是在细节上还是有点区别, 如下:

  • 数据位置: GET 把自定义数据放到 query string, POST 把自定义数据放到 body;
  • 语义区别: GET 一般用于 “获取数据”, POST 一般用于提交数据;
  • 幂等性: GET 请求一般会设计成 “幂等” 的, POST 请求一般不要求设计成 “幂等”; 关于"幂等": 数学上的术语, 某个请求, 执行一次和执行多次没有什么区别, 如果能做到这一点就称之为 “幂等” 的;

补充: 关于上面的这几点区别, 其实并不是绝对的, 某些规则都是可以打破的, RFC 标准中并没有描述 URL 的长度, 也没有描述 body 的长度, 更何况 GET 也可以有 body, POST 也可以有 URL.

其实关于 get 和 post 的区别的理解, 网上的有些说法不能说是不对, 但是是不科学, 不准确的, 下面的 ❌ 仅仅代表不科学, 不代表是错的, 如下面的三种说法:

  • 说法一: GET 用于从服务器获取资源, POST 用于给服务器提交数据; ❌
    现在很少严格遵循这样的设计初衷, GET 和 POST 都可以用来获取资源或者是提交数据;
  • 说法二: GET 传输的数据量上限较小, URL 长度有限制, 而 POST 传输的数据量较大;❌
    随着技术的更新迭代, URL 的长度也由多年前的 1K - 2K 变的很长, 甚至可能有几个 M 的大小, 因此说法二也是不准确的说辞; 其实关于长度的上限是多少? 以什么标准为准, 要以 RFC 标准文档为准, 在 RFC 2616 标准, 对于 URL 的长度是没有做出限制的, 但是标准就是一份文件而已, 实际开发的时候是要遵守标准, 但是也得看别人是否要遵守这个标准, 现在我们用的 Chrome 浏览器就对此 URL 的长度支持非常长, 一般不用担心长度的问题; 总之, 传输数据量的多少, 完全取决于不同浏览器和不同服务器之间的实现区别;
  • 说法三: POST 比 GET 更安全; ❌
    其实 POST 的 “安全” 只是掩耳盗铃, 只是把密码等某些信息放到了 body 中, 这些信息不会出现在 URL 中, 也就是地址栏中, 可能对于普通用户是看不到的, 但是程序猿小白随便用 fiddler 抓个包可能就看到了, 安全与不安全和数据放在哪里没有任何关系, 要想安全那就得加密, 不加密放在哪来也不安全, 因此说法三也是不够科学;
  • 说法四: GET 只能传输文本数据, POST 可以传输二进制数据;❌
    关于传输数据类型, 虽然 GET 的 query string 无法直接传输二进制数据, 但是可以针对二进制数据进行 url encode; URL 里面一般是放文本, body 里面可以放文本, 也可以放二进制, GET 也可以有 body, 我们完全可以针对二进制数据进行 URL encode, 这样就可以把数据通过 URL 来传递了.

❓❓❓问题三: 都知道哪些 HTTP 状态码?

在这里插入图片描述

  • 403 Forbidden: 访问被拒绝, 因为没有权限, 很多涉及到用户名和密码的校验过程, 出现密码错误这类情况, 错误提示一般是 forbidden / access denied;
  • 500 Internal Server Error: 表示服务器挂了;
  • 302: 对于 302 这样的重定向响应来说, body 不是必需的, 这里的 body 就是一个简单的 HTML, 里面可能就只有一个 a 标签, 万一浏览器没有自动跳转, 那么用户手动点击此 a 标签也可以进行跳转; 如在登录界面输入用户名密码后, 如果密码错误, 在未登录的状态下访问一个私有项目, 则会报错 403, 现在用户名和密码正确了, 登录成功后就会自动跳转到这个项目里面; 浏览器就是根据 302 中的 Location 决定接下来去哪里.

❓❓❓问题四: header 中都有什么? 解读

header 里面就是一些键值对, 键值对和键值对之间使用 “换行” 来分割, 键和值之间使用 “冒号+空格” 来分割, header 中具体有多少行, 是不固定的, 具体是使用一个 “空行” 来作为分割标记.
在这里插入图片描述
补充: Location: http:// 127.x.x.1/xx, 浏览器看到 3xx 和 Location 就知道接下来要访问哪个地址了.

❓❓❓问题五: 如何使用代码来构造 HTTP 请求(构造请求的方式)?

在网页前端构造 HTTP 请求主要有 3 种方式, 如下:

  • 直接在浏览器中输入 URL, 构造一个 GET;
  • 使用 form 表单, 可以构造 GET 和 POST;
  • 使用 ajax, 可以构造各种请求;
    网络编程, 数据通过网络传输, 主要分为两个阶段, 先是等, 其次就是数据拷贝, ajax 可以在浏览器渲染页面的同时, 进行网络请求, 采用异步机制, 如果不这样, 那么浏览器要发起网络请求, 就会阻塞渲染页面的线程, 这样就会导致网络请求中的界面卡死!!!
  • 也可以通过 Java 代码, 基于其中的 Socket 来构造一个 HTTP 请求, 任何能够访问网络的语言, 都可以构造 HTTP 请求, 字符串拼接.

❓❓❓问题六: HTTPS 与 HTTP 的区别?

HTTP 和 HTTPS 都是应用层协议, 应用层的协议很多时候都需要我们自己来定制协议, 可以将 http 理解为一些大佬们已经定义好了的现成的协议, 协议的格式简单, 支持的扩展能力强, 因此我们程序猿可以在大佬们的基础上进行自定制, 以此达到节省开发成本的作用. 需要注意 http 协议是基于 TCP 来实现的.
  其实 HTTP 和 HTTPS 一个最直观地区别,如下图所示:
在这里插入图片描述

2022 年了, 现在大部分的网站基本都是 HTTPS, 浏览器也要求如果你不是 HTTPS 就会有一些提示, HTTPS 是要比 HTTP 更安全的, HTTP 是一个明文传输的协议, 本来要传的是啥, 实际穿的就是啥, 一旦传输的过程中数据被第三方获取到了, 可能就会造成一些重要信息的泄露, HTTPS 就是在 HTTP 的基础之上, 引入了一个加密层(SSL/TLS). 关于明文和密文的理解: 明文就是真正要传输的消息; 密文当然就是加密后传输的消息.

❓❓❓问题七: HTTPS 的传输过程? 为什么要有 HTTPS?

  • 客户端先从服务器获取到证书, 证书中包含了公钥;
  • 客户端对证书进行校验;
  • 客户端生成一对对称密钥, 使用公钥对对称密钥进行加密, 然后发送给服务器;
  • 服务器得到这个请求之后, 使用私钥解密, 得到对称密钥;
  • 客户端发出后续的请求, 后续的请求都是使用这个对称密钥加密的;
  • 收到的数据也都是使用此对称密钥进行解密.

关于对称加密: 对称密钥指的是明文 - - > 密文使用同一个密钥, 密文 - - > 明文也是使用同一个密钥, 对称密钥里面最关键的就是这个密钥, 客户端和服务器需要先约定好密钥是啥, 如果是客户端生成了密钥, 就需要通过网络告知服务器密钥是啥;
  关于非对称加密: 一个网站生成一对公钥和私钥, 然后将公钥给公开出去, 自己保留私钥; 客户端就先拿这个网站的公钥来对自己的对称密钥进行加密, 然后传输密文给服务器, 服务器拿私钥解密, 也就得到了密钥的明文; 只要有了这个密钥, 后续就可以直接使用对称加密来进行传输;
  总之, 对称加密成本是比较低的, 毕竟机器资源消耗少, 速度也快; 非对称加密, 成本比对称加密要高很多, 机器消耗的资源多, 速度也慢!

为什么要引入 HTTPS 呢?
引入 HTTPS 就是要解决数据传输的安全问题:

  • 引入对称加密, 来加密业务数据;
  • 引入非对称加密, 来加密对称密钥;
  • 引入证书, 来向客户端证实当前的公钥是真实可信的.

❓❓❓问题八: 关于 URL

URL 的初心就是用来区分一个网络上的唯一资源, 先通过服务器地址定位到一个具体的服务器, 再通过端口号定位到一个具体的应用程序, 再通过路径定位到这个应用程序管理的一个具体资源, 再通过查询字符串对这个具体资源的要求做出进一步的解释, 最后通过片段标识来确定定位到这个资源的哪个部分.

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

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

相关文章

客户生命周期管理的五个最佳实践

每个优秀的客户服务人员都知道,业务不仅仅是完成一次性交易。优秀的企业与客户建立互惠互利的关系,相当于提高了客户的终身价值。换句话说,他们确保客户长时间留下来。本文将讨论客户生命周期管理的一些最佳实践。 1、与潜在客户和客户进行个…

业务数据分析-Excel必须掌握的7个操作技巧(二)

Excel必须掌握的7个操作技巧1、定位2、选择性粘贴3、快速填充4、查找与替换5、分列与合并6、去除重复项7、日期格式规范1、定位 如何快速定位到不连续的空值,填充为0 1.在任意空单元格里复制0 2.选中数据区域CtrlA 3.CtrlG 4.选择【定位条件】 5.选择【空值】 6.Ct…

如何使用Docker安装Kibana

(一)、概述 Kibana是一款开源的数据分析和可视化Web平台,用于对 Elasticsearch 索引中的数据进行搜索、查看、修改、添加和删除操作。 (二)、安装 1、Docker环境 视频教程:https://www.bilibili.com/vi…

ifconfig 查看 etcd 使用的 IP 是否存在

在该节点上 ping 其他节点 IP,测试是否 ping 通。 如果 ping 不通,执行步骤(1)(2),检查该节点网络、IP 配置、防火墙配置等。 如果 ping 通,执行步骤(3)确认…

ceph delete pool

参考: Pools — Ceph Documentation 前言:网上的写的乱七八糟不是你抄我就是我抄你 写的完全瞎扯 简直看不下去 官网截图: #准备 1.查看pool名称 ceph osd lspools #创建一个pool用于做测试/设置分类 ceph osd pool create pool-demo 6 6 cep…

供销社物资仓库管理系统-RFID供销社物资管理系统

1、建设背景 1.1项目目标 目前,许多仓储管理主要是基于相应规范的手工作业及电脑半自动化管理实现的,其弊病显而易见,即需要投入大量人力进行规范物品的放置、定期整理盘点以及出入库登记等工作,这使得仓储管理问题十分繁琐&…

Ubuntu下MySql数据库报1055报错

问题描述 在运行Ubuntu下数据库时执行group by 时报错,但在Windows下没有问题 报错内容 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘exercise_8.1.sc.student_id’ which is not functionally dependent…

十一、Mysql常见的show命令及information_schema.tables视图说明

Mysql常见的show命令及information_schema.tables视图说明十一、Mysql常见的show命令及information_schema.tables视图说明一、常见的show命令二、information_schema.tables视图说明1、information_schema.tables视图的结构说明2、information_schema.tables视图的案例说明3、…

【现代密码学原理实验】——CrypTool2与OpenSSL的使用(学习笔记)

📖 前言:本期我们将使用两个密码学常用工具来实现与分析前面所学的理论知识。 目录🕒 1. 工具介绍🕘 1.1 CrypTool 2🕘 1.2 OpenSSL🕤 1.2.1 常用指令语法🕤 1.2.2 Dgst 指令语法🕒…

c++/VS XP系统 无法定位程序输入点WSAPoll于动态链接库ws2_32.dll解决方案

项目情况: 调用第三方网络库(hv库),在win7/8/10等系统都运行正常,在XP系统提示“ 无法定位程序输入点WSAPoll于动态链接库ws2_32.dll” 产生原因: 第三方网络库(hv库)使用到了wsap…

PDF转OFD ~java实现

PDF转OFD ~java实现 上篇文章记录了一下我第一次对接“超阅云”实现了ofd转pdf功能,想了想,还是再写一篇pdf转ofd的实现,其实对接的API基本一样,如果你是第一次看,建议先看看上一篇文章-“ofd转pdf” ———————…

Web前端——用CSS的常用样式制作一个炫酷的按钮

文章目录笔记:CSS的常用样式炫酷按钮效果实现笔记:CSS的常用样式 边框以及弧度样式 border-width:边框的线条宽度。 border-style:边框的样式,例如 solid实现 dotted 点线 dashed 虚线… border-color:边框…

Docker -- 01实践:使用Docker 快速安装Jenkins

使用Docker 快速安装Jenkins1. Docker install2. Jenkins install3. User Guide1.1 Big Data -- Postgres3. User Guide1.1 Big Data -- PostgresJenkins Website: https://www.jenkins.io/. 1. Docker install Docker 安装和基础知识 Docker install: https://blog.csdn.net/w…

TS学习笔记 类型标签 联合类型 枚举类型 泛型 类型别名

个人理解总结: js天生没有编译和类型检查的束缚 灵活好上手 结合项目使用时也可以做到热更新提升开发体验。 (需要编译的JAVA以前开发DEBUG很麻烦但现在有了容器编排技术,也可以实现类似效果) TS是JS的超集,添加了类型标注,不能直…

vulnhub靶机corrosion1

靶机下载地址:Corrosion: 1 ~ VulnHub Kail IP:192.168.174.128 Corrosion ip:192.168.174.133 思路: 靶机端口扫描,ssh日志反弹shell,linpeas脚本扫描,备份文件发现密码,爆破zi…

医疗器械设计时需要注意的事项

伴随着医疗器械的增加,经市场评估的医疗器械产品也趋向多样化,医疗器械设计也非常重要,下面小编就带大家了解一下开展医疗器械设计时需要注意什么? 说到医疗器械,相信大家都很熟悉。医疗器械有很多种,包括一类医疗器械…

【C++位图】1. 快速查找某个数据是否在一个集合中 2. 排序(全部插入,遍历一遍) 3. 求两个集合的交集、并集等

目录 问题:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。 2.简单实现一个位图 3.如何利用位图求两个集合的交集、并集 问题:给40亿个不重复的无符号整数,没排过序…

Golang入门笔记(14)—— 错误处理

来一个除以0的异常,代码如下: package mainimport "fmt"func main() {fmt.Println("before")divNum()fmt.Println("after") }func divNum() {num1 : 10num2 : 0result : num1 / num2fmt.Println(result) } console 异常&…

GitHub 昙花一现:《Spring Boot 趣味实战》神作开源几分钟被下架

又来给大家分享好书了:刘水镜老师的 Spring Boot 趣味实战,网上依旧是没有开源版本!文末送上 刘水镜是谁? 十余年持续技术文章输出,CSDN 博客专家。2020 年《 Spring Boot 趣味私房课》专栏上线,凭借风趣…

创新案例|巴黎欧莱雅如何以内容+货架双轮驱动全渠道兴趣电商增长飞轮

对巴黎欧莱雅而言,兴趣电商作为内容场景为核心的平台,但货架场景已成为驱动增长的飞轮。巴黎欧莱雅团队注意到,抖音用户不只是被动地接受信息流推送,而是越来越倾向于主动搜索。消费者行为的重大变革意味着消费者不再满足于货找人…