「计算机网络」初识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

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

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

相关文章

conda添加镜像源与channels

文章目录 一、conda下添加国内镜像源(window下)二、pip配置国内镜像源(window下,临时修改)三、conda源的定义 一、conda下添加国内镜像源(window下) 1、为【channels】配置清华镜像通道 直接在…

英伟达开源 3400 亿巨兽:98% 合成数据训出最强开源通用模型,性能对标 GPT-4o

NVIDIA 最近开源了其大型语言模型 Nemotron-4 340B,这是一个具有划时代意义的模型,它使用了高达 98% 的合成数据进行训练,并且在性能上与 GPT-4 相当。Nemotron-4 340B 包括基础模型、指令模型和奖励模型,支持 4K 上下文窗口、50 …

配置完eslint没有用?

当你使用 npx eslint --init 生成配置文件后 你也配置好了.prettierrc 当你在代码写一点小问题的时候 发现eslint没有进行检查 原因是你生成的 .eslintrc.js中没有加上这个配置 extends: [.....plugin:prettier/recommended],加上以后重启vscode你会发现

BUUCTF---[MRCTF2020]你能看懂音符吗

1、下载附件,是一个压缩包,解压,发现解压失败 2、用winhex分析文件,发现文件头不对 3、将文件头改为:52617221,保存 4、解压得到word 5、在文档发现下面内容 6、根据题目的描述,将音乐字符解码…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 停车场车位统计(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 停车场车位统计(100分) 🌍 评测功能需要订阅专栏后私信联…

邮件钓鱼--前置-攻击防范 7 看

目录 1、什么是 SPF: 2、如何判断 SPF: 3.邮件钓鱼防范:7 看 1、什么是 SPF: SPF 记录:原理、语法及配置方法简介 (zhetao.com) SPF记录详解_spf写法-CSDN博客 发件人策略框架(Sender Policy Frame…

Vue45-分析脚手架结构

一、脚手架项目结构一览 二、src、public文件夹外的文件 2-1、babel.config.js文件 详细的配置规格:babel官网。 2-2、package.json包的说明书 build命令:代码写完了,最后使用build命名构建整个工程,将其变成浏览器能够运行的项…

【数据结构】第十六弹---C语言实现希尔排序

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、希尔排序( 缩小增量排序 ) 1.1、预排序实现 1.2、希尔排序代码实现 1.3、代码测试 1.4、时空复杂度分析 1.5、性能比较 总结 上一弹我们…

统计信号处理基础 习题解答10-17

题目: 在选择不含信息的或者不假设任何先验知识的先验PDF时,我们需要从数据中得到最大的信息量。在这种方式下,数据是了解未知参数的主要贡献者。利用习题10.15的结果,这种方法可以通过选择使I最大的来实现。对于例10.1的高斯先验PDF,该如何选择和2使得 是不含信息…

玄机平台应急响应—MySQL应急

前言 这个是比较简单的,其实和MySQL没啥太大的关系,没涉及太多MySQL的知识。看一下它的flag要求吧。 flag1 它说黑客写入的shell,那我们就去它的网站目录去看看,果然有一个叫sh.php的文件。 flag1{ccfda79e-7aa1-4275-bc26-a61…

【深度学习】CICIDS 2019,入侵检测,SVM支持向量机,随机森林,DNN训练,混淆矩阵

文章目录 数据集介绍Python环境随机森林训练结果SVM支持向量机训练结果DNN训练结果所有代码下载 数据集介绍 下载:https://www.kaggle.com/datasets/tarundhamor/cicids-2019-dataset 数据个数: # 删除label中是WebDDoS的数据df df[df[Label] ! WebDD…

简单的心电图信号分割方法

代码很简单,很容易看懂。 import pandas as pdimport matplotlib.pyplot as plt #headers [Name, Age, Marks]df pd.read_csv(samples-folder/samples2.csv) dfdf.drop(0)dfdf.drop(1)# print(df) if(len(df.columns) 3): df.columns [sample interval, sig…

linux中安装jdk

1.查看jdk是否安装 java -version 2.搜索java yum -y list java* 3. 安装 yum install -y java-1.8.0-openjdk.x86_64 安装完成 验证

2024年实体门店和企业怎么做短视频矩阵?一文带你了解清楚

不知道大家有没有刷到过这个直播间,潮汕一位做牛丸的大哥,看起来直播间内容平平无奇,也就几十个人的直播间观看,但是他通过短视频矩阵的方式卖了150万单牛丸你敢信? 那你猜猜他通过短视频矩阵发了多少条视频&#xff…

python-求f(x,n)

[题目描述] 输入: 输入 𝑥和 𝑛。输出: 函数值,保留两位小数。样例输入1 4.2 10 样例输出1 3.68 来源/分类(难度系数:一星) 完整代码如下: x,nmap(eval,input().split(…

记周末百度云防御CC攻击事件

今天一早,收到百度智能云短信提醒,一位客户的网站遭遇了CC攻击。 主机吧赶紧登陆客户网站查看,是否正常,看是否需要通知客户。 结果打开正常,看情况并没什么影响,那就等攻击结果了再看吧。 下午的时候&am…

嵌入式操作系统_6.任务间通信

1.任务间通信管理 任务间通信管理也是嵌入式操作系统的关键功能之一。它主要为操作系统的应用程序提供多种类型的数据传输、任务同步/异步操作等手段。 2.操作系统任务之间的关系 由于嵌入式操作系统是为应用提供管理、硬件支持、协调任务和中断处理程序等功能,具备…

环保绩效评级:ABCD四个等级,你的企业处于哪个水平?

在当下社会,环保问题越来越受到人们的关注和重视。企业作为经济活动的重要参与者,其环保绩效评级直接关系到环境保护的成效。朗观视觉将详细解析环保绩效评级的ABCD四等级,帮助读者了解不同等级的特点和评判标准,进而引导企业提高…

Hexo 搭建个人博客(ubuntu20.04)

1 安装 Nodejs 和 npm 首先登录NodeSource官网: Nodesource Node.js DEB 按照提示安装最新的 Node.js 及其配套版本的 npm。 (1)以 sudo 用户身份运行下面的命令,下载并执行 NodeSource 安装脚本: sudo curl -fsSL…

Linux笔记--vi编辑器

vi编辑器 基本操作 对于vi编辑器有这几种模式 移动 当编辑一个过大的文件时通过方向键移动光标过慢所以可以使用快捷键进行移动 编辑 dw指令只能在单词第一个字母处使用 D指令删除的是当前行 查找替换 pattern指代想要搜索的内容