当前位置: 首页 > news >正文

HTTP【总结】

1. 当用户在浏览器输入网址回车之后,网络协议都做了哪些工作?

首先解析出URL中的域名,根据域名获取对应的ip地址,从浏览器缓存中查看,如果没有则从本机域名解析文件hosts中查看,还没有则从DNS的层层解析。
获取IP地址后,浏览器发起与服务器的三次握手。
握手建立之后,开始组装http请求报文,发送报文。
服务器收到请求报文之后开始请求报文解析,生成响应数据,发送响应数据。
浏览器收到响应之后,开始渲染页面。

2. TCP协议

面向连接的、可靠的、基于字节流的传输通信协议。
特点:基于连接的:数据传输之前需要建立连接;全双工:双向传输;字节流:不限制数据大小,打包成报文段,保证有序接收,重复报文自动丢弃;流量缓冲:解决双方处理能力的不匹配;可靠的传输服务:保证可达,丢包时通过重发机制实现可靠性;拥赛控制:防止网络出现恶性阻塞。
TCP连接:四元组(源地址、源端口、目的地址、目的端口)

三次握手:
客户端向服务器发送一个SYN报文(同步报文),其中包含客户端的SYN序列号(seq=x)。
服务器收到SYN报文后,向客户端回复一个SYN-ACK报文,表示同意建立连接,其中包含服务器和客户端的SYN序列号(seq=y和ack=x+1)。
客户端收到SYN-ACK报文后,向服务器发送一个ACK报文,确认连接建立,其中包含客户端的ACK序列号(seq=x+1和ack=y+1)。

三次握手的作用:
防止已失效的连接被当作新连接。通过三次握手,客户端和服务器都确认了彼此的存在和连接参数,避免了已失效的连接被当作新连接的情况。
确保连接的可靠性。三次握手可以确认双方都理解连接的建立过程,并且能够正常地接收和发送数据。
提高网络效率。三次握手避免了不必要的连接尝试,减少了网络拥塞,提高了网络效率。

四次挥手:
客户端发送FIN报文,请求关闭连接,此时客户端进入FIN_WAIT_1状态。
服务器收到FIN报文后,向客户端发送确认报文,并进入CLOSE_WAIT状态。
服务器完成所有任务后,向客户端发送FIN报文,请求关闭连接,此时服务器进入LAST_ACK状态。
客户端收到FIN报文后,向服务器发送确认报文,并进入TIME_WAIT状态。

四次挥手的作用:
客户端发送FIN报文,表示客户端不再发送数据,请求释放连接。
服务器收到FIN报文后,向客户端发送确认报文,表示同意释放连接。
服务器完成所有任务后,向客户端发送FIN报文,表示服务器不再发送数据,请求释放连接。
客户端收到FIN报文后,向服务器发送确认报文,表示同意释放连接。

3. 浏览器缓存策略

浏览器缓存:减少了沉余的数据传输,节省了网费;减少了服务器的负担,大大提升了网站的性能;加快了客户端加载网页的速度
浏览器缓存主要有两类:协商缓存、彻底缓存,也称协商缓存和强缓存。

强制缓存:不会向服务器发送请求,直接从缓存中读取资源,在chrome控制台的network控制台的network选项中可以看到请求返回200的状态码。

协商缓存:在使用本地缓存之前,需要向服务器发送请求,服务器会根据这个请求的request header的一些参数来判断是否命中协商缓存,如果命中,则返回304状态码并带上新的response header通知浏览器从缓存中读取资源;协商缓存可以解决强制缓存的情况下,资源不更新的问题。

强制缓存中header参数:
cache-control:max-age = 30;强缓存,代表这个请求正确返回时间。
cache-control:-no-cache;协商缓存,先与服务器确认返回的响应是否被更改,如果之前的响应中在ETag,那么请求的时候与服务器端验证,如果资源未被更改,可以避免重新下载。
cache-control:-no-store;直接禁止浏览器缓存数据,每次用户请求该资源,都会向服务器发送请求,每次都会下载完整的资源。
cache-control:- public;可以被所有的用户缓存,包括终端用户和cdn等中间代理服务器。
cache-control:-private;只能被终端用户的浏览器缓存,不允许cdn等中间代理服务器缓存。

协商缓存中header参数:
cache-control:-no-cache;不强制缓存
last-modify 最新修改时间:if-modify-since,浏览器第一次请求一个资源的时候,服务器返回的header中会加上last-modify,last-modify是一个时间标识该资源最后修改时间;当浏览器再次请求该资源时,request的请求头中会包含if-modify-since,该值为缓存之前返回的last-modify,服务器收到后,根据该资源的最后修改时间判断是否命中;如果修改时间和服务器的修改时间相同,则返回给客户端304,表示从客户端缓存中取值,服务器不再返回值。

Etag值资源文件对应的hash值:if-none-match,web服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器决定),if-none-macth发现资源具有Etage声明,则再次向web服务器请求时带上Etag的值,
web服务器收到请求后发现Etag的值与被请求资源的相应校验进行对比,决定是否命中协商缓存。

ETag和Last-modified的作用和区别:

  1. Etag优于Last-modified,last-modified的时间单位是秒,如果某个文件在1秒内改变多次,last- modified不会体现出来修改时间,Etag每次都会改变hash值确保精度。
  2. 在性能上,Etag逊于last- modified,last-modified只需要记录最后修改时间,而Etag需要通过服务器算法计算出hash值。

4. Http协议规定的协议头和请求头有什么?

请求头信息:
accept:浏览器告诉服务器所支持的数据类型
host:浏览器告诉服务器想访问服务器的哪台主机
referer:浏览器告诉服务器是从哪里来的(防盗链)
user-agent:浏览器类型、版本信息
date:浏览器告诉服务器什么时候访问的
cookie
x-request-with:请求方式
响应头信息:
location:告诉浏览器找谁
server:告诉服务器类型
content- type:告诉浏览器返回的数据类型
refresh:控制定时刷新

相关文章:

HTTP【总结】

1. 当用户在浏览器输入网址回车之后,网络协议都做了哪些工作? 首先解析出URL中的域名,根据域名获取对应的ip地址,从浏览器缓存中查看,如果没有则从本机域名解析文件hosts中查看,还没有则从DNS的层层解析。…...

统计子岛屿

统计子岛屿 关于岛屿的相似题目: 岛屿数量 – 二维矩阵的dfs算法封闭岛屿数量 – 二维矩阵的dfs算法统计封闭岛屿的数目统计子岛屿不同岛屿的数量 class CountSubIslands:"""floodFill 算法1254. 统计子岛屿https://leetcode.cn/problems/count-su…...

docker介绍、安装及卸载

官网安装教程:https://docs.docker.com/engine/install/centos/ ####### Docker介绍 ########## 镜像(image):Docker镜像就是一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。它也相当于是一…...

【EI/SCOPUS会议征稿】第二届环境遥感与地理信息技术国际学术会议(ERSGIT 2023)

第二届环境遥感与地理信息技术国际学术会议 2023 2nd International Conference on Environmental Remote Sensing and Geographic Information Technology 第二届环境遥感与地理信息技术国际学术会议(ERSGIT 2023)定于2023年11月10-12日在中国陕西西安…...

LabVIEW应用开发——LabVIEW2019保姆级介绍、安装、第一个程序

一、前言 LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而Lab…...

《TCP/IP网络编程》阅读笔记--Timewait状态和Nagle算法

1--Timewait状态 对于服务器端/客户端,当一端结束连接时,会向另一端发送 FIN 消息;两端的在经过四次挥手过程后,其 Socket 不会马上消除,而是会处于一个 Time-wait 状态的阶段,此时 Socket 拥有的端口号并没…...

Python常用IDE选择与安装

1、IDE简介 选择一款高效而又顺手的IDE学习或使用Python,可以让你的开发之路充满激情和动力,让你真正投入其中。 常见的Python的IDE工具有: PyCharm 由JetBrains开发的Python IDE,功能强大,支持调试、代码自动完成、…...

Docker从认识到实践再到底层原理(三)|Docker在Centos7环境下的安装和配置

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…...

Jmeter系列-Jmeter面板介绍和常用配置(2)

Jmeter面板介绍 常用菜单栏 分布式运行相关的 选项,可以打开日志,修改语言、函数助手对话框,还有管理插件 常用的图标 从左到右依次 新建测试计划选择测试计划模板创建一个新的测试计划打开jmeter脚本保存jmeter脚本剪切复制粘贴展开目录…...

2023高教社杯数学建模D题思路分析 - 圈养湖羊的空间利用率

# 1 赛题 D 题 圈养湖羊的空间利用率 规模化的圈养养殖场通常根据牲畜的性别和生长阶段分群饲养, 适应不同种类、不同阶段 的牲畜对空间的不同要求,以保障牲畜安全和健康;与此同时,也要尽量减少空间闲置所造成 的资源浪费。在实际…...

自动部署工具PM2

在现代应用程序开发中,自动化部署是一项至关重要的任务。它可以帮助我们快速、可靠地将代码部署到生产环境中,并确保应用程序的持续运行。在这方面,PM2(Process Manager 2)是一个备受欢迎的自动部署工具。本文将详细介…...

软考高级系统架构设计师系列案例考点专题三:数据库系统考点梳理及精讲

软考高级系统架构设计师系列案例考点专题三:数据库系统考点梳理及精讲 一、ORM技术二、数据库分类比较三、并发控制四、封锁协议五、不规范化带来的四大问题六、反规范化技术七、分布式数据库八、数据仓库集成数据库系统知识在架构设计师的考试里时有考查,主要考查的是数据库…...

【 XXL-JOB】 XXL-JOB任务分片

文章目录 前言xxl-job 分片广播任务的详细教程创建任务编写任务代码分片参数设置执行任务查看任务执行结果示例1示例2 总结 前言 xxl-job 是一个分布式任务调度平台,支持定时任务和分片任务。其中,分片任务可以将一个大任务拆分成多个小任务&#xff0c…...

RK3568开发笔记-SATA接口调试

目录 前言 一、sata接口介绍 物理连接 数据传输速度...

异步编程 - 09 Spring框架中的异步执行_@Async注解异步执行原理源码解析

文章目录 概述小结好文推荐 概述 在Spring中调用线程将在调用含有Async注释的方法时立即返回,Spring是如何做到的呢?其实是其对标注Async注解的类做了代理,比如下面的类Async-AnnotationExample。 public class AsyncAnnotationExample {As…...

django-项目

一、RESTful设计风格 基础概念 全称:Representational State Transfer 1.资源 网络上的一个实体,每个资源都有一个独一无二的URL与之对应;获取资源-直接访问URL即可 2.表现层 资源的表现形式 如HTML、xml、JPG、json等 3.状态转化 …...

红日靶场五(vulnstack5)渗透分析

环境搭建 win7 192.168.111.132(仅主机) 192.168.123.212(桥接) .\heart p-0p-0p-0win2008 ip: 192.168.111.131(仅主机) sun\admin 2020.comkali ip: 192.168.10.131(nat)vps&…...

掌握Gitflow的一些进阶用法

1、自定义分支命名约定: 默认情况下,GitFlow使用一套分支命名约定,如feature/、release/和hotfix/等前缀。然而,你可以根据项目的需求自定义分支名称。例如,你可以在分支名称中包含项目、功能或团队成员的信息&#x…...

算法随笔:各种经典最短路算法的简要比较总结

有多种最短路径的应用场景,它们需要用到不同的算法来解决。除了贪心最优搜索之外,其他都是最优性算法,即得到的解都是最短路径。其中m是边的数量,n是点的数量。 问题边权算法时间复杂度一个起点,一个终点非负数&#…...

concrt140.dll怎么下载,concrt140.dll修复工具(修复精灵下载)一键修复问题

今天,我将为大家介绍一个非常常见的问题:由于找不到concrt140.dll,无法继续执行代码怎么办。这个问题可能会让很多网友感到头疼,但是别担心,我会为大家提供5种最全详细的恢复方法。在接下来我将详细介绍这些问题及其解决方法。希望…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)

cd /home 进入home盘 安装虚拟环境&#xff1a; 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境&#xff1a; virtualenv myenv 3、激活虚拟环境&#xff08;激活环境可以在当前环境下安装包&#xff09; source myenv/bin/activate 此时&#xff0c;终端…...