「计算机网络」初识http协议

在这里插入图片描述

前言

HTTP协议——互联网发展的基石,从一个最简单的“helloworld”网页,到现在博客平台、视频网站都离不开HTTP协议的存在。随着互联网的发展,Web网页的设计也越发复杂,前后端开发的分工也越发明确,HTTP作为连接前后端的桥梁,只有掌握它才能更好地实现前后端数据交接。

HTTP协议基础

概念

HTTP(HyperText Transfer Protocol,超文本传输协议),工作于TCP/IP协议族中的应用层,基于TCP协议来提供服务,是互联网发展基石般的存在,用于浏览器与远端服务器的通信,并获取其内部资源,如:网页html、图片等。

HTTP是无状态协议,也就是说服务器不会保存每次请求的信息。对于服务器来讲,每次连接都是独立的,所有连接一视同仁。这样设计简化了服务器的设计与压力,但在需要保存状态的情况(如登录信息、历史记录等),则需要使用cookie、session等手段来实现个性化服务。

image.png

HTTP的工作流程

HTTP是基于CS模型的一种通信协议,通信过程中必定由客户端(浏览器)先发起请求,服务器进行响应(返回网页信息)。

image.png

HTTP协议在通信时的流程

  1. 发起DNS请求:HTTP协议在向远端服务器发起请求前,会先向DNS服务器请求域名所对应的IP地址。

  2. 建立TCP连接:获取到IP地址后,与远端服务器建立连接(三次握手)。

  3. 客户端发送请求:建立好连接后,客户端向服务器发送一个HTTP请求。

  4. 服务器响应请求:服务器收到请求后,根据请求内容发送响应报文

  5. 显示网页:客户端收到响应报文,解析数据,显示到网页当中。

HTTP协议格式

HTTP协议中报文分为两类:请求报文与响应报文,但他们的报文格式都是通用的,即报头首行 + 头部字段 + 空行 + 报文数据(可选)。

image.png

报文格式:

  • 请求报文

    • 请求行:包含请求方法,HTTP版本。

    • 头部字段:包含通用字段 + 请求字段。

    • 空行:固定格式,用于区分报头与报文。

    • 报文数据(可选):请求报文一般没有报文数据。

  • 响应报文

    • 状态行:包含请求的状态码、原因,HTTP版本。

    • 头部字段:包含通用字段 + 响应字段。

    • 空行:固定格式。

    • 报文数据(可选):返回请求的资源,可以是html、图片、js等。

报头首行

请求行

请求行包含请求方法、请求URI与HTTP版本,例如:

GET / HTTP/1.1    # 请求行
User-Agent: PostmanRuntime/7.39.0
Accept: */*
Postman-Token: bf247d0a-a311-41c1-a739-29bdeb43d0fb
Host: localhost:8080
Accept-Encoding: gzip, deflate, br
Connection: keep-alive

常用请求首部方法

请求方法描述
GET请求指定资源的表示形式。GET请求应当只用于获取数据,而不应对服务器产生任何副作用。
POST向指定资源提交数据进行处理。数据包含在请求体中。POST请求可能会导致服务器状态的改变或者副作用。
PUT向指定资源位置上传其最新内容。PUT请求会用请求中的数据替换目标资源的全部内容。
DELETE请求服务器删除请求的指定资源。
HEAD类似于GET请求,但只请求资源的首部信息,不返回具体内容。通常用于检查资源的有效性或获取资源的元数据。
OPTIONS请求指定资源的通信选项和可用方法。可以用于检查服务器支持哪些HTTP方法。
PATCH对资源进行部分修改。PATCH请求包含的实体中,通常只包括修改的部分,而不是资源的全部内容。

状态行

状态行包含HTTP版本、状态码、原因,例如:

HTTP/1.1 200 OK       #状态行
Date: Fri, 14 Jun 2024 13:04:10 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-47cf7e6ee8400"
Accept-Ranges: bytes
Content-Length: 81
Cache-Control: max-age=86400
Expires: Sat, 15 Jun 2024 13:04:10 GMT
Connection: Keep-Alive
Content-Type: text/html

状态码类别

状态码类别含义
1xx 信息性状态码接收的请求正在处理。
2xx 成功状态码请求已被成功接收、理解和处理。
3xx 重定向状态码需要进一步操作以完成请求。
4xx 客户端错误状态码客户端存在问题。
5xx 服务器错误状态码服务器在处理请求时遇到错误。

常见状态码

状态码原因描述
200OK请求被正确处理
201Created请求成功并创建了新的资源
204No Content请求成功但没有内容返回
301Moved Permanently永久重定向,资源已永久移动到新URL
302Found资源暂时位于不同的URL
400Bad Request请求由于语法错误无法被理解
401Unauthorized客户端必须进行身份验证才能获得请求的响应
403Forbidden客户端无权访问内容
404Not Found服务器找不到请求的资源
500Internal Server Error服务器遇到无法处理的情况
502Bad Gateway服务器作为网关时收到无效响应
503Service Unavailable服务器无法处理请求
504Gateway Timeout服务器作为网关时没有及时收到响应

首部字段

首部字段是HTTP协议用于控制HTTP运作方式的要素之一,可以将其当成HTTP的额外选项。

首部字段分为三类

  • 通用首部字段:无论是响应报文还是请求报文都可以使用的选项。

  • 响应/请求首部字段:仅可以在响应/请求报文中使用的字段。

  • 实体首部字段:实体首部字段虽然可以在HTTP请求和响应中使用,但其专注于为报文的消息体提供服务。

通用首部字段

首部字段描述
Cache-Control指示请求或响应的缓存机制,用于控制缓存的存储和检索方式。
Connection控制当前连接的选项。常用值包括 keep-alive(保持连接)和 close(关闭连接)。
Date指示消息发送的日期和时间,格式为RFC 1123日期格式。
Pragma包含实现特定的指令,主要用于向后兼容HTTP/1.0。常见值为 no-cache,用于防止缓存。
Trailer指定在消息末尾可能出现的字段,用于分块传输编码。
Transfer-Encoding指示传输消息体的编码方式,例如 chunked(分块传输编码)。
Upgrade用于向服务器或客户端发出协议升级请求,通常用于HTTPS或HTTP/2升级。
Via显示报文经过的中间节点(代理服务器或网关),用于追踪请求或响应的路径。
Warning传达与缓存相关的警告信息,告知客户端可能存在的缓存问题。

请求/响应首部字段

响应首部字段

首部字段描述
Accept-Ranges指示服务器是否支持字节范围请求(partial requests),如bytes
Age响应在缓存中存储的时间,以秒为单位。
ETag资源的实体标签,服务器用来标识资源的特定版本。
Location指示客户端重定向到的URL,用于3xx状态码的响应。
Proxy-Authenticate指示客户端需要进行代理身份验证的信息。
Retry-After指示客户端应在多长时间后再次尝试请求,用于5xx状态码的响应。
Server包含服务器软件的信息。
Vary指示缓存服务器使用的请求头,以区分不同的响应。
WWW-Authenticate指示客户端如何进行身份验证,以便访问资源。
Set-Cookie发送会话cookie到客户端。
Content-Location给出实际访问的资源的URL。

请求首部字段

首部字段描述
Accept指定客户端能够处理的内容类型。
Accept-Charset指定客户端能够接收的字符集。
Accept-Encoding指定客户端能够处理的内容编码。
Accept-Language指定客户端能够处理的自然语言。
Host指定请求的目标主机名和端口号,必须包含在HTTP/1.1请求中。
User-Agent包含发出请求的用户代理信息(如浏览器类型、版本等)。
Authorization包含客户端为获取资源进行身份验证的信息。
Cache-Control用于指定请求和响应遵循的缓存机制。
Connection控制当前连接的选项,例如 keep-aliveclose
Cookie包含客户端之前收到的并存储在客户端上的Cookie。
Content-Length在POST请求中,表示请求体的长度(以字节为单位)。
Content-Type在POST请求中,表示请求体的媒体类型。
Date发送请求的日期和时间。
Expect指定客户端要求服务器满足的特定行为。
If-Match仅在客户端提供的ETag值与资源的ETag值匹配时才执行请求。
If-Modified-Since仅在请求的资源自指定日期后被修改过时才返回资源。
If-None-Match仅在请求的资源的ETag值与客户端提供的不匹配时才返回资源。
If-Range仅在请求的资源自指定日期后被修改过时才返回部分资源。
If-Unmodified-Since仅在请求的资源自指定日期后未被修改过时才执行请求。
Range请求返回资源的部分内容,指定字节范围。
Referer指定请求资源的来源页面。

实体首部字段

首部字段描述
Allow列出资源支持的HTTP请求方法。
Content-Encoding指示对实体进行的编码类型,用于标识实体数据被压缩的方式。
Content-Language描述资源的自然语言,例如 en 表示英语。
Content-Length指定实体主体的大小,以字节为单位。
Content-Location给出请求资源的替代位置,通常是一个URL。
Content-MD5包含实体主体的MD5校验和,用于检查数据完整性。
Content-Range指示实体主体中部分内容的位置,用于部分请求。
Content-Type指定实体主体的媒体类型,例如 text/html
Expires指定实体主体过期的日期和时间,用于缓存控制。
Last-Modified指示资源最后修改的日期和时间。

HTTP状态管理

HTTP是无状态的协议,这意味这服务器无法区分每个连接之间的区别,但实际上的网页服务上总是能见到用户登录、购物车等需要状态管理的内容。于是HTTP引入cookie、session等功能来实现数据的持久化状态管理。

Cookie与session

Cookie

Cookie 是一种存储在客户端中的小型数据文件,由服务器生成并发送给客户端。客户端每次访问该服务器时,都会自动携带相应的Cookie信息。服务器通过检索Cookie信息,从而给拥有不同Cookie的请求提供不同的服务。

image.png
工作流程

  1. 客户端发送请求(无Cookie)。

  2. 服务器设置Cookie信息。

  3. 客户端接收并存储Cookie信息。

  4. 客户端发送含有Cookie的报文。

cookie的结构

字段名称描述
NameCookie的名称,唯一标识这个Cookie。
ValueCookie的值,与名称一起构成键值对。
Domain指定Cookie适用的域。浏览器将只发送此Cookie到该域名或其子域名。
Path指定Cookie适用的路径。浏览器将只发送此Cookie到该路径及其子路径。
Expires/Max-Age指定Cookie的过期时间。Expires使用具体的日期和时间表示,而Max-Age使用相对时间(以秒为单位)表示。
Secure指定Cookie仅通过HTTPS连接发送,增加了Cookie的安全性。
HttpOnly指定Cookie不能被JavaScript访问,减少XSS攻击的风险。
SameSite控制Cookie在跨站请求时的行为,有三个值:StrictLaxNone,用于防范CSRF攻击。

Session

Session 是存储于服务器中的数据,用于保持用户的会话状态。每个Session都有一个唯一的Session ID,服务器通过这个ID来识别和管理用户的会话信息。

image.png

工作流程

  1. 客户端通过POST方法发送用户信息(username + passwd)给服务器。

  2. 服务器检查信息,创建一个SessionID,并使用Set-Cookie字段发送给客户端

  3. 客户端存储Cookie信息,在之后的请求中,于报头增添Cookie信息。

总结

HTTP是基于CS模型的无状态传输协议,拥有两种报文格式——请求报文/响应报文,其通过报头的首部字段来进行额外配置,能够通过配合Cookie、Session等方式实现持久化状态管理。

📜博客主页:主页
📫我的专栏:C++
📱我的github:github

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

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

相关文章

基于YOLO检测算法(单检测器网络+多视频输入)设计与实现

在单摄像头目标检测的基础上,实现单网络多线程的实时目标检测。 1,应用场景 在安防领域,YOLO的多摄像头实时目标检测应用具有以下特点和优势: 实时性能: YOLO算法以非常高的速度运行,能够实现实时目标检测…

力扣刷题--2843. 统计对称整数的数目【简单】

题目描述 给你两个正整数 low 和 high 。 对于一个由 2 * n 位数字组成的整数 x ,如果其前 n 位数字之和与后 n 位数字之和相等,则认为这个数字是一个对称整数。 返回在 [low, high] 范围内的 对称整数的数目 。 示例 1: 输入&#xff1…

pytest + yaml 框架 - 65.Pycharm 设置 yaml 格式用例模板,高效写用例

前言 初学者对yaml 格式不太熟悉,自己写yaml用例的时候,总是格式对不齐,或者有些关键字会忘记。 于是我们可以在pycharm上设置用例模块,通过快捷方式调用出对应的模块,达到高效写用例的目的。 pycharm设置用例模板 File - Settings Live Templates - python 点 + 号…

扩展欧几里得算法——AcWing.877扩展欧几里得算法

扩展欧几里得算法 定义 扩展欧几里得算法是用来在已知整数 a、b 的情况下,求解一组整数 x、y 使得 ax by gcd(a, b)(gcd 表示最大公约数)。 运用情况 求解线性同余方程。在密码学等领域有广泛应用。 注意事项 要注意边界情况和特殊值…

LED显示屏色差处理方法

LED显示屏以其高亮度、低功耗和长寿命等优点,在广告、信息发布和舞台背景等领域得到广泛应用。然而,由于生产批次的不同,LED显示屏在亮度和色度上可能存在差异,影响显示效果。本文将探讨如何通过逐点校正技术来解决这一问题。 逐点…

字节智能体平台:扣子原理和实践案例

完整内容: 字节智能体平台:扣子原理和实践案例

Navicat和SQLynx产品功能比较二(SQL查询)

数据库管理工具最常用的功能就是SQL的查询,没有之一。本文针对Navicat和SQLynx做了SQL查询相关的性能测试,从测试结果来看,Navicat主要适合开发类的小型数据量需求,SQLynx可以适应大型数据量或小型数据量的需求,用户可…

拓扑排序、关键路径(AOV、AOE网)

拓扑排序(AOV网) 相关知识 在现代化管理中,人们常用有向图来描述和分析一项工程的计划和实施过程,一个工程常被分为多个小的子工程,这些子工程被称为活动(Activity)。 在有向图中若以顶点表示活动&#xff…

Sentence Transformers x SwanLab:可视化Embedding训练

Sentence Transformers(又名SBERT)是访问、使用和训练文本和图像嵌入(Embedding)模型的Python库。 你可以使用Sentence Transformers快速进行模型训练,同时使用SwanLab进行实验跟踪与可视化。 1. 引入SwanLabCallback from swanlab.integra…

AI时代新爬虫:网站自动转LLM数据,firecrawl深度玩法解读

在大模型的时代,爬虫技术也有了很多新的发展,最近出现了专门针对大模型来提取网站信息的爬虫,一键将网页内容转换为LLM-ready的数据。今天我们介绍其中的开源热门代表:firecrawl。 firecrawl 是什么 FireCrawl是一款创新的爬虫工…

《2023-2024中国数据资产发展研究报告》

中国电子信息产业发展研究院发布《2023-2024中国数据资产发展研究报告》(下称《报告》),紧跟国家战略部署,调研国内数据资产发展现状,掌握数据价值实现路径,助力释放数字经济新动能。 《报告》从数据资产相…

这家来自内蒙古的物流企业,用另一种方式减碳超500吨

2016年,多蒙德实业集团整合旗下物流及运销板块,组建成立了内蒙古多蒙德科技有限公司(以下简称“多蒙德”),整合互联网、大数据及智慧物流为一体,自主研发多蒙达网络货运平台及多个供应链智慧系统&#xff0…

24年下教资笔试报名照片要求及处理方法

24年下教资笔试报名照片要求及处理方法

关闭kylin(麒麟)系统的安全认证(烦人的安全认证)

打开grub sudo vim /etc/default/grup修改安全认证选项 增加12行,把13行注释掉 保存更改, 然后执行下面的命令: sudo sync sudo reboot重启成功后,就关闭了安全认证了~~~~~。 总体来讲,kylin还是基于ubuntu的内核的,…

文章解读与仿真程序复现思路——电工技术学报EI\CSCD\北大核心《考虑源网储协同配合下的移动式波浪能发电平台并网优化调度》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

细说ARM MCU的串口接收数据的实现过程

目录 一、硬件及工程 1、硬件 2、软件目的 3、创建.ioc工程 二、 代码修改 1、串口初始化函数MX_USART2_UART_Init() (1)MX_USART2_UART_Init()串口参数初始化函数 (2)HAL_UART_MspInit()串口功能模块初始化函数 2、串口…

深入解析Prometheus:强大的开源监控与告警系统

目录 引言 一、运维监控平台的设计思路 (一)设计思路 1.数据收集模块 2.数据提取模块 3.监控告警模块 (二)监控平台层级 二、Prometheus简介 (一)基本介绍 (二)核心特征 …

vue+elementUI实现在表格中添加输入框并校验的功能

背景: vue2elmui 需求: 需要在一个table中添加若干个输入框,并且在提交时需要添加校验 思路: 当需要校验的时候可以考虑添加form表单来触发校验,因此需要在table外面套一层form表单,表单的属性就是ref…

救命!接手了一个老项目,见到了从业10年以来最烂的代码!

后台回复“书籍”,免费领取《程序员书籍资料一份》 后台回复“5000”,免费领取面试技术学习资料一份 在程序员这个行业从业快10年了,每过几个月回头看看自己写的代码,都会觉得写的也太烂了,不敢想象是自己之前写的。…

2024黄河流域比赛的复现

目录 WEB [GKCTF 2021]easynode unser 知识点 WEB 根据此题先复现[GKCTF 2021]easynode这个题,这两个题类似 [GKCTF 2021]easynode 1.打开页面发现是登录页面,找到源文件里面的代码,分析如何进行登录,发现经过safeQuery()函…