HTTP快速面试笔记(速成版)

news2024/11/24 20:25:09

文章目录

  • 1. HTTP概述
    • 1.1 HTTP简介
    • 1.2 HTTP的版本
    • 1.3 URL语法简介
  • 2. HTTP报文
    • 2.1 HTTP报文格式
    • 2.2 HTTP的方法(Method)
    • 2.3 HTTP响应码
    • 2.4 HTTP请求头与响应头
  • 3. HTTPS详解
    • 3.1 HTTPS介绍
    • 3.2 与HTTPS相关的加解密知识
    • 3.3 HTTPS交互流程
  • 参考资料

1. HTTP概述

1.1 HTTP简介

HTTP(Hyper Text Transfer Protocol)是超文本传输协议,是一种基于TCP协议的可靠的数据传输协议。用于客户端与服务端进行资源传输,例如:HTML文件、图片、数据等。

一个HTTP请求通常由客户端发起,服务端响应

一个HTTP请求包含请求和响应两个部分。

请求包含如下部分:

  • 统一资源定位符(URL):描述服务器上某资源的特定位置,也就是客户端要从哪个地方获取资源。例如:http://www.baidu.com/XXX.js
  • HTTP方法(HTTP Method):描述客户端请求的动作类型。常用的有:GET(获取)、POST(修改)、PUT(增添)、DELETE(删除)
  • 请求头(Request Headers):对请求的一些额外说明。例如:客户端信息、cookie等。
  • 请求体(Request Body):包含客户端发送给服务器的数据,通常在POST、PUT等方法中使用。例如,表单数据、JSON数据等。

响应包括如下部分:

  • 响应状态码(Response Code):描述服务器对客户端请求的响应结果。例如:200为OK、302为重定向等。
  • 响应头(Response Headers):包含服务器对请求的响应的附加信息,如服务器类型、日期等。
  • 响应体(Response Body):包含服务器返回给客户端的数据,通常是请求的资源内容,如HTML页面、图片、JSON数据等。

1.2 HTTP的版本

HTTP经过长期发展,目前使用较多的版本如下:

  • HTTP/1.1:目前是最广泛使用的版本之一。它引入了持久连接、管道化(Pipelining)等特性,以提高性能和效率。
  • HTTP/2.0:是HTTP/1.1的后续版本。它引入了诸如多路复用、头部压缩、服务器推送等新特性,以提高性能和安全性。

1.3 URL语法简介

URL是用来定位你要找的资源所在的位置。格式为:

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

  • scheme:访问方案,即使用哪种方式访问资源。例如:http、https、ftp、ssh等
  • user:password:若访问的资源需要权限校验,则需要给出账号密码。一般ssh常用。http基本不用,可以忽略。
  • host:port:要访问资源的IP和端口。当使用http访问可以不填,浏览器自动使用默认端口,http为默认端口为80,https为443。
  • path:路径信息,即告诉服务端我要请求的资源路径(可以类比为“哪个目录下的哪个文件”)。例如:/seasonal/index-fall.html
  • params:参数。url的路径部分,每段都是可以加参数的,参数使用;分隔。例如:http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true
  • query:查询字符串,通常用作参数。格式为?<key1>=<value1>&<key2>=<value2>。例如:http://www.XX.com/inventory.cgi?item=12731&color=blue
  • frag:片段,用于对资源文件进一步划分,指向其中的一个片段,常见于HTML。例如:www.csdn.com/index/12312312#第三章,当点击这个链接后,会直接跳转到第三章。

示例:

https://github.com/gaopu/Java?tab=readme-ov-file#为什么很多份不相关的代码放在一个代码库

该URL表示:① 使用https进行请求;② 访问github.com这个网站;③ 请求/gaopu/Java这个资源;④ 参数为tab=readme-ov-file;⑤ 进入后直接跳转到为...库这个章节

2. HTTP报文

2.1 HTTP报文格式

HTTP报文分为请求报文响应报文

请求报文的格式如下:

<method> <request-URL> <version>  # 起始行
---
<headers>  # 请求头(也称为首部)
---
<entity-body>  # 请求体

例如:

GET /specials/saw-blade.git HTTP/1.1
---
Content-type: text/plain
Content-length: 19
---

响应报文的格式如下:

<version> <status> <reason-phrase>  # 起始行
---
<headers>  # 请求头(也称为首部)
---
<entity-body>  # 请求体

例如:

HTTP/1.1 200 OK
---
Content-type: text/plain
Content-length: 19
---
  • method:请求方法,例如:GET、POST等
  • request-URL:请求的URL,例如:/specials/saw-blade.git
  • version:http版本。例如:HTTP/1.1
  • headers:请求头。键值对形式
  • entity-body:请求体。不同的请求方式有不同的请求体。
  • status:响应码,表示服务器处理的结果。例如:200表示成功,500表示报错。注意:通常业务代码都会返回200,然后通过内部编码来区分错误。
  • reason-phrase:原因短语,一个简单的短语来描述处理的结果。例如:“OK”,“Internal Server Error”

2.2 HTTP的方法(Method)

HTTP的常用的请求方法(method)包括如下(按常用程度排序):

  • GET从服务器获取资源。例如:获取HTML、JS等都是GET请求。特点:① GET请求一般不使用消息体(request body),参数使用?<key>=value形式写在url上;② 可以通过直接点击URL触发GET请求
  • POST向服务器提交数据,通常用于创建资源或提交表单数据。特点:① 请求的数据放在消息体中
  • PUT向服务器上传更新资源,通常用于更新资源。特点:
  • DELETE请求服务器删除指定的资源
  • HEAD:类似于GET请求,但服务器只返回头部信息,不返回实际内容。通常用于检查资源是否存在或已更改,以及获取资源的元数据,而不需要获取整个资源的内容。例如:可以使用HEAD请求仅获取图片的元数据,看看修改日期是否改变,如果改变了,就重新使用GET请求获取一张最新的图片。
  • OPTION获取目标资源支持的通信选项。一般用于跨域检测:当浏览器向服务器发送跨域请求时,会先发送一个OPTIONS请求,以确定服务器是否允许跨域请求。(浏览器的自发行为)

2.3 HTTP响应码

HTTP的响应中的响应码用于告诉客户端处理的结果。

响应码的分为5个大类:

  • 100+信息提示(Informational)。一般用于协议转换,例如HTTP协议转为WebSocket协议。
  • 200+成功(Success)。服务端处理请求成功
  • 300+重定向(Redirection)。服务器表示,你请求的资源不在我这,给你个地址,去那找。
  • 400+客户端错误(Client Error)。客户端请求的参数有误,服务端处理不了。
  • 500+服务器错误(Server Error)。客户端请求的参数没问题,但服务端报错了。

响应码的每个大类有对应了许多小类,常用的响应码有:

响应码含义解释常见场景
101协议转换(Switching Protocols)服务端告知需要进行协议转换,如将HTTP协议转为WebSocket协议与服务器建立WebSocket连接
200处理成功(OK)成功处理用户请求服务端正确接收并处理请求
201创建成功(Created)成功处理用户的“增添数据”的请求上传文件,表单提交等
204无内容(No Content)成功处理请求,但无需返回任何数据删除请求,无需返回值的请求
301永久重定向(Moved Permanently)请求的资源永久的被移动到了另一个URL上
(慎用,因为该行为会被浏览器缓存)
请求已迁移的老资源
302临时重定向(Moved Temporarily)请求的资源被临时移动到了另一个URL上请求暂时迁移走的资源
304资源未修改(Not Modified)客户端向服务端验证资源是否被修改,若没修改,则服务端返回304,客户端可以继续使用缓存客户端对缓存的资源进行验证
400错误请求(Bad Request)客户端的请求有误必填参数缺失
403请求禁止(Forbidden)服务端拒绝处理客户端请求客户端权限不足
404页面不存在(Not Found)客户端请求的页面或资源不存在url写错了
405方法不允许(Method Not Allowed)客户端使用的方法(GET、POST等)不被允许请求方法用错了
500服务器内部错误(Internal Server Error)服务器处理请求的时候报错了代码报错
502网关错误(Bad Gateway)网关报错。请求没有到达服务器,直接在网关就被拦截了被网关限流
503服务不可用(Service Unavailbale)服务器暂时无法处理请求服务器挂了

通常HTTP的响应码规范是通用框架来遵循,例如Spring MVC、Nginx等。而业务项目通常都是全部返回200,在此基础上指定与业务相关的code。

2.4 HTTP请求头与响应头

HTTP的请求头(Request headers)和响应头(Response Headers)用于提供一些请求或响应的额外信息。请求头和响应头的格式为:<key>:<value>

常见的请求头有:

  • Host:服务端的域名。例如:你请求的是“http://www.baidu.com/XXX”,那么Host就是www.baidu.com
  • User-Agent:客户端信息。一般包括:操作系统、浏览器版本等
  • Accept:客户端可以接收的响应类型。格式:<type>; q=<weight>。例如:Accept: application/json, text/javascript, */*; q=0.01 表示客户端可以接收json、js和任意类型,但任意类型的权重为0.01(不填默认为1),即尽量不要传任意类型。
  • Accept-Language:客户端可以接收的语言类型。格式:<type>; q=<weight>
  • Accept-Encoding:客户端可以接受的压缩类型。例如:Accept-Encoding:gzip, deflate, br,表示客户端可以接收这三种压缩类型,服务端可以根据该请求头对响应进行压缩。
  • Connection:在该请求后,是否要关闭连接。有两种取值:① Keep-alive:保持TCP连接,因为后续马上还会有新请求(可以在后面增加; timeout=XX来指定超时时间);② Close:关闭TCP连接,暂时不会再请求了。
  • Referer:指定请求来源URL。例如:当前URL为https://www.abc.com/ehf,然后该页面请求了一个https://www.xxx.com/xxx,那么该请求中的Referer就是https://www.abc.com/ehf。服务端可以根据这个字段来判断是不是自己的网站请求自己,若不是,就拒绝。
  • Cookie:将服务端设置到浏览器中的cookie重新传过去,用于存储session和跟踪用户行为。
  • Content-Type:请求体的格式。通常有:① :GET请求一般没有该请求头。② application/json:当请求体为json格式时,用这个。③ multipart/form-data:请求体是表单。

上述这些请求头都是规定的。用户也可以定义自己的请求头

常见的响应头有:

  • Date:服务端“生成响应的时间”
  • Server:处理响应的服务器版本。注意:一般不使用,要不然黑客容易根据你的服务器版本,利用漏洞攻击你。
  • Content-Type:响应体的类型。对于响应的该字段来说,取值比较丰富。常见的有:text/css; charset=utf-8,application/json, image/gif等等。若类型是文件,则后面建议增加; charset=utf-8来指定告知文件的编码
  • Content-Lenght:响应体的字节长度。
  • Cache-Control:告诉客户端如何对响应进行缓存。常见的有:① no-store:不要缓存;② no-cache:可以缓存,但在使用前要向服务端验证是否过期。即正常发送请求,若没过期,服务端会返回304(Not Modified),否则会返回新的资源。③ max-age=<seconds>:缓存,但最多缓存多少秒。
  • Expires:指定资源的过期时间,客户端根据该时间来判断是否要缓存资源。
  • Set-Cookie:告知客户端要设置哪些cookie。例如:Set-Cookie: key1=value1; key2=value2,则浏览器就会记录这两个cookie,下次请求时带上。

3. HTTPS详解

3.1 HTTPS介绍

HTTPS是HTTP的安全版本,S为Secure,即对HTTP报文内容加密,来保证HTTP请求的安全性。

不加密的HTTP的安全问题:一个HTTP请求在客户端与服务端之间要经过无数的路由器对其进行转发,中间可能会存在恶意的路由器获取报文内容甚至篡改。例如:你使用酒店的wifi登录了某网站,若该网站使用HTTP,那么酒店的路由器就有可能会获取你的登录密码。

HTTPS就是使用SSL/TLS协议(3.3详解)来加密数据包,保证报文的安全性。

3.2 与HTTPS相关的加解密知识

加密技术可以分为两个大类:

  • 对称加密(Symmetrical Encryption):加解密双方使用同一个密钥。
    • 特点:① 速度快,一般用于对较大的数据进行加密。② 不够安全,密钥一但泄露,加解密双方都裸奔。因此必须保证交换密钥是安全的。
    • 常见算法:DES,3DES,AES等
  • 非对称加密:加解密双方持有不同的密钥。加密方持有公钥,解密方持有私钥。对于公钥加密的内容,只有使用私钥可以解密。通常解密方生成公钥和私钥,私钥自己留着,公钥发给加密方。HTTPS中,服务端持有私钥,客户端持有公钥,这样客户端加密的内容只有服务端可以解密。
    • 特点:① 速度慢,一般用于对对称加密的密钥进行加密;② 安全,由于私钥自己持有,不会在网络上传输,因此泄露风险低。
    • 常见算法:RSA、DSA、ECC

3.3 HTTPS交互流程

HTTPS的交互流程遵循SSL/TLS协议,流程图如下:

在这里插入图片描述

该流程图中包含了三大部分:

  1. 服务端申请CA证书(人工操作,到权威机构网站进行申请)。
  2. 客户端与服务端首次建立连接,验证证书、交换密钥。(通常首次建立连接时进行一次)
  3. 使用密钥对数据进行加密传输。

通过上述流程,让黑客无漏洞可钻,保证了数据几乎绝对安全。

对于每个小步骤的对安全的作用:

  • 步骤1,2,3: 服务端生成公钥和私钥。然后将公钥上传给CA机构进行生成证书。
    • 安全性说明:由于私钥是服务端生成的,并且从未出现在互联网上,因此绝对安全。注意:私钥不是也不能由CA机构生成,否则私钥就会存在于互联网上,没办法保证安全性。
  • 步骤4,5,6,7:客户端首次建立连接,获取服务端的CA证书,并进行验证。
    • 安全性说明:客户端会访问CA机构来验证证书的合法性,确保了客户端收到的公钥确实是由服务端给的,而不是中间黑客篡改的。假设客户端不验证,那么黑客就可以拦截公钥,然后将假公钥给客户端,这样就可以解密客户端的报文,篡改后,用真公钥加密。
    • 证书有问题:客户端(一般指浏览器)去CA机构验证公钥后发现有问题,浏览器就会弹出警告(证书过期、证书无效等),也就是用户常见的这个页面在这里插入图片描述
      不过用户也可以选择忽略警告,继续访问,但这就不能保证安全性了。
  • 步骤8,9,10:客户端生成“对称加密的密钥”(对称密钥),将其使用公钥加密后,发送给服务端,服务端解密获取该对称密钥。
    • 安全性说明:客户端生成的对称密钥经过加密,只有服务端的私钥可以解密,确保只有客户端和服务端两者知道对称密钥内容。
    • 为什么要用对称密钥:① 对称加密速度快。HTTP报文内容大,用非对称加密速度太慢。② 非对称加密只能保证“客户端->服务端”这条链路的安全性。若服务端用私钥加密,那么客户端和黑客的公钥都可以解密,报文会被篡改。
  • 步骤11-16:客户端与服务端使用对称密钥对请求和响应报文进行加解密。
    • 安全性说明:前面交换密钥时,保证了对称密钥只有客户端和服务端知道,因此用该密钥对数据进行加解密是安全的。

整个交互过程就是SSL/TLS协议



参考资料

  • HTTP权威指南(David Gourley)

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

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

相关文章

2 万字 42 道Java经典面试题总结(2024修订版)- Java集合篇

目录 1、Java中常用的集合有哪些&#xff1f;2、Collection 和 Collections 有什么区别&#xff1f;3、为什么集合类没有实现 Cloneable 和 Serializable 接口&#xff1f;4、数组和集合有什么本质区别&#xff1f;5、数组和集合如何选择&#xff1f;6、list与Set区别7、HashMa…

基于深度学习的人脸表情识别系统(PyQT+代码+训练数据集)

基于深度学习的人脸表情识别系统&#xff08;PyQT代码训练数据集&#xff09; 前言一、数据集1.1 数据集介绍1.2 数据预处理 二、模型搭建三、训练与测试3.1 模型训练3.2 模型测试 四、PyQt界面实现 前言 本项目是基于mini_Xception深度学习网络模型的人脸表情识别系统&#x…

el-upload文件缩略图只显示一张图片

采用elementui库vue2版本&#xff0c;flask后端 el-upload组件上传一张图片之后不在出现新增加号 可以实现

基于公共转点的Alpha shapes有序边缘点提取

1、原理介绍 由Edelsbrunner H提出的alpha shapes算法是一种简单、有效的快速提取边界点算法。其克服了点云边界点形状影响的缺点,可快速准确提取边界点,其原理如下:对于任意形状的平面点云,若一个半径为a的圆,绕其进行滚动,其滚动的轨迹形成的点为轮廓点。需要注意的是,…

深入理解计算机系统 家庭作业 2.84

这题没有这个要求所以可以用 ? > : < 这种运算 以下代码用的是位级运算.因为我误解了题意 呜呜呜 想看用判断的代码请自行百度 ((((ux<<9>>9)<<((ux<<1>>24)-127)) - ((uy<<9>>9)<<((uy<<1>>24)-127)))>…

TMS320F280049 EPWM模块--TZ子模块(6)

下图是TZ子模块在epwm中的位置&#xff0c;可以看到TZ子模块接收内外部多种信号&#xff0c;经过处理后生成最终epwm波形&#xff0c;然后通过gpio向外发出。 TZ的动作有4个&#xff1a;拉高/拉低/高阻/不变。 TZ的内部框图见下图&#xff0c;可以看出&#xff1a; 1&#xf…

每日一题 — 水果成篮

思路&#xff1a; 通过阅读上面文字得出问题&#xff1a;就去只有两个种类的最大长度的连续子数组&#xff0c;这时我们可以想到用哈希表来存储数据&#xff0c;记录数据的种类和每个种类的数量。 解法一&#xff1a;暴力递归&#xff08;right每次遍历完都回退&#xff09; 解…

windows本地运行dreamtalk踩坑总结

dreamtalk是一个语音图片转视频的一个工具&#xff0c;就是给一段语音加一个头像图片&#xff0c;然后生成一段头像跟语音对口型的视频&#xff0c;其实还是很有意思的&#xff0c;最近阿里发布了一个类似的模型&#xff0c;但是还没开源&#xff0c;从展示视频看&#xff0c;阿…

Day31:贪心 LeedCode 455.分发饼干 376. 摆动序列 53. 最大子序和 蓝桥杯.填充

贪心算法一般分为如下四步&#xff1a; 将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解 做题的时候&#xff0c;只要想清楚 局部最优 是什么&#xff0c;如果推导出全局最优&#xff0c;其实就够了。 假设你是一位很棒的家…

场景文本检测识别学习 day04(目标检测的基础概念)

经典的目标检测方法 one-stage 单阶段法&#xff1a;YOLO系列 one-stage方法&#xff1a;仅使用一个CNN&#xff0c;直接在特征图上预测每个物体的类别和边界框输入图像之后&#xff0c;使用CNN网络提取特征图&#xff0c;不加入任何补充&#xff08;锚点、锚框&#xff09;&…

QT系列教程(2) 创建项目和编译

新建Qt Widgets应用 我们启动qt creator 创建项目&#xff0c;选择Qt Widgets应用 接下来选择项目目录&#xff0c;项目名字就叫helloworld 构建系统选择qmake 我们创建一个名字为HelloDialog的类&#xff0c;继承于QDialog 构建套件选择你们安装的就行了&#xff0c;我这里选…

SV-704XT 100W网络有源音柱 校园广播音柱

SV-704XT 100W网络有源音柱 一、描述 SV-704XT是深圳锐科达电子有限公司的一款壁挂式网络有源音柱&#xff0c;具有10/100M以太网接口&#xff0c;可将网络音源通过自带的功放和喇叭输出播放&#xff0c;其采用防水设计&#xff0c;功率100W。SV-704XT作为网络广播播放系统的终…

嵌入式:第二天(C语言入门)

目录 一、基础语法 位运算符&#xff1a; & -&#xff08;与运算&#xff09; | -&#xff08;或运算&#xff09; ^ -&#xff08;异或运算&#xff09; ~ -&#xff08;取反运算&#xff09; << -&#xff08;左移运算符&#xff09; >> -&#xff0…

MyBatis 中的动态 SQL 的相关使用方法

为什么会有动态SQL&#xff0c;把SQL写死不是比较方便吗&#xff1f;其实有很多的举例&#xff0c;这里我那一个常见的来说&#xff0c;像我们用户注册&#xff0c;会有必填字段和非必填字段&#xff0c;有些传来的参数不一样&#xff0c;那对应的SQL也不一样&#xff0c;因此&…

【ctf.show】获得百分之百的快乐

1.打开靶场 2.根据页面代码&#xff0c;get请求值只能小于4位数&#xff0c;否则会回显hack&#xff01; 尝试后确实是这样的&#xff1a; 请求值小于4位数&#xff0c;页面无变化&#xff1a; 发送请求值ls查看内容 3.根据2返回的值&#xff0c;发送值为?1>nl 创建一个nl…

每日一练(力扣)

我的思路是暴力枚举: 情况1:相同&#xff0c;就让子串和原串同时后移继续比较 情况2:不相同&#xff0c;就只让原串后移 public int strStr(String haystack, String needle) {if (haystack.length() < needle.length()){return -1;}for (int i 0; i < h…

Java | Leetcode Java题解之第15题三数之和

题目&#xff1a; 题解&#xff1a; class Solution {public List<List<Integer>> threeSum(int[] nums) {int n nums.length;Arrays.sort(nums);List<List<Integer>> ans new ArrayList<List<Integer>>();// 枚举 afor (int first 0;…

Harmony鸿蒙南向外设驱动开发-Audio

Audio驱动概述 多媒体系统是物联网设备开发中不可缺少的一部分&#xff0c;Audio作为其中重要的一个模块&#xff0c;Audio驱动模型的构建显得尤为重要。 本文主要介绍基于HDF&#xff08;Hardware Driver Foundation&#xff09;驱动框架开发的Audio驱动&#xff0c;包括Aud…

2023年蓝桥杯——日期统计

目录 题目链接&#xff1a;1.日期统计 - 蓝桥云课 (lanqiao.cn) 题目描述 思路 代码思路 定义数据结构&#xff1a; 处理每一个月&#xff1a; 检查日期序列在num100中是否存在&#xff1a; 计数匹配的日期数&#xff1a; 输出结果&#xff1a; 代码实现 总结 题目链…

面试:线程和线程池

目录 目标 一、线程有哪些状态 1、新建态&#xff08;NEW&#xff09;&#xff1a; 2、可运行态&#xff08;RUNNABLE&#xff09;&#xff1a; 3、终结态&#xff08;TERMINATED&#xff09;&#xff1a; 4、阻塞态&#xff08;BLOCKED&#xff09;&#xff1a; 5、等待态…