http/https协议学习笔记

2023年 7月 25日 74.7k 0

HTTP/HTTPS面试八股文

网上大多数计算机网络的八股文混杂了TCP/IP和HTTP协议,HTTP协议内容散乱没有整理。为了清楚地了解HTTP/HTTPS协议有哪些知识点值得关注,我们整理了部分HTTP/HTTPS面试题。

http如何跨域?

什么是跨域?
所谓跨域,全称是跨源资源共享(CORS),是一种基于 HTTP Header 的机制,该机制通过允许服务器标示除了它自己以外的其它域,协议和端口,这样浏览器可以访问加载这些资源。
如何跨域:
在这里插入图片描述

对那些可能对服务器数据产生副作用的 HTTP 请求方法,浏览器必须首先使用 OPTIONS 方法发起一个预检请求,从而获知服务端是否允许该跨源请求。
只有在服务器确认允许之后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括 Cookies 和 HTTP 认证相关数据)

http长连接和短连接的区别

http1.0默认短连接,每次客户端和服务端的每次http操作就会建立一次http连接。
从http1.1起,默认使用长连接,保持连接。
http如何操作浏览器缓存。
HTTP 缓存分为 2 种,一种是【强缓存】,另一种是【协商缓存】。主要作用是可以加快资源获取速度,提升用户体验,减少网络传输,缓解服务端的压力。
在这里插入图片描述

强缓存:当命中强缓存的时候,客户端不会再请求服务器,直接从缓存中读取内容,并返回HTTP状态码200。
协商缓存:向服务器发送请求,服务器会根据这个请求的请求头的一些参数来判断是否命中协商缓存,如果命中,则返回304状态码并带上新的响应头通知浏览器从缓存中读取资源。
启发式缓存:只有在没有明确缓存策略时,会激活启发式缓存。所以要合理设置缓存,否则会因没有设置缓存时间等原因,导致内容缓存不刷新。

http中有个缓存机制,如何保证缓存时最新的呢?

缓存是否过期主要与 Response Header 的两类头部有关,一个是缓存最大有效时间(记为 freshness_lifetime),另一个是缓存已经存在的时间(记为 current_age)。有个上面两个值后,就可以判断缓存是否过期了,逻辑如下:

if (freshness_lifetime > current_age) {
	// 未过期
}else {
	// 已过期
}

http请求方法有哪些?

http1.0定义了:POST, GET, HEAD
http1.1新增六种请求方法:OPTIPNS, PUT, PATCH, DELETE, TRACE, CONNECT

GET和POST的区别?

1.GET获取数据,POST修改数据
2.GET提交数据有大小限制,POST没有
3.GET请求会被浏览器主动缓存,POST需要手动设置
4.GET幂等,POST不幂等(幂等是指多次请求应该返回相同的结果)

GET方法参数写法固定吗?

不固定,可以约定参数的写法,只要服务端能解释就行。

http和https区别(极简版)

1.http协议传输的数据都是未加密的,https都是ssl+http协议构建的可进行加密传输,身份认证的网络协议
2.https协议需要到ca申请证书
3.不同的连接方式,用的端口不一样,http是80端口,https是443端口

https加密过程?用的是对称加密还是非对称加密

https加密请求是一次握手。SSLTLS四次握手。对称加密
在这里插入图片描述

1.用户在浏览器发起HTTPS请求(如 www.baidu.com/),默认使用服务端的4…
2.HTTPS需要使用一套CA数字证书,证书内会附带一个公钥Pub,而与之对应的私钥Private保留在服务端不公开;
3.服务端收到请求,返回配置好的包含公钥Pub的证书给客户端;
4.客户端收到证书,校验合法性,主要包括是否在有效期内、证书的域名与请求的域名是否匹配,上一级证书是否有效(递归判断,直到判断到系统内置或浏览器配置好的根证书),如果不通过,则显示HTTPS警告信息,如果通过则继续;
5.客户端生成一个用于对称加密的随机Key,并用证书内的公钥Pub进行加密,发送给服务端;
6.服务端收到随机Key的密文,使用与公钥Pub配对的私钥Private进行解密,得到客户端真正想发送的随机Key;
7.服务端使用客户端发送过来的随机Key对要传输的HTTP数据进行对称加密,将密文返回客户端;
8.客户端使用随机Key对称解密密文,得到HTTP数据明文;
9.后续HTTPS请求使用之前交换好的随机Key进行对称加解密

输入网址到浏览器的过程

根据域名,进行DNS域名解析;
拿到解析的IP地址,建立TCP连接;
向IP地址,发送HTTP请求;
服务器处理请求;
返回响应结果;
关闭TCP连接;
浏览器解析HTML;
浏览器布局渲染;
(详细版):
1.查浏览器缓存,看看有没有已经缓存好的
2.检查本机host文件
3.调用API,Linux下socket函数gethostbyname
4.向DNS服务器发送DNS请求,查询本地DNS服务器,用的是UDP协议
5.如果在同一个子网,直接用ARP地址解析;如果不在一个子网,先对默认网关进行DNS查询,然后一直向上找根DNS服务器,最终拿到IP地址
6.获取到服务区的IP地址和默认端口号,首先调用socket进行TCP连接
7.经过三次握手建立连接,开始传送数据
8.如果是http协议,直接返回数据;如果不是http协议,服务器返回重定向信息,告诉我们使用https协议,更改端口号,随即四次挥手中断连接
9.重新建立连接,三次握手沟通好双方使用的认证算法,加密和检验算法,同时检验CA安全认证;
10.开始通信后,服务器回返回访问网站需要的一些数据,此过程中界面会渲染,直到我们看到网页。

https是如何保证数据传输的安全的?SSL是怎么工作保证安全的?

1.客户端向服务器端发起SSL连接请求;
2.服务端把公钥发送给客户端,并且服务端保存着唯一的私钥;
3.客户端用公钥对双方通信的对称密钥及逆行加密,发送给服务端;
4.服务端利用自己唯一的私钥对客户端发来的密钥进行解密;
5.数据传输,双方用公有的相同的对称密钥对数据进行加密解密,可以保证在数据收发过程中的安全。
SSL/TLS协议的基本思路是采用公钥加密法:客户端先向服务端索要公钥,然后用公钥加密信息,服务器收到密文之后,用自己的私钥解密。

http请求和响应报文有哪些主要字段?

请求行:Request Line
请求头:Request Headers
请求体:Request Body
状态行:Status Line
响应头:Response Headers
响应体:Response Body

DNS负载均衡是什么策略?

它的原理是在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。

Cookie是什么?

http协议是无状态的,主要为了让HTTP协议尽可能简单,http/1.1引入Cookie来保存状态信息。Cookie主要可以用于:会话状态管理、个性化设置、浏览器行为跟踪。
Cookie是服务器发送到用户浏览器并保存在本地的一小块数据,浏览器每次向同一服务器发起请求时携带Cookie,因此会带来额外开销。

Cookie和Session的区别?

Cookie是访问某些网站以后在本地存储的一些网站相关的信息,下次再访问的时候减少一些步骤
session是存在服务器的一种用来存放用户数据的类HashTable结构
区别:
1.cookie存放在本地,不占用服务器资源(安全性低),session存放在服务器上,占用服务器资源(安全性高)
2.cookie存储容量小,session大小没有限制
3.cookie可以长期存储,session超过一定时间会失效
4.cookie支持跨域名访问,session不支持
5.cookie只能保管ASCII字符串,session能存储任何类型的数据

SQL注入攻击?

在http请求中注入恶意SQL代码,使用参数构建SQL命令时,恶意SQL一起被构造。
解决方法:
WEB端:有效性检验;限制字符串输入的长度
服务端:有效性检测;
(1.不要拼接字符串:
db.QueryRow("SELECT * FROM userinfo WHERE username ='"+sename+"'AND password ='"+partname+"'")
更改为db.QueryRow("SELECT * FROM userinfo WHERE username = ? AND password = ?", sename, partname)
(2.注入判断,不能出现OR语句,出现OR语句就判断)

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论