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

这篇具有很好参考价值的文章主要介绍了HTTP快速面试笔记(速成版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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协议,流程图如下:

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

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

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

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

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

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

整个交互过程就是SSL/TLS协议文章来源地址https://www.toymoban.com/news/detail-856488.html



参考资料

  • HTTP权威指南(David Gourley)

到了这里,关于HTTP快速面试笔记(速成版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件测试面试宝典—http

    1.HTTP报文由哪几部分组成? 请求报文(Request Message)由以下几部分组成: 请求行(Request Line):包含请求方法、请求URL和HTTP协议版本。 请求头部(Request Headers):包含一系列的键值对,用于描述请求的附加信息,如User-Agent、Content-Type等。 空行(Blank Line):用于分隔请求头

    2024年01月25日
    浏览(55)
  • 前端面试常考 HTTP/计算机网络面试题

    HTTP协议是基于TCP/IP通信协议来传输数据,如HTML文件,图像等,即是一个客户端和服务端进行请求和响应的协议 无连接,限制每次连接只处理一个请求,服务端完成客户端请求就断开连接 无状态,没有记忆能力,每次请求都是独立的,不记录客户端的任何行为。优点是解放服

    2024年02月21日
    浏览(45)
  • Tomcat面试题+http面试题+Nginx面试题+常见面试题

    1、Tomcat的缺省端口是多少?怎么修改? 答:缺省端口是8080,若要修改,可以进入Tomcat的安装目录下找到conf目录下的server.xml文件,找到该文件中的Connector字段中的port。 2、Tomcat有哪几种connector运行模式(服务的请求方式)? 答:三种。修改它的运行模式需要在主配置文件中

    2023年04月10日
    浏览(44)
  • 前端面试题(计算机网络):HTTP 1.0 和 HTTP 1.1 之间有哪些区别?

    http1.0默认是使用非持久连接,而http1.1默认使用持久连接,持久连接来使请求复用同一个TCP连接,以此来避免使用非持久连接时需要每次建立连接延迟(所花费的时间) http1.0中存在资源浪费现象,客户端如果只需要某个对象的一个部分,而服务器却会将整个对象资源全部发送

    2024年01月21日
    浏览(50)
  • http和https的区别(面试题)

    Http:HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP 协议和 TCP/IP 协议族内的其他众多的协议相同, 用于客户端和服务器之间的通信。从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。也是互联网上应用最为广泛

    2024年02月16日
    浏览(55)
  • 面试题http和https的区别

    一、HTTP和HTTPS的基本概念         HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。         HTTPS:是以安全为目标的

    2024年03月20日
    浏览(58)
  • 30 张图解 HTTP 常见的面试题

    在面试过程中,HTTP 被提问的概率还是比较高的 我搜集了 5 大类 HTTP 面试常问的题目,同时这 5 大类题跟 HTTP 的发展和演变关联性是比较大的,通过问答 + 图解的形式由浅入深的方式帮助大家进一步的学习和理解 HTTP 协议。 HTTP 基本概念 Get 与 Post HTTP 特性 HTTPS 与 HTTP HTTP/1.

    2024年02月04日
    浏览(88)
  • HFS 快速搭建 http 服务器

    HFS 是一个轻量级的HTTP 服务工具,3.0版本前进提供Windows平台安装包,3.0版本开提供Linux和macOS平台的安装包。 HFS更适合在局域网环境中搭建文件共享服务或者安装配置源服务器。 甲 非守护进程的方式运行 HFS (Ubuntu 22.04) 一 创建 HTTP 的根目录 /home/budgie/mirrorsHTTP mkdir -vp /ho

    2024年04月12日
    浏览(43)
  • 前端面试集锦(DOM HTTP 框架(Vue))

    事件委托 参考答案 : 简易版 (有缺陷 没有考虑子元素 ): bug 在于,如果用户点击的是 li 里面的 span,就没法触发 fn,这显然不对 ul.addEventListener(‘click’,function(e){ if(e.target.tagName.toLowerCase() === ‘li’){ fn() // 执行某个函数 //console.log(‘您点击了li’) } }) 。 高级版 :思路是点

    2024年02月01日
    浏览(41)
  • 【跳槽面试】一份tcp、http面试指南,常考点都给你了

    要说http就绕不开tcp,TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性。但是,http是基于tcp协议的。 TCP/IP 协议分层模型 物理层将二进制的0和1和电压高低,光的闪灭和电波的强弱信号进行转换 链路层代表驱动 网络层 使用 IP 协议,IP 协议基于

    2024年01月23日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包