计算机网路HTTP、TCP详解

embedded/2025/1/8 11:43:22/

HTTP

HTTP基本概念

HTTP(超文本传输协议):HTTP是在计算机世界中两点之间传输文字、图片、视频等超文本内容数据的约束与规范

常见状态码:

2xx:报文被收到,已经在正确处理中。

3xx:重定向,资源位置发生改变,需要客户端重新发请求。

4xx:客户端错误,请求报文有问题,服务器无法处理。

5xx:服务器错误,服务器在处理内部请求时发生了错误。

HTTP常见字段

Host:客户端发送请求时用来寻找服务器的域名(域名通过DNS解析找到服务器IP,到达服务器后通过host找到需要在服务器中访问的网址)

Content-Length:表示响应的长度。HTTP请求通过回车符作为header的结束,通过Content-Length作为body的结束。

Content-Type:服务器向客户端返回值时,告诉客户端返回的格式是什么,例如UTF-8。这个值可以通过response.setHeader("Content-Type", "text/html;charset=UTF-8");

Connection(设置为Keep-Alive):表示开启HTTP长连接,只要客户端或者服务器某一端不提出断开连接的请求,那么TCP就不会断开连接。但是在HTTP2的时候已经是默认长连接了。

GET与POST

GET:在RPC的定义下,GET请求主要是从服务器中获取指定资源

POST:在RPC的定义下,POST请求主要是从服务器中修改指定资源

GET与POST是安全或者是幂等的吗?

GET请求:获取指定资源是一个查询操作,所以不论是请求一次还是一万次他都是同一个值,所以GET请求时安全并且幂等的操作。因为多次操作获取值是相同的,所以GET请求的返回值是会被浏览器进行缓存

POST请求:修改指定资源,他可能是一个新增或者提交操作,所以多次请求他就会新增多条数据,那么他就不是幂等的操作。而POST请求不会被浏览器进行缓存

HTTP缓存技术

当多次请求返回值都一样时,浏览器会将结果存储到浏览器中,这样就不需要去请求服务器了。缓存方式分为:强制缓存和协商缓存。

强制缓存:

强制缓存指只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存,决定是否使用缓存的主动性在于浏览器这边

https://i-blog.csdnimg.cn/direct/a7a3dd4217624473a552206e76d5dbb8.png" width="812" />

当浏览器第一次请求服务器时,如果服务器在response中添加了Cache-Control字段设置浏览器强制缓存时间下次请求时,先判断Cache-Control到期时间,如果没到期直接从缓存中获取数据。服务器再次获取该请求时会再次设置Cache-Control时间。

协商缓存:

协商缓存就是与服务端协商过后,通过服务端告诉你是否可以使用本地缓存。服务器会响应一个304告诉客户端可以使用本地缓存。

https://i-blog.csdnimg.cn/direct/77ff8adc71af4df6b21a99c2b6935b72.png" width="778" />

响应头部,包含Etag存储资源唯一标识。请求头部包含if-none-match,当资源过期时会将if-none-match值设置为Etag,判断资源是否发生变化,如果不变化返回304继续使用缓存,变化返回200重新加载资源。

这种方式的优势,解决没有修改文件内容,修改时间改变问题、修改在秒级以下也能监控。所以Etag优先级比根据资源修改时间判断的优先级更高

协商缓存这两个字段都需要配合强制缓存中 Cache-Control 字段来使用,当强制缓存没有命中之后,才会跟服务器之间进行协商缓存

https://i-blog.csdnimg.cn/direct/813724b2245949868ac7452d027b68df.png" width="838" />

HTTP1.1的特性

优点:HTTP的优点就是简单,报文通过key-value的形式存在在header或者body里面。同时他位于OSI协议的最顶层,他的下层有更高的灵活性,例如HTTPS便是在HTTP与TCP加入了SSL/TLS安全协议。HTTP广泛的使用,不论手机端还是PC端都是通过HTTP进行请求。

缺点:HTTP的两大缺点,无状态(需要重复验证)与明文传输(不安全)。

无状态:

        无状态的好处就是服务器可以不用处理更多资源,坏处在于关联操作时每次都需要进行验证(登录->加入购物车->下单->支付。每个过程都需要验证身份信息)。我们通过Cookie(服务器发给浏览器一个凭证)可以解决这个问题。

明文传输:

        HTTP的信息不安全,写在url上或者Body里面,通过抓包就可以获取数据了。HTTPS通过SSL/TLS安全协议对数据进行加密解决该问题。

HTTPS与HTTP

        HTTPS对比HTTP的主要改变就是变的更加安全,通过在TCP协议中添加SSL/TLS协议从而进行信息加密、校验机制、身份证书解决了安全问题。

        HTTPS通过对称加密(只使用公钥验证)+非对称加密(公钥私钥一起验证)摘要算法+数字签名数字证书(权威机构申请)三种方式共同保证HTTPS的安全性。

HTTP1.0/1.1/2的演变

HTTP1.1对比HTTP1.0的优势是支持长连接、管道

HTTP2(基于HTTPS)对比HTTP1.1的优势是数据安全,性能上支持二进制格式、并发传输、服务器推送

TCP

三次握手四次挥手

三次握手(客户端与服务端状态变化也需要牢记):

https://i-blog.csdnimg.cn/direct/5b1849bee40c4fb8a13c0b55f9e05657.png" width="727" />

为什么不是是两次握手

两次握手会导致历史连接,避免资源的浪费理论上三次连接就能避免任何问题,所以不需要四次连接。

2.25分讲解什么是历史连接

TCP如何解决丢包问题与乱序问题

https://i-blog.csdnimg.cn/direct/5874e07bccc147b8859e4bd88f224284.png" width="1075" />

四次挥手

https://i-blog.csdnimg.cn/direct/d3cbd5cc9f1e4285ac3055096c15565b.png" width="1200" />

为什么要有超时等待状态?

        因为当在第四次挥手时,如果ACK包发送失败,而客户端已经关闭。那么服务端将一直处于最后确认状态。所以,超时等待状态是为了预防ACK包发送失败所设置的状态。


http://www.ppmy.cn/embedded/152267.html

相关文章

第31天:Web开发-PHP应用TP框架MVC模型路由访问模版渲染安全写法版本漏洞

#知识点 1、安全开发-框架技术-ThinkPHP 2、安全开发-框架安全-版本&写法 3、安全开发-ThinkPHP-代码审计案例 类别 组件/框架 说明 [Web框架] Laravel 现代化、功能全面的框架,适合大多数Web应用。 Symfony 高度模块化、功能强大的框架,适…

Ubuntu 下载安装 Consul1.17.1

下载 来到 Consul 的下载页面:https://developer.hashicorp.com/consul/install?product_intentconsul 上面标注的地方可以切换你想要的版本,复制下载链接,使用 wget 下载这个文件: wget https://releases.hashicorp.com/consu…

每天你好20250108(距离春节21天!!!)

亲爱的朋友们,大家早上好! 🌞 今晨乃 2025 年 1 月 8 日,星期三,农历乙巳[蛇]年十一月十九日。祥蛇纳福,灵辉熠熠,旭日初升,仿若玉盘倾落金芒,穿破霭霭晨雾,…

【QT】增删改查 XML 文件的类

使用单例类模板实现的对XML文件的节点、属性、文本进行增删改查&#xff0c;可以直接用&#xff01; 直接POST代码&#xff0c;比较简单好用。 针对以下格式的xml文件比较适用 每个节点的名称都不一样&#xff0c;节点包含了各种属性。 <?xml version"1.0" enco…

Unity:删除注册表内的项目记录

然后WinR按键输入regedit 打开注册表 在注册表 HKEY CURRENT USER—>SOFTWARE—>Unity—>UnityEditor—>DefaultCompany —>language_Test 中&#xff0c;删除我们的之前存储的语言环境数据。在 “ 三、文本调用和替换 ” 测试时已经将语言环境存储到注册表中了…

【代码随想录】刷题记录(91)-根据身高重建队列

题目描述&#xff1a; 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构…

RK3568-ubuntu旋转显示和触摸

旋转屏幕显示 临时生效&#xff1a;xrandr -o <normal,inverted,left,right,0,1,2,3> 永久生效&#xff1a;/etc/X11/Xsession.d/55gnome-session_gnomerc最后一行添加临时生效命令旋转屏幕触摸 方法1&#xff1a;cp /usr/share/X11/xorg.conf.d/40-libinput.conf /etc…

【人工智能深度学习框架】——深入详解人工智能深度学习框架之TensorFlow高级功能:Keras接口、分布式训练,快速搭建和训练深度学习模型

深入详解人工智能深度学习框架之 TensorFlow 高级功能&#xff1a;Keras 接口、分布式训练 TensorFlow 是目前最为流行的深度学习框架之一&#xff0c;广泛应用于学术研究和工业生产中。TensorFlow 的高级功能使得开发者可以更加高效地构建、训练和部署深度学习模型。下面我们…