面试之快速学习计算机网络-http

news2024/12/23 17:43:32

1. HTTP常见状态码

在这里插入图片描述
2. 3开头重定向,4开头客户端错误,5开头服务端错误

2. HTTP 报文

在这里插入图片描述

1. start-line:请求行,可以为以下两者之一:

  • 请求行: GET /hello-world2.html HTTP/1.1
  • 状态行:HTTP/1.1 200 OK
  1. 请求行由方法字段URL字段HTTP协议版本字段。其中,方法字段严格区分大小写,当前HTTP协议中的方法都是大写
  2. 状态行包括三个字段:协议版本状态码原因短语

2 . 请求头

Host: 请求的主机名和端口号,虚拟主机环境下用于不同的虚拟主机
Referer:指明了请求当前资源的原始资源的URL
User-Agent: 用户代理,使用什么工具发出的请求

1、Accept首部:用户标明客户自己更倾向于支持的能力
Accept: 指明服务器能发送的媒体类型
Accept-Charset: 支持使用的字符集
Accept-Encoding: 支持使用的编码方式
Accept-Language: 支持使用语言

2、条件请求首部:
Expect: 告诉服务器能够发送来哪些媒体类型
If-Modified-Since: 是否在指定时间以来修改过此资源
If-None-Match:如果提供的实体标记与当前文档的实体标记不符,就获取此文档
跟安全相关的请求首部:
Authorization: 客户端提交给服务端的认证数据,如帐号和密码
Cookie: 客户端发送给服务器端身份标识

在这里插入图片描述

3. 响应头

Date标头:消息产生的时间

Age标头:(从最初创建开始)响应持续时间

Server标头: 向客户端标明服务器程序名称和版本

ETage标头:不透明验证者

Location标头:URL备用的位置

Content-Length标头:实体的长度

Content-Tyep标头:实体的媒体类型

在这里插入图片描述

4.GET 和 POST 有什么区别?

  1. GET 的语义是从服务器获取指定的资源
  2. POST 的语义是根据请求负荷(报文body)对指定的资源做出处理
  3. 两者都可以带数据,GET请求的数据拼接到url上,POST在body上
  4. 由于GET放在url上,故携带的数据览器会对 URL 的长度有限制(HTTP协议本身对 URL长度并没有做任何规定),POST能携带的资源更多。
  5. 安全: 请求方法不会「破坏」服务器上的资源。GET安全POST不一定
  6. 幂等:多次执行相同的操作,结果都是「相同」的。GET幂等POST不一定
  7. GET只接受ASCII字符,而POST没有限制。.

5. HTTP 缓存技术

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

  • 当浏览器第一次请求访问服务器资源时,服务器会在返回这个资源的同时,在 Response 头部加上 Cache-Control,Cache-Control 中设置了过期时间大小;
  • 浏览器再次请求访问服务器中的该资源时,先从浏览器找,会先通过请求资源的时间与 Cache-Control 中设置的过期时间大小,来计算出该资源是否过期,如果没有,则使用该缓存,否则重新请求服务器;
  • 服务器再次收到请求后,会再次更新 Response 头部的 Cache-Control。

5. 协商缓存

  1. 协商缓存是指通过服务端告知客户端是否可以使用缓存的方式,即与服务端协商之后,通过协商结果来判断是否使用本地缓存。
  • 第一种(基于时间实现的):请求头部中的 If-Modified-Since 字段与响应头部中的 Last-Modified 字段实现,这两个字段的意思是:

响应头部中的 Last-Modified:标示这个响应资源的最后修改时间;
请求头部中的 If-Modified-Since:
当资源过期了,发现响应头中具有 Last-Modified 声明,则再次发起请求的时候带上 Last-Modified 的时间,
服务器收到请求后发现有 If-Modified-Since 则与被请求资源的最后修改时间进行对比(Last-Modified),
如果最后修改时间较新(大),说明资源又被改过,则返回最新资源,HTTP 200 OK;如果最后修改时间较旧(小),说明资源无新修改,响应 HTTP 304 走缓存

  • 第二种(基于唯一标识实现的):请求头部中的 If-None-Match 字段与响应头部中的 ETag 字段,这两个字段的意思是:
    响应头部中 Etag:唯一标识响应资源;
    请求头部中的 If-None-Match:
    当资源过期时,浏览器发现响应头里有 Etag,则再次向服务器发起请求时,会将请求头 If-None-Match 值设置为 Etag 的值。
    服务器收到请求后进行比对,如果资源没有变化返回 304,如果资源变化了返回 200。

可以理解一个是用修改时间来比较,一个直接比较是否修改比较的是Etag唯一标识

注意:协商缓存这两个字段都需要配合强制缓存中 Cache-Control 字段来使用,只有在未能命中强制缓存的时候,才能发起带有协商缓存字段的请求。

可知:

  1. 缓存始终在浏览器
  2. 如果没有命中强制缓存的情况,可能是因为浏览器设置的cache-control失效了(因为只是一个时间断),但是注意并不代表浏览器的缓存真的失效。
  3. 真正判断是否失效时服务端再次协商缓存来判断的。
    在这里插入图片描述

6. HTTPS 与 HTTP

HTTP 与 HTTPS 的区别

· HTTP 是超文本传输协议,信息是**明文传输,**存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。

· HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。

· 两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443

· HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

7. SSL/TSL四次握手

  1. 客户端发送请求(ClientHello)
    客户端(通常是浏览器)先向服务器发出加密通信的请求,这被叫做ClientHello请求。客户端提供了:
  • 支持的协议版本,比如TLS 1.0版。
  • 一个客户端生成的随机数,用于后面生成“对话密钥”
  • 支持的加密方法,如rsa公钥加密
  1. 服务器回应(SeverHello)
  • 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信
  • 确认加密方法,比如RSA公钥加密。
  • 返回加密公钥服务器证书
  1. 客户端回应
  • 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
  • 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密
  • 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
  1. 服务器
  • 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
  • 使用密码加密一段握手消息,发送给浏览器。

下面这个图比较清楚

需要注意的是:最后用的对称加密是由, 客户端生成的随机字符串服务端生成的随机字符串以及 随后用公钥加密生成的随机字符串三者用约定的加密算法得到的一个密钥

8. HTTP明文传输的风险以及解决方法

  1. 风险:
  • 信息加密:交互信息无法被窃取,但你的号会因为「自身忘记」账号而没。
  • 校验机制:无法篡改通信内容,篡改了就不能正常显示,但百度「竞价排名」依然可以搜索垃圾广告。
  • 身份证书:证明淘宝是真的淘宝网还是冒充,但你的钱还是会因为「剁手」而没。

总结: 窃取,篡改,冒充

  1. 解决:
  • 混合加密的方式实现信息的机密性,解决了窃听的风险。
  • 摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决了篡改的风险。
  • 将服务器公钥放入到数字证书中,解决了冒充的风险。

数字签名:
在这里插入图片描述
注意:
1 . 数字签名里面,私钥加密,公钥解密
2 . 且加密和解密的一直是一个哈希值(由内容计算出来,所谓的数字签名),这个哈希值也会随着内容发出去,解密后的数字签名和哈希值做比对,判断是否被篡改。

9.抓包原理

比如我用的Charles:

  1. Charles作为一个中间人代理,当浏览器和服务器通信时,Charles接收服务器的证书,但动态生成一张证书发送给浏览器
  2. 也就是说Charles作为中间代理在浏览器和服务器之间通信,所以通信的数据可以被Charles拦截并解密。
  3. 由于Charles更改了证书,浏览器校验不通过会给出安全警告,必须安装Charles的证书后才能进行正常访问。

总结:Charles需要做的事情是对客户端伪装服务端,对服务端伪装客户端:

注意:前提是客户端选择信任并安装Charles的CA证书。

10. 请求方法

  1. get 方法
    发送一个请求来取得服务器上的某一资源。

  2. post 方法
    向 url 指定的资源提交数据或附加新的数据。

  3. put 方法
    put 方法跟 post 方法很像,也是向服务器提交数据,但是 put 方法指向了资源在服务器上的位置,而 post 方法没有。

  4. head 方法
    只请求页面的首部。

  5. delete 方法
    删除服务器上的某资源。

  6. options 方法
    options 方法用于获取当前 url 所支持的方法。如果请求成功,会有一个 allow 的头包含类似 get、post 这样的信息。

  7. trace 方法
    trace 方法被用于激发一个远程的,应用层的请求消息回路。类似echo?

  8. connect 方法
    把请求连接转换到透明的 tcp/ip 通道。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于模板的大致认识【C++】

文章目录 函数模板函数模板的原理函数模板的实例化模板参数的匹配原则 类模板类模板的定义格式类模板的实例化 非类型模板参数typename 与class模板的特化函数模板特化类模板特化全特化偏特化 模板的分离编译 函数模板 函数模板的原理 template <typename T> //模板参数…

el-input输入框 输入数字中文 来回切换之后 监听失效问题如何解决

实现一个vue自定义指令——输入框&#xff08;input,el-input&#xff09;输入内容类型限制&#xff0c;解决中文输入法双向绑定失效问题&#xff0c;多种类型支持&#xff0c;数字类型&#xff0c;浮点类型、英文类型、整数类型、四则运算等 直接上代码 首先新建input.js ex…

Git如何操作本地分支仓库?

基本使用TortoiseGit 操作本地仓库(分支) 分支的概念 几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来&#xff0c;避免影响开发主线。多线程开发,可以同时开启多个任务的开发&#xff0c;多个任务之间互不影响。 为何要…

10个好用的网络画图工具推荐,专业办公绘图必备!

在当今数字化时代&#xff0c;网络画图工具成为了各行各业的重要辅助工具。无论是制作流程图、思维导图、原型设计&#xff0c;还是插图绘制、数据可视化&#xff0c;网络画图工具为用户提供了便捷、高效的创作平台。本文将向大家推荐10个好用的网络画图工具&#xff0c;帮助你…

深度解析淘宝API商品评论接口的实现原理与使用方法

淘宝API商品评论接口&#xff0c;主要用于获取某个商品的评价信息。通过该接口&#xff0c;我们可以获取到商品的所有评价内容、评价时间、评价等级等相关信息&#xff0c;帮助我们更好地了解用户对商品的反馈&#xff0c;进而进行数据分析和业务优化。 一、接口鉴权 在使用淘…

波奇学C++:stl的list模拟实现

list是双向带头链表。所以迭代器end()相当于哨兵卫的头。 list不支持和[]重载&#xff0c;原因在于list空间不是连续的&#xff0c;和[]的代价比较大。 访问第n个节点&#xff0c;只能用for循环&#xff0c;来实现 list<int> l; l.push_back(0); l.push_back(1); l.pu…

代码随想录算法训练营之JAVA|第三十五天|343. 整数拆分

今天是第 天刷leetcode&#xff0c;立个flag&#xff0c;打卡60天&#xff0c;如果做不到&#xff0c;完成一件评论区点赞最高的挑战。 算法挑战链接 343. 整数拆分https://leetcode.cn/problems/integer-break/ 第一想法 题目理解&#xff1a;将一个整数拆分为k个整数&…

python matlab 画坐标图

画一个坐标系&#xff0c;同时显示两条直线&#xff0c;效果图如下&#xff1a; 功能点&#xff1a; 同时显示两个纵坐标数据 显示图片名称 图片最大化保存 到本地 在图片某个位置显示字符信息 不同的线名称提示 代码如下&#xff1a; import matplotlib.pyplot as pltde…

学习左耳听风栏目90天——第七天 7/90(学习左耳朵耗子的工匠精神,对技术的热爱)【每个程序员都该知道的事】

每个程序员都该知道的事 每个程序员都应该要读的书每个搞计算机专业的学生应有的知识LinkedIn 高效的代码复查技巧编程语言和代码质量的研究报告 每个程序员都应该要读的书 每个搞计算机专业的学生应有的知识 LinkedIn 高效的代码复查技巧 编程语言和代码质量的研究报告

C++头文件和std命名空间

C 是在C语言的基础上开发的&#xff0c;早期的 C 还不完善&#xff0c;不支持命名空间&#xff0c;没有自己的编译器&#xff0c;而是将 C 代码翻译成C代码&#xff0c;再通过C编译器完成编译。 这个时候的 C 仍然在使用C语言的库&#xff0c;stdio.h、stdlib.h、string.h 等头…

CentOS7网络配置

本文是我从另外三个文章中整合而来&#xff0c;用于自存&#xff0c;如有侵权请联系我删除。 CentOS 7教程&#xff08;二&#xff09;-网络设置 - 知乎 (zhihu.com) VMware安装、Linux下CentOS7的配置及网络环境的配置&#xff08;最新版特别全&#xff09;_centos7 配置_Co…

田间气象站的优势与应用

在农业生产中&#xff0c;田间气象站是重要的气象监测工具&#xff0c;它能够对农田间的气象信息进行实时监测和记录&#xff0c;为农民伯伯提供农业生产科学依据。 田间气象站是由多个传感器共同组成&#xff0c;能够收集各项气象参数&#xff0c;包括我们常见的风速、风向、…

STM32--MPU6050与I2C外设

文章目录 前言MPU6050参数电路MPU6050框图 IIC外设框图 IIC的基本结构软件IIC实现MPU6050硬件IIC实现MPU6050 前言 在51单片机专栏中&#xff0c;用过I2C通信来进行实现AT24C02的数据存储&#xff1b; 里面介绍的是利用程序的编程来实现I2C的时序&#xff0c;进而实现AT24C02与…

关于android studio 几个简单的问题说明

自信是成功的第一步。——爱迪生 1. android studio 如何运行不同项目是否要更换不同的sdk 和 gradle 2.编译Gradle总是错误为什么 3.如何清理android studio 的缓存 4. 关于android Studio中的build 下面的rebuild project

『SEQ日志』在 .NET Core 中轻松集成 NLog 和 SEQ ,打造轻量级的分布式日志系统

&#x1f4e3;读完这篇文章里你能收获到 如何在Docker中部署 SEQ&#xff1a;介绍了如何创建和运行 SEQ 容器&#xff0c;给出了详细的执行操作如何使用 NLog 接入 .NET Core 应用程序的日志&#xff1a;详细介绍了 NLog 和 NLog.Seq 来配置和记录日志的步骤日志记录示例&…

判断三角形

int main() {int a 0;int b 0;int c 0;scanf("%d%d%d", &a, &b, &c);if ((ab>c)&&(ac>b)&&(bc>a)){if (a b && b c){printf("等边三角形\n");}else if ((a b && b ! c) || (a c && c…

企业的降本增益,从源头抓起——精细化管理每一条销售线索

存量经济时代&#xff0c;降本增效成为企业增长的重点抓手&#xff0c;也是企业自身数字化建设重要目标。 如何能让销售更珍惜线索&#xff1f;如何能让线索产生更快的转化&#xff1f;如何能让对的线索给到对的销售&#xff1f;如何能依托线索转化结果找到更有效的获客渠道&a…

【踩坑日记】STM32 USART 串口与 FreeRTOS 冲突

文章目录 问题描述问题出现的环境问题解决过程第一步第二步第三步第四步第五步第六步第七步第八步 后续验证一些思考类似的问题后记 问题描述 笔者使用 FreeRTOS 创建了两个任务&#xff0c;使两颗 LED 以不同频率闪烁&#xff0c;但是在加入串口 USART 部分代码后&#xff0c…

Shader 用到的数学函数总结及用法

在写shader相关的程序的时候往往需要用到 OpenGL内置的数学库&#xff0c;下面列举几个常用的函数用法和效果&#xff0c;下面的所有代码都是运行在shadertoy在线工具上的&#xff0c;推荐一个好用的数学工具desmosDesmos 目录&#xff1a; abs(x)step(edge,x)dot(uv1,uv2) …

MySQL双主架构、主从架构

为什么要对数据库做优化&#xff1f; MySQL官方说法&#xff1a; 单表2000万数据就达到瓶颈了。所以为了保证查询效率&#xff0c;要让每张表的大小得到控制。 MySQL主主架构 主数据库都负责增删改查。 比如有1000W的数据&#xff0c;有两个主数据库&#xff0c;就将数据分流给…