首页 > 其他分享 >3、HTTP常见面试题

3、HTTP常见面试题

时间:2023-11-16 22:24:30浏览次数:31  
标签:面试题 缓存 HTTP 请求 常见 资源 服务端 客户端

HTTP是什么?

Http是超文本传输协议,一种在通信双方之间指定的规则。其中超文本是指数据格式可以是文本、图片、视频等等各种类型的数据;

HTTP常见的状态码

  • 1xx:提示信息,传输协议处理的中间状态
  • 2xx:请求成功。客户端发起的请求被服务端正确处理并返回响应数据
  • 3xx:资源重定位。客户端请求的资源发生改变,需要用新的URL重新发起请求
  • 4xx:客户端错误。客户端的请求出现错误
  • 5xx:服务端错误。服务端对请求的处理出现错误

GET和POST

1、二者含义:
  • GET:请求服务端的资源
  • POST: 根据请求体(body)中的数据对服务器资源进行处理
2、GET和POST都是安全和幂等的吗?

GET请求是“只读”操作,所以是安全和幂等的;而POST请求是“新增或者修改操作”,所以不是安全和幂等的

注意:上面对于GET和POST是否安全和幂等只是按照RFC规范判断的,实际中开发者可以用GET方法实现新增或者删除数据的请求,此时GET请求自然就不是安全和幂等的;另外开发者也可以用POST方法实现查询数据的请求,此时POST请求就是安全和幂等的

HTTP缓存技术

HTTP的缓存技术主要有两种:强制缓存和协商缓存:

  • 强制缓存:只要本地缓存没有过期,就是用本地缓存的资源

  • 协商缓存:若本地存在缓存,客户端会给服务端发送请求,若客户端发现请求资源和客户端的本地缓存一致,就返回一个304响应码表示可以使用本地缓存;否则返回响应码200和最新的资源

其中协商缓存的具体做法是:

  • 方法1:第一次请求服务端资源时,服务端返回请求的资源和一个标志位(Last-Modified:记录资源的最后修改时间),客户端把资源和标志位缓存到本地,当再次请求相同资源时,将标志位发送给服务端,服务端通过客户端发过来的标志位判断服务器资源和客户端的缓存是否一致,若一致则返回304,否则返回新的请求资源和标志位

  • 方法2:第一次请求服务端资源时,服务端返回资源和一个标志位(Etag:资源的唯一标识符,若资源被修改,则标志位也不同),客户端把资源和标志位缓存到本地,当再次请求相同资源时,将标志位发送给服务端,服务端通过客户端发过来的标志位判断服务器资源和客户端的缓存是否一致,若一致则返回304,否则返回新的请求资源和标志位

  • 方法1是根据修改时间做出判断的,而时间容易被篡改,相对不安全一些,所以一般方法2用的多一些。此外如果服务端将Last-Modified和Etag发送给了客户端,客户端再次请求相同资源时会将两个标志位同时发送给服务器,由于Etag优先级更高,服务器会先判断Etag,若Etag没有变化,再比较Last-Modified

HTTP的特性

HTTP协议主要有HTTP1.1、HTTP2.0和HTTP3.0,不同版本特性也不同,这里先用HTTP1.1介绍,后续其他版本也会介绍

1、HTTP1.1的优点
  • 简单:HTTP请求由head和body组成,二者都是键值对的形式

  • 灵活且易于扩展:HTTP协议里的URL、各种求情方法、head字段等等都没有固定死,开发者可以自定义和扩展

  • 应用广泛且跨平台:在PC和手机端都适用,且存在基于HTTP的大量应用程序

2、HTTP1.1的缺点
  • 由于无状态,通信双方无需身份验证,故而可能遭遇伪装,比如访问到假网站

  • 由于明文传输,信息容易泄露,比如账号被盗

  • 无法验证报文完整性,报文可能被修改,比如植入广告

3、HTTP1.1的性能如何

结论:性能一般;

原因:HTTP1.1是基于“请求-应答”模式和TCP/IP的,故性能关键在于这两者

  • “请求-应答”模式导致第一个请求得到回应后才能进行第二次请求,如果第一次请求被阻塞,之后的请求都会被阻塞(队头阻塞现象)

  • HTTP1.0中,TCP/IP导致每次发送数据都需要“三次握手”建立连接,以及四次挥手断开连接,开销较大;HTTP1.1中实现了“长连接”,从而能连接复用,“长连接”使得管道传输成为可能,管道传输是指客户端可以发起多次请求,不需要等前一个请求被响应了才能发第二个请求,服务端会按顺序依次响应请求,但是服务端的第一个请求处理时被阻塞了,后续请求都会被阻塞,故管道传输并没有解决响应端的队头阻塞问题(并且实际中支持管道传输技术并不是默认开启的,而且浏览器基本都不支持该技术)

HTTP与HTTPS

1、HTTP和HTTPS的区别
  • HTTP进行明文传输,而HTTPS会对报文进行加密再传输(因为HTTPS中加入了SSL/TSL协议)

  • HTTP进行“TCP三次握手”后,通信双方就建立了连接,而HTTPS再“TCP三次握手”后还需进行“SSL/TLS”的握手过程

  • HTTP的默认端口号是80,而HTTPS的默认端口号是443

  • HTTPS还需要向CA申请数字身份证书,保证服务器身份是可靠的

2、HTTPS解决了HTTP哪些问题

总的来说,解决了HTTP相对不安全的问题。具体来说:

  • 信息加密:导致信息不易泄露

  • 身份证书:通过数字身份证书,保证服务器是可靠的

  • 校验机制:核对内容是否被篡改,若被篡改则不会被显示

HTTP1.1、HTTP2.0、HTTP3.0的演变

标签:面试题,缓存,HTTP,请求,常见,资源,服务端,客户端
From: https://www.cnblogs.com/sunjuil/p/17837411.html

相关文章

  • 常见的日志框架及Logback日志框架的使用
    什么是日志日志是一种记录系统运行时信息的方式,这些信息可以包括程序的状态、错误消息、警告、调试信息等日志的作用1.调试和故障排除当代码出现Bug时,可以通过查看日志,了解程序正在执行过程中的各个步骤和状态,可快速定位和修复问题。2.监控和性能分析用于监控应用程序的运......
  • http请求问题
    在建立http请求的时候,一定要注意请求格式:publicstaticJSONObjecthttpRequest(StringrequestUrl,StringrequestMethod,StringoutputStr){JSONObjectjsonObject=null;StringBufferbuffer=newStringBuffer();try{URLurl=newURL(requestUrl);......
  • Redis 缓存系统常见问题及解决方案(缓存击穿,缓存穿透,缓存雪崩)
    1、缓存穿透缓存穿透指当用户在Redis缓存系统执行一条无效查询时,这条无效查询将穿透Redis缓存系统并向MySQL数据库请求数据,而MySQL数据库也获取不到数据。黑客可以利用缓存穿透原理,恶意执行大量无效查询,这将会对MySQL数据库的访问造成很大的压力解决方法:1、缓存......
  • SQL(Structured Query Language)简介和常见 SQL 命令示例
    简介SQL(StructuredQueryLanguage)是一种用于访问和操作关系型数据库的标准语言。它是一个功能强大的语言,用于执行各种数据库操作,包括检索数据、插入新记录、更新记录、删除记录、创建数据库、创建新表、设置权限以及执行存储过程和视图等。以下是SQL的一些重要方面:SQL的目的......
  • SQL(Structured Query Language)简介和常见 SQL 命令示例
    简介SQL(StructuredQueryLanguage)是一种用于访问和操作关系型数据库的标准语言。它是一个功能强大的语言,用于执行各种数据库操作,包括检索数据、插入新记录、更新记录、删除记录、创建数据库、创建新表、设置权限以及执行存储过程和视图等。以下是SQL的一些重要方面:SQL的目......
  • HTTP 响应字段 Transfer-Encoding 的作用介绍
    Transfer-Encoding字段是HTTP响应头部的一部分,用于指示在传输响应正文(responsebody)时所使用的传输编码方式。在HTTP通信中,响应正文可以以多种不同的编码方式传输,其中一种方式是chunked传输编码。本文将详细介绍Transfer-Encoding字段的含义和chunked传输编码,以及提供示例来解释这......
  • Java常见的输入输出流详解
    Java默认使用Unicode字符集来表示字符;Java语言中,中文字符所占的字节数取决于字符的编码方式,采用ISO8859-1编码方式时,一个中文字符与一个英文字符一样只占1个字节;采用GB2312或GBK或Unicode编码方式时,一个中文字符占2个字节;而采用UTF-8编码方式时,一个中文字......
  • 一个Git clone仓库的指定目录命令对比国内外常见AI(二)使用天工AI
    通常情况下,我们会克隆整个Git仓库,但有时候我们只需要其中某一个目录或文件,这时候只克隆子目录会更加方便。这个需求好像不是经常用到,搜索结果也是五花八门,有些完全达不到要求,正好用这个机会测试一下最近大火的AI看看是否足够智能。国内天工AI(推荐使用,替代百度搜索,不用注册,包含参考......
  • 微服务 在 Java 代码中发送 http 请求(跨服务远程调用)
    1.注册RestTemplate对象到Spring容器中(Bean的注入只能放在配置类里,而启动类本身就是配置类)@SpringBootApplicationpublicclassOrderServiceApplication{publicstaticvoidmain(String[]args){SpringApplication.run(OrderServiceApplication.class,......
  • http请求头中的content-type
    web开发过程中客户端与服务端一般通过HTTP协议交互信息,而请求头和响应头用来承载这些交互信息。请求头和响应头比较正式的叫法分别是请求报文和响应报文,统称为HTTP报文。下面是HTTP报文的结构:HTTP报文分为报文首部和报文主体,两者之间用空行分隔(空行由回车符和换行符生成)。cont......