一、什么是HTTP协议?

        HTTP协议,全称 Hyper Text Transfer Protocol(超⽂本传输协议)的缩写,是⽤于服务器客户端浏览器之间传输超⽂本数据(⽂字、图⽚、视频、⾳频)的应⽤层协议它规定了客户端如何向服务器发送请求,以及服务器如何对请求做出响应,定义了请求和响应的格式与规则,是互联网通信的基石。

协议特点:灵活可扩展、基于TCP/IP的可靠传输、应用层协议、请求-应答模式、无状态。

二、HTTP协议通信过程

HTTP是一个应用层协议,默认端口为80,在传输层使用TCP协议进行数据的传输。

通信过程如下:

1.当用户发起一个新的请求;
2.浏览器发起对服务器的TCP连接请求;
3.服务器与浏览器之间会按照TCP协议的三次握手,建立之间的TCP连接;
4.浏览器按照http协议格式,创建请求数据包(http请求报文);
5.将请求数据包(http请求报文)发送至服务器;
6.服务器按照http协议格式,解析请求报文;
7.执行请求处理,调用相关业务逻辑方法,产生响应数据;
8.服务器按照http协议格式,将响应数据封装至响应数据包(http响应报文);
9.服务器将响应数据包,发送至浏览器;
10.浏览器按照http协议格式,对响应数据包进行解析;
11.浏览器将响应数据包中的响应内容,显示至浏览器页面,呈现给用户;    

三、HTTP报文

1.请求报文

        浏览器通过URL发起⼀个请求时,会发送⼀个 http 请求报⽂给⽬标服务器,服务器根据请求报⽂中携带的请求数据进⾏处理。

         请求报文结构
·第一行是包含:请求方式、URL、协议版本
·接下来的多⾏都是http请求⾸部内容,其中包含若⼲个http⾸部字段
·⼀个空⾏⽤来分隔⾸部和内容主体Body
·最后是请求的内容主体

2.响应报文

        当服务器处理完请求后,会将响应数据放入http响应报文中返回给浏览器。

        响应报文结构:
·第一行包含:协议版本、状态码以及描述。
·接下来的若干行是首部内容
·一个空行分隔首部和内容主体
·最后是响应的内容主体

四、HTTP请求方式

1.GET:获取资源

        GET方法用于使用给定的URL从给定服务器中检索信息,完成从指定资源中请求数据。使用GET方法的请求应该只是检索数据,并且不会对数据产生其他影响。

2.POST:提交数据增加资源

        POST方法用于将数据发送到服务器以创建或增加资源。使用post方法,如果两个请求相同,后一个请求不会覆盖第一个请求,所以post用于增加资源。

3.HEAD:获取响应报头

        HEAD和GET方法类似,但是不返回响应报文内容主体部分,仅传输响应报头部分。主要用于确认URL的有效性以及资源更新的日期时间等。

4.PUT:修改资源

        PUT方法用来修改资源,要求在请求报文的主体中包含数据内容,然后保存到请求URL指定位置。使用put方法,如果两个请求相同,后一个请求会覆盖第一个请求,所以put用于修改资源。

5.DELETE:删除资源

        DELETE方法用来删除指定的资源。

6.OPTIONS:查询支持的方法

        查询指定的URL能够支持的方法。会返回Allow:GET,POST,HEAD,OPTIONS等请求方式内容。

GET和POST的区别:

        1.GET用于获取数据,POST用于提交数据;

        2.GET和POST的请求报文格式不同;

        3.GET使用请求报文中的首部字段URL传递请求参数,POST使用Request Boby提交数据;

        4.GET是幂等且可缓存,POST非幂等且不可缓存;

                「幂等」:意思是多次执行相同的操作,结果都是「相同」的。

五、HTTP首部字段 

字段名说明示例
Host服务器域名Host: www.example.com
Content-Type内容类型Content-Type: text/html; charset=utf-8
Content-Length内容长度Content-Length: 1024
Connection连接控制Connection: keep-alive
Accept可接受的响应类型Accept: application/json
User-Agent客户端信息User-Agent: Mozilla/5.0...

六、HTTP状态码

服务器返回的响应报文中第一行为状态行,包含了状态码以及原因短语,用来告知客户端请求后的响应结果。 

1XX信息

        1XX类状态码属于提示信息,是协议处理中的⼀种中间状态,实际⼯作中使⽤场景⽐较少。

2XX成功

        2XX类状态码表示服务器成功处理了客户端的请求。
        ·200 OK:最常⻅的成功状态码,表示⼀切正常。
        ·204 No Content:常⻅的成功状态码,与200OK基本相同,但响应报⽂没有body数据。
        ·206 Partial Content:是应⽤于HTTP分块下载或断点续传,表示响应返回的body数据并不是资源的全部,⽽是其中的⼀部分,也是服务器处理成功的状态。

3XX重定向

        3XX类状态码表示客户端请求的资源发送了变动,需要客户端⽤新的URL重新发送请求获取资源,也就是重定向。
        ·301 Moved Permanently:表示永久重定向,说明请求的资源已经不存在了,需改⽤新的URL再次访问。
        ·302 Found:表示临时重定向,说明请求的资源还在,但暂时需要⽤另⼀个URL来访问。

4XX客户端错误

        4XX类状态码表示客户端发送的报⽂有误,服务器⽆法处理。
        ·400 Bad Request:表示客户端请求的报⽂有错误。
        ·403 Forbidden:表示服务器禁⽌访问资源。
        ·404 Not Found:表示请求的资源在服务器上不存在或未找到,所以⽆法提供给客户端。
        ·405 Not Allowed:表示服务器不⽀持客户端采⽤的请求⽅式。

5XX服务器错误

        5XX类状态码表示客户端请求报⽂正确,但是服务器处理时内部发⽣了错误,属于服务器端的错误码。
        ·500 Internal Server Error:服务器发⽣了内部错误。
        ·501 Not Implemented:表示客户端请求的功能还不⽀持,类似“即将开业,敬请期待”的意思。
        ·502 Bad Gateway:通常是服务器作为⽹关或代理时返回的错误码,表示服务器⾃身⼯作正常,访问后端服务器发⽣了错误。
        ·503 Service Unavailable:表示服务器当前很忙(过载),暂时⽆法响应服务器,类似“⽹络服务正忙,请稍后重试”的意思。

七、连接管理

1.长连接和短链接

        短连接,每次使⽤HTTP协议进⾏通信,都需要重新按照三次握⼿的⽅式,建⽴⼀个独⽴的TCP连接,响应完毕后,通过四次挥⼿断开连接。
       ⻓连接,只需要建⽴⼀次TCP连接就能进⾏多次HTTP通信,这种⽅减少了TCP连接的重复建⽴和断开所造成的额外开销,减轻了服务器端的负载。
                
        ·在HTTP/1.0默认是短连接,,如果需要使⽤⻓连接,则使⽤Connection:Keep-Alive
        ·从HTTP/1.1默认是⻓连接,如果要断开连接,需要由客户端或者服务器端提出断开,使用Connection:close;
        

2.管线化链接

        将多个HTTP请求(request)整批提交的技术,在传送过程中不需先等待服务端的回应。管线化机 制须通过⻓连接(persistent connection)完成,仅HTTP/1.1⽀持此技术(HTTP/1.0不⽀持)。

八、HTTPS加密

1.HTTP协议存在的问题

        HTTP由于使⽤明⽂传输,不安全。所以可能会出现内容被窃听(⽐如被抓包);不验证通信⽅的身 份,通信⽅的身份有可能遭遇伪装(⽐如钓⻥⽹站);⽆法证明报⽂的完整性,报⽂有可能遭篡改(⽐如强制在线⼴告植⼊)

2.什么是HTTPS协议?

        HTTPS并不是⼀个新的协议,它使⽤了隧道进⾏通信,让 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信。通过使⽤SSL,HTTPS具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。

3.加密方式有哪些?

1.消息摘要加密,例如:MD5、SHA

2.对称式加密:加密和解密使用同一把密钥

        优点:加密速度快

        缺点:⽆法安全的将密钥传输给发送⽅

3.非对称式加密:两把密钥,公钥加密,私钥解密

        优点:可以更安全地将信息传输给通信发送⽅

        缺点:运⾏速度慢

4.HTTPS的工作原理

1.⽤户通过浏览器请求https⽹站,服务器收到请求,选择浏览器⽀持的加密和hash算法,返回数
字证书 给浏览器,包含颁发机构、⽹址、公钥、证书有效期等信息;
2.浏览器对证书的内容进⾏校验,如果有问题,则会有⼀个提示警告。否则,就⽣成随机秘钥X,同时使 ⽤证书中的公钥进⾏加密,并且发送给服务器;
3.服务器收到之后,使⽤私钥解密,得到随机秘钥X,然后使⽤随机秘钥x对⽹⻚内容进⾏加密,返回给浏览器;
4.浏览器则使⽤随机秘钥X和之前约定的加密算法进⾏解密,得到最终的⽹⻚内容。

     九、总结

        HTTP作为Web通信的基石,其报文结构、请求方法、状态码与连接管理等核心机制,不仅是开发者必须掌握的基础知识,更是构建高效、可靠网络应用的关键。随着网络安全威胁日益增多,HTTPS通过引入加密传输与身份验证机制,有效弥补了HTTP在安全性方面的先天不足,已成为现代Web应用中不可或缺的标准配置。深入理解HTTP与HTTPS的工作原理,不仅有助于提升系统性能与用户体验,更是构建安全、可信网络环境的必经之路。希望本文能为你的学习与实践带来切实帮助。

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

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

相关文章

【算法--链表】138.随机链表的复制--通俗讲解

算法通俗讲解推荐阅读 【算法–链表】83.删除排序链表中的重复元素–通俗讲解 【算法–链表】删除排序链表中的重复元素 II–通俗讲解 【算法–链表】86.分割链表–通俗讲解 【算法】92.翻转链表Ⅱ–通俗讲解 【算法–链表】109.有序链表转换二叉搜索树–通俗讲解 【算法–链表…

为什么现在企业注重数据可视化?一文讲清可视化数据图表怎么做

目录 一、企业注重数据可视化的原因 1.提升数据理解效率 2.发现数据中的规律和趋势 3.促进企业内部沟通与协作 4.增强决策的科学性 5.提升企业竞争力 二、可视化数据图表的基本概念 1.常见的可视化图表类型 2.可视化图表的构成要素 3.可视化图表的设计原则 三、制作…

Cursor 辅助开发:快速搭建 Flask + Vue 全栈 Demo 的实战记录

Cursor 辅助开发:快速搭建 Flask Vue 全栈 Demo 的实战记录 🌟 Hello,我是摘星! 🌈 在彩虹般绚烂的技术栈中,我是那个永不停歇的色彩收集者。 🦋 每一个优化都是我培育的花朵,每一个…

实战:用 Python 搭建 MCP 服务 —— 模型上下文协议(Model Context Protocol)应用指南

📌 实战:用 Python 搭建 MCP 服务 —— 模型上下文协议(Model Context Protocol)应用指南 标签:#MCP #AI工程化 #Python #LLM上下文管理 #Agent架构🎯 引言:为什么需要 MCP? 在构建大…

宋红康 JVM 笔记 Day16|垃圾回收相关概念

一、今日视频区间 P154-P168 二、一句话总结 System.gc()的理解;内存溢出与内存泄漏;Stop The World;垃圾回收的并行与并发;安全点与安全区域;再谈引用:强引用;再谈引用:软引用;再谈…

OpenCV 高阶 图像金字塔 用法解析及案例实现

目录 一、什么是图像金字塔? 二、图像金字塔的核心作用 三、图像金字塔的核心操作:上下采样 3.1 向下采样( pyrDown ):从高分辨率到低分辨率 1)原理与步骤 2)关键注意事项 3)…

【ARMv7】系统复位上电后的程序执行过程

引子:对于ARMv7-M系列SOC来说,上电后程序复位执行的过程相对来说比较简单,因为绝大部分芯片,都是XIP(eXecute In Place,就地执行)模式执行程序,不需要通过BooROM->PL(preloader)-…

神经网络的初始化:权重与偏置的数学策略

在深度学习中,神经网络的初始化是一个看似不起眼,却极其重要的环节。它就像是一场漫长旅程的起点,起点的选择是否恰当,往往决定了整个旅程的顺利程度。今天,就让我们一起深入探讨神经网络初始化的数学策略,…

第 16 篇:服务网格的未来 - Ambient Mesh, eBPF 与 Gateway API

系列文章:《Istio 服务网格详解》 第 16 篇:服务网格的未来 - Ambient Mesh, eBPF 与 Gateway API 本篇焦点: 反思当前主流 Sidecar 模式的挑战与权衡。 深入了解 Istio 官方的未来演进方向:Ambient Mesh (无边车模式)。 探讨革命性技术 eBPF 将如何从根本上重塑服务网格的…

摆动序列:如何让数组“上下起伏”地最长?

文章目录摘要描述题解答案题解代码分析代码解析示例测试及结果时间复杂度空间复杂度总结摘要 今天我们要聊的是 LeetCode 第 376 题 —— 摆动序列。 题目的意思其实很有意思:如果一个序列里的相邻差值能保持正负交替,就叫做“摆动”。比如 [1, 7, 4, 9…

玩转Docker | 使用Docker部署KissLists任务管理工具

玩转Docker | 使用Docker部署KissLists任务管理工具 前言 一、KissLists介绍 KissLists简介 KissLists核心特点 KissLists注意事项 二、系统要求 环境要求 环境检查 Docker版本检查 检查操作系统版本 三、部署KissLists服务 下载KissLists镜像 编辑部署文件 创建容器 检查容器状…

【滑动窗口】C++高效解决子数组问题

个人主页 : zxctscl 专栏 【C】、 【C语言】、 【Linux】、 【数据结构】、 【算法】 如有转载请先通知 文章目录前言1 209. 长度最小的子数组1.1 分析1.2 代码2 3. 无重复字符的最长子串2.1 分析2.2 代码3 1004. 最大连续1的个数 III3.1 分析3.2 代码4 1658. 将 x …

[rStar] 搜索代理(MCTS/束搜索)

第2章:搜索代理(MCTS/束搜索) 欢迎回到rStar 在前一章中,我们学习了求解协调器,它就像是解决数学问题的项目经理。 它组织整个过程,但本身并不进行"思考",而是将这项工作委托给其专家团队。 今天&#x…

Electron 核心模块速查表

为了更全面地覆盖常用 API,以下表格补充了更多实用方法和场景化示例,同时保持格式清晰易读。 一、主进程模块 模块名核心用途关键用法 示例注意事项app应用生命周期管理• 退出应用:app.quit()• 重启应用:app.relaunch() 后需…

Qt C++ 图形绘制完全指南:从基础到进阶实战

Qt C 图形绘制完全指南:从基础到进阶实战 前言 Qt框架提供了强大的2D图形绘制能力,通过QPainter类及其相关组件,开发者可以轻松实现各种复杂的图形绘制需求。本文将系统介绍Qt图形绘制的核心技术,并通过实例代码演示各种绘制技巧…

二分搜索边界问题

在使用二分搜索的时候&#xff0c;更新条件不总是相同&#xff0c;虽然说使用bS目的就是为了target&#xff0c;但也有如下几种情况&#xff1a;求第一个target的索引求第一个>target的索引求第一个>target的索引求最后一个target的索引求最后一个<target的索引求最后…

【springboot+vue3】博客论坛管理系统(源码+文档+调试+基础修改+答疑)

目录 一、整体目录&#xff1a; 项目包含源码、调试、修改教程、调试教程、讲解视频、开发文档&#xff08;项目摘要、前言、技术介绍、可行性分析、流程图、结构图、ER属性图、数据库表结构信息、功能介绍、测试致谢等约1万字&#xff09; 二、运行截图 三、代码部分&…

20250907_梳理异地备份每日自动巡检Python脚本逻辑流程+安装Python+PyCharm+配置自动运行

一、逻辑流程(autocheckbackup.py在做什么) 1.连接Linux服务器 用 paramiko 登录你配置的 Linux 服务器(10.1.3.15, 10.1.3.26),进入指定目录(如 /home, /backup/mes),递归列出文件。 采集到的信息:服务器IP、目录、数据库名称、文件名、大小、修改时间。 2.连接Wind…

terraform-state详解

一、Treeaform-state的作用 Terraform-state是指Terroform的状态&#xff0c;是terraform不可缺少的生命周期元素。本质上来讲&#xff0c;terraform状态是你的基础设施配置的元数据存储库&#xff0c;terraform会把它管理的资源状态保存在一个状态文件里。 默认情况下&#xf…

四、kubernetes 1.29 之 Pod 生命周期

一、概述当容器与 pause 容器共享网络&#xff08;Network&#xff09;、IPC&#xff08;进程间通信&#xff09;和 PID&#xff08;进程命名空间&#xff09;后&#xff0c;二者形成了一种紧密的 "共享命名空间" 关系&#xff0c;共同构成了 Kubernetes 中 "Po…