1.HTTP请求报文和响应报文的具体组成,能理解常见请求头的含义,有几种请求方式,区别是什么
![在这里插入图片描述](https://img-blog.csdnimg.cn/ed4a02c8e0c144ff9ef8e581e4108c89.jpg?x-oss-process=image/wa
具体组成
- 请求行:包括用于请求的方法,请求url和http版本
- 状态行:包含表明响应结果的状态码,原因短语和http版本
- 首部字段:包含表示请求和响应的各种条件和属性的各类首部(通用首部、请求首部、响应首部、实体首部)
- 通用首部字段:请求报文和响应报文两方都会使用的首部
- 请求首部字段: 从客户端向服务端发送请求报文时使用的首部。补充啦请求的附加内容,客户端信息、响应内容相关优先级等信息。
- 响应首部字段: 从服务端向客户端返回响应报文时使用的首部。补充啦响应的附加内容、也会要求客户端附加额外的内容信息。
- 实体首部字段: 针对请求报文和响应报文的实体部分使用的首部。补充啦资源内容的更新时间等与实体有关的信息。
常见请求头
- Accept:text/html,image/*[告诉服务器,浏览器可以接受文本,网页图片]
- Accept-Charaset:ISO-8859-1 [接受字符编码:iso-8859-1]
- Accept-Encoding:gzip,compress[可以接受 gzip,compress压缩后数据]
- Accept-Language:zh-cn[浏览器支持的语言]
- Host:localhost:8080[浏览器要找的主机]
- IF-MODIFIED-Since:Tue,11Jul 2000 18:23:51[告诉服务器这缓存中有这个文件,该文件的时间是…]
- Referer:http://localhost:8080/test/abc.html[告诉服务器来自哪里]
- User-Agent:Nozilla/4.0(Com…)[告诉服务器浏览器内核]
- Cookie:[HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。]
- Connection:close/Keep-Alive [保持链接,发完数据后,不关闭链接]
- Date:[浏览器发送数据的请求时间]
请求方式
- get:获取资源
- post:传输实体主体
- put:传输文件
- head:获取报文首部
- delete: 删除文件
- options: 询问支持的方法
- trace: 追踪路径
2.HTTP所有状态码的具体含义,看到异常状态码能快速定位问题
类别 | 原因短语 | |
---|---|---|
1** | 信息性状态 | 接收的请求正在处理 |
2** | 成功状态码 | 请求正常处理完毕 |
3** | 重定向状态码 | 需要进行附加操作以完成请求 |
4** | 客户端错误状态码 | 服务器无法处理请求 |
5** | 服务器错误状态码 | 服务器处理请求出错 |
-
200 ok 请求成功
-
204 no content 请求成功没有资源返回
-
206 partial content 客户端请求只要一部分
-
301 永久性重定向 该状态码请求的资源被分配啦新的url
-
302 临时性重定向 该状态码表示请求的资源已被分配了新的url,希望用户能使用新的url访问
-
303 see other 表示请求对应的资源存在另外一个url,应使用get定向获取请求的资源
-
400 bad request 该状态码表示请求报文中存在语法错误
-
401 认证失败,登陆账户密码错误
-
403 请求被服务器拒绝 ,没有权限
-
404 找不到请求资源
-
500 服务器内部出现错误
-
503 服务器繁忙
3.HTTP1、HTTP1.1、HTTP2.0带来的改变
- HTTP1.0 无状态、无连接
- HTTP1.1
- 持久连接
- 请求管道化
- 增加缓存处理(新的字段如cache-control)
- 增加Host字段、支持断点传输等
- HTTP2.0
- 二进制分帧
- 多路复用(或连接共享)
- 头部压缩
- 服务器推送
4. HTTPS与HTTP的一些区别
- http + 加密 + 认证 + 完整性保护 = https
- HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
- HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
- HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。
5.HTTPS的加密原理,如何开启HTTPS,如何劫持HTTPS请求
HTTPS的加密原理
对称加密:
- 对称密钥的问题主要在于:在第一次传输密钥时,这个密钥怎么让传输的双方知晓,同时不被别人知道。
- 如果由服务器生成一个密钥并传输给浏览器,那这个传输过程中密钥被别人劫持弄到手了怎么办?之后他就能用密钥解开双方传输的任何内容了,所以这么做当然不行。
非对称加密:
- 有两把密钥,通常一把叫做公钥、一把叫做私钥,用公钥加密的内容必须用私钥才能解开,同样,私钥加密的内容只有公钥能解开。
- 服务器先把公钥直接明文传输给浏览器,之后浏览器向服务器传数据前都先用这个公钥加密好再传。
- 而服务器则使用私钥加密传输,客户端通过公钥解密。
- 问题:第一次明文传输公钥时,中间人可以拿到这个公钥,虽然此公钥不能解开由客户端加密传输的数据,但是服务端加密传输的数据,是不安全的。
非对称加密只能保证由浏览器向服务器传输数据时的安全性。
开启HTTPS
- 服务器一台(可以购买阿里云轻量应用服务器,比较便宜)
- SSL证书 (可以注册阿里云免费证书,安全性较差)
- 域名一个 (可以在万网上购买并要进行备案)
- 本地打包好的项目(博主是使用springboot开发,所以打包好的是jar包而不是war包)
ftp客户端
劫持HTTPS请求
跨域了,然后就说不一定是安全的,如果不对跨域做出限制的话,还有两种方法可以实现。更改端口号和域名。因为不对跨域做限制是可以发起CSRF(跨站请求伪造cross-site request forgery)的攻击的。
- 黑客用自己的证书+自己的域名
- 证书劫持+用自己的域名
- 域名劫持+自己的证书
- DNS域名劫持+证书劫持
- 域名入侵
- 中间人证书欺骗攻击
- httpsStrip
6.理解WebSocket协议的底层原理、与HTTP的区别
Socket原理:
服务端有一个进程(或者多个进程)在指定端口等待客户来连接,服务程序等待客户的连接信息,一旦连接上之后,就可以按设计的数据交换方法和格式进行数据传输。客户端在需要的时刻发出向服务器端的连接请求。
区别
- socket是TCP/IP进程间通讯的底层实现api
- http(s)是在socket之上封装的一种上层通讯协议,其特点是:
- 服务端监听通讯,被动提供服务;客户端主动向服务端发起连接请求,建立起通讯。
每一次交互都是:客户端主动发起请求(request),服务端被动应答(response)。 - 服务端不能主动向客户端推送数据。
- 通信的数据是基于文本格式的。二进制数据(比如图片等)要利用base64等手段转换为文本后才能传输。
- websocket也是在socket之上封装的一种上层通讯协议,其特点是:
- websocket通讯的建立阶段是依赖于http协议的。最初的握手阶段是http协议,握手完成后就切换到websocket协议,并完全与http协议脱离了。
- 建立通讯时,也是由客户端主动发起连接请求,服务端被动监听。
- 通讯一旦建立连接后,通讯就是“全双工”模式了。也就是说服务端和客户端都能在任何时间自由得发送数据,非常适合服务端要主动推送实时数据的业务场景。
- 交互模式不再是“请求-应答”模式,完全由开发者自行设计通讯协议。
- 通信的数据是基于“帧(frame)”的,可以传输文本数据,也可以直接传输二进制数据,效率高。当然,开发者也就要考虑封包、拆包、编号等技术细节。
7. HTTP的基本优化
- 影响一个 HTTP 网络请求的因素主要有两个:带宽和延迟。
- 延迟:
- 浏览器阻塞(HOL blocking):浏览器会因为一些原因阻塞请求。浏览器对于同一个域名,同时只能有 4 个连接(这个根据浏览器内核不同可能会有所差异),超过浏览器最大连接数限制,后续请求就会被阻塞。
- DNS 查询(DNS Lookup):浏览器需要知道目标服务器的 IP 才能建立连接。将域名解析为 IP 的这个系统就是 DNS。这个通常可以利用DNS缓存结果来达到减少这个时间的目的。
- 建立连接(Initial connection):HTTP 是基于 TCP 协议的,浏览器最快也要在第三次握手时才能捎带 HTTP 请求报文,达到真正的建立连接,但是这些连接无法复用会导致每次请求都经历三次握手和慢启动。三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大。