计算机网路HTTP、TCP详解

news/2025/1/12 11:41:55/

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/news/1562493.html

相关文章

搭建docker私有化仓库Harbor

Docker私有仓库概述 Docker私有仓库介绍 Docker私有仓库是个人、组织或企业内部用于存储和管理Docker镜像的存储库。Docker默认会有一个公共的仓库Docker Hub,而与Docker Hub不同,私有仓库是受限访问的,只有授权用户才能够上传、下载和管理其中的镜像。这种私有仓库可以部…

HOW - Form 表单确认校验两种模式(以 Modal 场景为例)

目录 一、背景二、具体1. 模式一:点击确认进行校验提示2. 模式二:确认按钮依赖于表单内容实现说明 一、背景 基于react、antd form分别实现如下两种模式: 1、一个 Modal,点击确认进行校验提示2、一个 Modal,确认按钮…

蓝桥杯嵌入式速通(1)

1.工程准备 创建一文件夹存放自己的代码,并在mdk中include上文件夹地址 把所有自身代码的头文件都放在headfile头文件中,之后只需要在新的文件中引用headfile即可 headfile中先提前可加入 #include "stdio.h" #include "string.h"…

uni-app如何引入echarts

在uni-app官网的官网插件中找echarts 打开图片对应的echarts&#xff0c;点击下载并导入插件 如果是vue3使用const echarts require(../../uni_modules/lime-echart/static/echarts.min);引入echarts <template><view><view style"width:750rpx; height:…

Qiskit快速编程探索(基本篇)

一、引言 1.1 量子计算的崛起 量子计算作为当今科学界与技术领域最具开创性的前沿方向之一&#xff0c;正逐步重塑我们对计算能力的认知边界。自20世纪初量子力学理论奠基以来&#xff0c;历经无数科学家的不懈钻研&#xff0c;量子计算从抽象的理论构想逐步走向现实应用的舞…

多租户系统的实现方案

多租户架构&#xff08;Multi-Tenant Architecture&#xff09;是一种在单个系统中支持多个独立租户&#xff08;客户或公司&#xff09;的设计模式。每个租户可以拥有自己独立的数据、业务逻辑、用户界面等。多租户架构通常被应用于SaaS&#xff08;Software as a Service&…

通过ESP32和INMP441麦克风模块实现音频数据传递

在现代物联网&#xff08;IoT&#xff09;项目中&#xff0c;音频数据的采集与传输成为了一个热门的应用领域。通过结合ESP32开发板和INMP441麦克风模块&#xff0c;我们可以实现一个低成本、高效率的音频数据传输系统。本文将详细介绍如何使用这两种硬件组件来构建和测试音频传…

Nginx代理同域名前后端分离项目的完整步骤

前后端分离项目&#xff0c;前后端共用一个域名。通过域名后的 url 前缀来区别前后端项目。 以 vue php 项目为例。直接上 server 模块的 nginx 配置。 server{ listen 80; #listen [::]:80 default_server ipv6onlyon; server_name demo.com;#二配置项目域名 index index.ht…