[计算机网络] HTTP/HTTPS

一. HTTP/HTTPS简介

1.1 HTTP

HTTP(超文本传输协议,Hypertext Transfer Protocol)是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 工作在 TCP/IP 模型之上,通常使用端口 80。

HTTP的工作过程:

  • 客户端发起请求
  • 服务器处理请求
  • 服务端返回响应
  • 客户端渲染页面

HTTP三点注意事项:

  • HTTP是无连接的, 每次只处理一次请求, 即服务器处理完客户端的连接, 并接收客户端的回应后, 即断开连接, 这种方式可以节省传输时间.
  • HTTP是媒体独立的, 即只要服务端和客户端知道需要传输的数据, 任何类型的数据都可以通过HTTP传输, 客户端和服务端指定合适的MIME-type.
  • HTTP是无状态的, 无状态是指协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,另一方面,在服务器不需要先前信息时它的应答就较快。

1.2 HTTPS

HTTPS(超文本传输安全协议,Hypertext Transfer Protocol Secure)是 HTTP 的安全版本它在 HTTP 下增加了 SSL/TLS 协议,提供了数据加密、完整性校验和身份验证。HTTPS 通常使用端口 443。

二. HTTP/HTTPS请求

使用 fiddler 来捕获B站的请求
在这里插入图片描述
可以发现, HTTP请求由四部分构成:

  • 首行
  • 请求头
  • 空行
  • 主体

接下来详细的介绍一下各个部分.

2.1 首行

在这里插入图片描述
首行由 请求方式 + URL + HTTP版本号 组成

2.2 请求头

在这里插入图片描述
Host: 服务器域名.
Connection: 连接管理策略, keep-alive表示希望在完成当前请求后保持连接. 以便复用同一个TCP连接发送数据
Content-Length: 请求体的长度, 单位是字节.
sec-zh-ua-platform:客户端的操作系统平台
User-Agent:客户端的浏览器和操作系统的信息

Accept: 客户端能够处理的内容类型, 'application/json’表示客户端希望服务器返回JSON格式的数据.
sec-ch-ua: 客户端浏览器的用户代理品牌和版本信息
Content-Type: 请求体的媒体类型, 'application/json’表示请求体是JSON格式的数据.
sec-ch-ua-mobile: 客户端是否为移动设备. '?0’表示不是移动设备.
Origin: 请求的源, 即发起请求的页面的URL.
Sec-Fetch-Site:请求的站点上下文, 'same-site’表示请求来自同一站点
Sec-Fetch-Mode: 请求的模式, cors表示跨源资源共享请求
Sec-Fetch-Dest:请求的目的地, empty表示没有指定目的地.

Referer: 从哪个URL跳转来的
Accept-Encoding: 客户端能够处理的内容编码.这里列出了客户端支持的压缩模式, gzip br…
Accept-Language: 客户端能够理解的语言
Cookie: 包含客户端存储的cookie信息, 用于会话管理, 用户跟踪或个性化设计.

2.3 空行

请求头和请求体之间的空行. 标志着请求头的结束.

2.4 请求体

在这里插入图片描述
请求体包含要发送给服务器的数据.

三. HTTP/HTTPS请求方法

3.1 请求方法

  1. GET 从服务器获取资源. 例如: 从服务器获取图片, 视频等.
  2. POST 向服务器发送数据来创建新资源. 例如: 表单提交, 上传文件. 发送数据包含在请求体中.
  3. PUT 向服务器发送数据来更新现有资源. 如果资源不存在,则创建新的资源。与 POST 不同,PUT 通常是幂等的,即多次执行相同的 PUT 请求不会产生不同的结果。
  4. DELETE 删除服务器中的资源. 请求中包含要删除的资源标识符.
  5. PATCH 对资源进行部分修改. 与PUT类似.
  6. HEAD 类似于GET但服务器只返回响应的头部,不返回实际数据。用于检查资源的元数据(例如,检查资源是否存在,查看响应的头部信息)。
  7. OPTIONS 返回服务器支持的请求方法. 用于检查服务器支持哪些请求方法,通常用于跨域资源共享(CORS)的预检请求。
  8. TRACE 回显服务器收到的请求, 主要用于诊断. 客户端可以查看请求在服务器中的处理路径.
  9. CONNECT 建立一个到服务器的隧道,通常用于 HTTPS 连接。客户端可以通过该隧道发送加密的数据。

3.2 各个HTTP版本

各个HTTP版本定义的请求方法.

  • HTTP/1.0
    • GET
    • POST
    • HEAD
  • HTTP/1.1
    • GET
    • POST
    • HEAD
    • PUT
    • DELETE
    • OPTIONS
    • TRACE
    • CONNECT
  • HTTP/2
    • HTTP/2 基本上沿用了 HTTP/1.1 的方法,但对协议进行了优化,提高了传输效率和速度。HTTP/2 也引入了新的特性,如多路复用、头部压缩和服务器推送等。
  • HTTP/3
    • HTTP/3 基于 QUIC 协议实现,继续使用 HTTP/2 的方法。HTTP/3 主要改进了传输层,使用 UDP 代替 TCP 以提高传输速度和可靠性。

3.3 GET和POST的区别(面试常考)

  • 功能上: GET一般用于从服务器上获取资源, POST则用于更新服务器中的资源.:

  • 安全性: GET是不安全的, 因为GET请求提交的数据(参数)将明文出现在URL上(请求头), 可能会泄露隐私; POST是安全的, 因为POST请求提交的数据(参数)被包装在请求体中.
    在这里插入图片描述
    -

  • 数据量: GET传输的数据量少, 因为受URL长度的限制;POST传输的数据量大, 因为传输的数据被包装在请求体中. 因此, 上传文件时使用POST.

四. HTTP/HTTPS响应

捕获 B站 的响应.
在这里插入图片描述
响应也由四部分组成:

  • 首行
  • 响应头
  • 空行
  • 响应体

详细介绍.

4.1 首行

在这里插入图片描述
响应的首行由三部分组成.
HTTP版本号 + 状态码 + 状态码的描述性文本.

4.2 响应头

在这里插入图片描述
这次重点认识一些.
Date: 响应生成的日期和时间.
Content-Type: 响应体的媒体类型.
Content-Length: 响应体的长度, 单位为字节.
Connection: 连接管理策略. keep-alive 表示服务器希望保持连接.
Server: 指定服务器软件的信息.

4.3 空行

响应头和响应体之间的空行. 标志着响应头的结束.

4.4 响应体

在这里插入图片描述
{“code”:0} 是一个JSON格式的响应体,通常用于API(应用程序编程接口)调用的结果。在这种情况下,它表示请求已成功处理,并且服务器返回了一个状态码 0,这通常意味着没有错误发生,请求执行成功。

五. 状态码

状态码表示客户端请求的返回结果.

5.1 状态码的分类

状态描述
1XX指示信息-表示请求已经被接受, 正在处理
2XX成功-表示请求已被成功接收, 理解, 接受
3XX重定向-要完成请求必须进行更进一步的操作
4XX客户端错误-请求有语法错误或请求无法实现
5XX服务器端错误-服务器未能实现合法的请求

5.2 常见状态码

常用状态码:
200: 请求被正常处理
204: 请求被受理但没有资源可以返回
301: 永久性重定向
302: 临时重定向
304: 已缓存
400: 请求报文语法有误,服务器无法识别
403: 请求的对应资源禁止被访问
404: 服务器无法找到对应资源
500: 服务器内部错误
503: 服务器正忙

以上这些是HTTP/HTTPS的基础知识.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信创建小程序码 - 数量不受限制

获取小程序码:小程序码为圆图,且不受数量限制。 目录 文档 接口地址 请求方式 功能描述 注意事项 获取 scene 值 请求参数 返回参数 对接 请求方法 获取小程序码 调用获取小程序码 总结 文档 接口地址 https://api.weixin.qq.com/wxa/get…

在做题中学习(79):最小K个数

解法:快速选择算法 说明:堆排序也是经典解决问题的算法,但时间复杂度为:O(NlogK),K为k个元素 而将要介绍的快速选择算法的时间复杂度为: O(N) 先看我的前两篇文章,分别学习:数组分三块&#…

第427场周赛: 转换数组、用点构造面积最大的矩形 Ⅰ、长度可被 K 整除的子数组的最大元素和、用点构造面积最大的矩形 Ⅱ

Q1、转换数组 1、题目描述 给你一个整数数组 nums&#xff0c;它表示一个循环数组。请你遵循以下规则创建一个大小 相同 的新数组 result &#xff1a; 对于每个下标 i&#xff08;其中 0 < i < nums.length&#xff09;&#xff0c;独立执行以下操作&#xff1a; 如…

【中间件开发】Redis基础命令详解及概念介绍

文章目录 前言一、Redis相关命令详解及原理1.1 string、set、zset、list、hash1.1.1 string1.1.2 list1.1.3 hash1.1.4 set1.1.5 zset 1.2 分布式锁的实现1.3 lua脚本解决ACID原子性1.4 Redis事务的ACID性质分析 二、Redis协议与异步方式2.1 Redis协议解析2.1.1 redis pipeline…

运输层4——TCP格式(重点!)

目录 一、TCP报文段格式 二、最大报文长度 MSS 一、TCP报文段格式 长度&#xff1a;前20个字节固定 后4n个字节&#xff08;报文段格式不固定&#xff09; 1、源端和目的端&#xff1a;各2个字节 作用&#xff1a;指明TCP链接的发送 2、序号 4字节 作用&#xff1…

「Mac玩转仓颉内测版46」小学奥数篇9 - 基础概率计算

本篇将通过 Python 和 Cangjie 双语实现基础概率的计算&#xff0c;帮助学生学习如何解决简单的概率问题&#xff0c;并培养逻辑推理和编程思维。 关键词 小学奥数Python Cangjie概率计算 一、题目描述 假设有一个袋子中有 5 个红球和 3 个蓝球&#xff0c;每次从袋子中随机…

从变更到通知:使用Python和MongoDB Change Streams实现即时事件监听

MongoDB提供了一种强大的功能&#xff0c;称为Change Streams&#xff0c;它允许应用程序监听数据库中的变更事件&#xff0c;并在数据发生变化时立即做出响应。这在mysql数据库是不具备没有这个功能的。又如&#xff1a;我们在支付环节想一直监听支付回调的状态&#xff0c;就…

决策树:ID3、C4.5和CART特征选择方式

1 前言 该文章主要目的是记录ID3、C4.5和CART特征选择方式&#xff0c;这里只对决策树进行简单介绍。 决策树&#xff08;Decision Tree&#xff09;算法是一种有监督学习算法&#xff0c;它利用分类的思想&#xff0c;根据数据的特征构建数学模型&#xff0c;从而达到数据的筛…

2023 年“泰迪杯”数据分析技能赛B 题企业财务数据分析与造假识别

2023 年“泰迪杯”数据分析技能赛B 题企业财务数据分析与造假识别 一、背景 财务数据是指企业经营活动和财务结果的数据记录&#xff0c;反映了企业的财务状况 与经营成果。对行业、企业的财务数据进行分析&#xff0c;就是要评价其过去的经营业绩、 衡量现在的财务状况、预测…

UE5.5 Geometry库平面切割原理分析

平面切割--FMeshPlaneCut 平面定义: 面上一个点 法线 算法流程如下 求几何体所有顶点和面的有向距离(Signs) Sign计算&#xff1a; float Sign (VertexPos - PlaneOrigin).Dot(PlaneNormal); 遍历所有几何体所有交叉边, 进行SplitEdge 对于位于切割面两侧的交叉边(Sign…

【计算机学习笔记】GB2312、GBK、Unicode等字符编码的理解

之前编写win32程序时没怎么关注过宽字符到底是个啥东西&#xff0c;最近在编写网络框架又遇到字符相关的问题&#xff0c;所以写一篇文章记录一下&#xff08;有些部分属于个人理解&#xff0c;如果有错误欢迎指出&#xff09; 目录 几个常见的编码方式Unicode和UTF-8、UTF-16、…

CSS 快速上手

目录 一. CSS概念 二. CSS语法 1. 基本语法规范 2. CSS的三种引入方式 (1) 行内样式 (2) 内部样式表 (3) 外部样式表 3. CSS选择器 (1) 标签选择器 (2) 类选择器 (3) id选择器 (4) 通配符选择器 (5) 复合选择器 <1> 空格 <2> 没有空格 <3> &q…

【时间之外】IT人求职和创业应知【60】-卡脖子

目录 新闻一&#xff1a;达成合作&#xff0c;将在中国推出生成式人工智能服务 新闻二&#xff1a;机器人新赛道 新闻三&#xff1a;简化用户信息获取流程&#xff0c;提升小程序体验 去年人口出生下降&#xff0c;3年以后&#xff0c;幼儿园要关闭很多&#xff0c;6年以后小…

centos9升级OpenSSH

需求 Centos9系统升级OpenSSH和OpenSSL OpenSSH升级为openssh-9.8p1 OpenSSL默认为OpenSSL-3.2.2&#xff08;根据需求进行升级&#xff09; 将源码包编译为rpm包 查看OpenSSH和OpenSSL版本 ssh -V下载源码包并上传到服务器 openssh最新版本下载地址 wget https://cdn.openb…

node.js中实现GETPOST请求

创建基本的服务器 const express require(express); const indexRouter require(./router); // 引入路由 const app express(); const port 3000; // 挂载路由 app.use(/api, indexRouter); app.listen(port, () > {console.log(Server is running on http://localhost…

shell 条件测试

一、命令执行结果判定 && &#xff1a; 在命令执行后如果没有任何报错时会执行符号后面的动作 || &#xff1a; 在命令执行后有报错执行符号后的动作 [rootlong ~]# a10 [rootlong ~]# echo $a 10 [rootlong ~]# [ $a -gt "5" ] && echo yes || e…

JS中的原型链与继承

原型链的类比 JS中原型链&#xff0c;本质上就是对象之间的关系&#xff0c;通过protoype和[[Prototype]]属性建立起来的连接。这种链条是动态的&#xff0c;可以随时变更。 这个就跟C/C中通过指针建立的关系很相似&#xff0c;比如&#xff0c;通过指针建立一个链表&#xf…

【Linux网络编程】第七弹---构建类似XShell功能的TCP服务器:从TcpServer类到主程序的完整实现

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、TcpServer.hpp 1.1、TcpServer类基本结构 1.2、 Execute() 2、Command.hpp 2.1、Command类基本结构 …

C语言控制语句与案例

控制语句与案例 1. 选择结构 1.1 if 语句 if 语句用于根据条件执行不同的代码块。最基本的语法形式如下&#xff1a; // 单分支 if (条件) {// 条件为真时执行的代码 }// 双分支 if (条件) {// 条件为真时执行的代码 } else {// 条件为假时执行的代码 }// 多分支 if (条件1…

【分子材料发现】——GAP:催化过程中吸附构型的多模态语言和图学习(数据集处理详解)(二)

Multimodal Language and Graph Learning of Adsorption Configuration in Catalysis https://arxiv.org/abs/2401.07408Paper Data: https://doi.org/10.6084/m9.figshare.27208356.v2 1 Dataset CatBERTa训练的文本字符串输入来源于Open Catalyst 2020 &#xff08;OC20…