计算机网路HTTP、TCP详解

server/2025/1/11 15:33:29/

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/server/157505.html

相关文章

编写python的几种方式

编写python的三种方式: 1、在IDLE中直接编写 但这个方法是单命令执行,也就是编写一行后按回车键就会运行一下,适用于简单计算,不适用于编写多行代码 2、进入IDLE后新建一个编写页面,这个页面可以编写多行代码并统一执…

Spring MVC详细介绍

1.MVC 设计模式 MVC(Model-View-Controller)是一种常见的软件设计模式,用于将应用程序的逻辑分离成三个独立的组件: 模型(Model):模型是应用程序的数据和业务逻辑的表示。它负责处理数据的读取…

vue实现点击按钮复制文本

在Vue项目中&#xff0c;实现点击按钮复制文本到剪贴板有多种方法。以下是三种常见的实现方案&#xff1a; 使用原生API 可以使用原生的JavaScript API来实现复制功能。以下是一个简单的示例&#xff1a; <template><div><button click"copyText"&…

PyCharm 的安装与使用(Window)

1 PyCharm 简介 PyCharm 是一款由 JetBrains 公司开发的专门用于 Python 语言开发的集成开发环境&#xff08;IDE&#xff09;。以下是其相关介绍&#xff1a; 1.1 特点与功能 智能代码编辑&#xff1a;提供高度智能化的代码编辑器&#xff0c;支持语法高亮、自动补全、代码重…

互联网生活中的隐私保护:用隐私换便利还是花钱护隐私?

隐私与便利&#xff1a;数字世界的选择 在这个数字化的时代&#xff0c;你是否曾经停下来思考过&#xff0c;当你享受快捷便利的网络服务时&#xff0c;自己的隐私究竟付出了什么代价&#xff1f;一个无处不在的事实是&#xff0c;我们的个人信息每天都在被收集、分析&#xf…

学习通过几何约束从单个图像预测 3D 车道形状和相机姿态 | 论文解读

学习通过几何约束从单个图像预测 3D 车道形状和相机姿态 | Learning to Predict 3D Lane Shape and Camera Pose from a Single Image via Geometry Constraints https://zhuanlan.zhihu.com/p/563985000https://zhuanlan.zhihu.com/p/563985000

Windows11环境下设置MySQL8字符集utf8mb4_unicode_ci

1.关闭MySQL8的服务CTRLshiftESC&#xff0c;找到MySQL关闭服务即可 2.找到配置文件路径&#xff08;msi版本默认&#xff09; C:\ProgramData\MySQL\MySQL Server 8.0 3.使用管理员权限编辑my.ini文件并保存 # Other default tuning values # MySQL Server Instance Config…

uniApp通过xgplayer(西瓜播放器)接入视频实时监控

&#x1f680; 个人简介&#xff1a;某大型国企资深软件开发工程师&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码喽的自我修养&#x1f9…