HTTP - HTTP 面试题

简介: HTTP - HTTP 面试题

引言

原文如下:

3.1 HTTP 常见面试题 | 小林coding (xiaolincoding.com)

HTTP 是什么?

一句话解释是:超文本传输协议,HyperText Transfer Protocol。

超文本传输协议的概念可以拆分为三部分:

  • 协议:分为“协”和“议”两个部分,协代表协商,所以必须是两个人以上才能完成,“议”表示协商的具体内容,白纸黑字的约定。
  • 超文本:超文本我们得重点关注超这个单词,在英文里面叫做Super,它有一个含义是更加,简单理解为“更多的文本”,按照老外的思考逻辑我们应该理解为“不仅仅是文本”。
  • 传输:注意在HTTP中的传输不仅仅是单方向的,我们传输给对方信息的同时也期待对方能够回应,根据传输的定义我们可以发现HTTP协议本身就是双向的,也就说说HTTP是一个双向协议

三者的关系:超文本 ⊆ 传输 ⊆ 协议

HTTP下定义:实现两台计算机(或者说设备)两点之间不仅限于文本的数据传输的约定或规范。

针对HTTP,我们还可以给出这样的说法。

  1. HTTP 是用在计算机世界里的协议,确定了计算机之间的通信交流规范,以及相关的各种控制和错误处理方式。
  2. HTTP 专门用来在两点之间传输数据,不能用于广播、寻址或路由。
  3. HTTP 传输的是文字、图片、音频、视频等超文本数据。
  4. HTTP 是构建互联网的重要基础技术s,它没有实体,依赖许多其他的技术来实现,但同时许多技术也都依赖于它。

HTTP 常⻅的状态码,有哪些?

关联文章:[[《图解HTTP》- 状态码]]

(必须吹一波小林的图做的真好)

image.png

状态码定义

  • 1XX:1XX开头多为信息提示信息,几乎看不到使用场景,忽略即可。此外1XX的状态码并不会影响到SEO 优化。
  • 2XX: HTTP状态代码是成功请求。 比如HTTP 200 OK成功状态响应代码指示请求已成功。
  • 3XX:HTTP状态代码指示重定向。 最常见的 3XX HTTP状态代码包括“ 301永久移动”,“找到302”和“ 307临时重定向” HTTP状态代码。
  • 4XX 状态代码是客户端错误。 最常见的4xx状态代码是“ 404未找到”和“ 410消失” HTTP状态代码。
  • 5XX HTTP状态代码是服务器错误。 最常见的5xx HTTP状态代码是“ 503服务不可用”状态代码。

常见的响应码:

更多状态码的定义可以看这一篇文章:[[《图解HTTP》- 状态码]]

2XX状态码:

  • 200:表示一切正常,⾮HEAD 请求,服务器返回的响应头都会有 body 数据。
  • 204 No Content 常见成功状态码,和200相同但是没body。
  • 206 Partial Content 应用于HTTP分块下载或者断点续传,主要表示响应数据并不是全部,而是其中一部分。

3XX状态码:301:表示永久重定向,表示资源不在原来的位置,需要新的URL访问。 302:临时重定向,资源还在但是需要另一个URL访问。 304:请求的资源没有改变,但是被重定向到已缓冲的文件,所以也叫做缓存重定向,这个子弹主要是用于缓存处理。

400状态码

需要注意的状态码区别

  • 401 和 403 的区别(登录、权限)
  • 401 未授权:客户端访问请求的资源需要授权。响应内容中需要包含www-Authnticate 头信息和询问信息,如果已经存在证书访问还是401说明证书已经不被接受,如果401和前一个身份验证请求相同,并且浏览器进行了至少一次重试,则浏览器应该展示响应包含的实体信息(也就是诊断信息)。
  • 403 Forbidden:客户端尝试访问的资源被禁止。和401的区别是不提供任何身份认证的帮助,也不允许重复提交,但是服务端有义务声明不能访问的理由。
  • 404 和 410 的区别(是否永久不存在)
  • 404 未找到:服务器可访问,但客户端查找的特定页面不可访问或者资源不存在。服务可以利用这个状态码暴露自己服务存在的同时不想暴露“资源存在”。
  • 410 Gone:客户端想要访问的资源已被永久删除。主要用于服务端想要删除某个资源并且告知用户此资源不再接受访问的一种提示。注意这个状态码很像404,最大的区别是资源是否永久不存在
  • 408 和 504 的区别(服务端接收客户端超时、代理接收服务端超时)
  • 408 请求超时:客户端向网站服务器发送的请求已过期,切记这个错误来自客户端。客户端可以随时再次提交这一请求而无需进行任何更改。
  • 504 网关超时:服务器充当网关或者代理的时候,没有收到响应。和408的区别是408是服务端接受客户端超时,504是代理接收服务端超时。
  • 409 的场景(资源支持版本)409 冲突:发送的请求与服务器的内部操作发生冲突。注意只有在客户端具备自身处理能力,比如重新提交请求的前提下才能返回此状态码,响应信息中也需要提供冲突的源头内容。 此外冲突通常会发生在PUT请求当中,在使用版本检查的情况下,如果某次请求附带的版本信息和之前的内容冲突,就会返回此响应码。

HTTP 常见字段有哪些?

首先列举一遍,然后根据需要一个个过:

  • Host 字段
  • Content-Length 字段
  • Connection 字段
  • Content-Type字段
  • Content-Encoding字段
  • Host:用于客户端请求的时候指定服务端的域名。有时候同一个域名绑定多个服务器,通过此字段可以获取同一台服务器的不同网站。
  • Content-Length:表示本次返回数据长度。
  • Content-Encoding 字段:表示数据的压缩方式,表示服务器使用的压缩格式。比如使用GZIP的方式对于请求内容进行压缩。
  • Connection:主要的作用对于服务器的TCP进行持久链接,常用属性为Keep-Alive
  • Content-Type:表示指定本次请求返回的时候使用什么样的格式返回,

常见请求头

GET与POST

两者主要区别:

  • GET天然具备幂等性,幂等性指的是无论请求多少次,每次请求的结果都应该是一致的,不多次请求改变请求的状态。而POST请求通常很难保持幂等性,比如一次支付请求在重复提交的过程中,后到达的请求会被挡掉。
  • GET请求通常用于直接获取浏览器的资源,但是请求的URL会因为浏览器受到限制,并且URL传输的只能是ASCII字符,中文字符传输会被转义(HTTP协议本身没有限制URL长度)。POST请求定义为携带请求载荷数据对于服务器资源进行处理。

看完主要区别,再强调一下幂等性的关系:

  • GET本身就是幂等和安全的,浏览器可以对于GET请求进行缓存,理论上浏览器可以利用缓存完全避免对于服务器的请求,当然还有一种方式是借助NGINX代理等方式。GET请求可以作为书签使用。
  • POST对于服务器资源做修改操作的时候会修改资源,所以POST请求不具备幂等性,并且上文说的重复提交的场景也是导致不幂等的原因之一。所以浏览器一般不会缓存POST请求,也不能把POST请求当书签。

小结:

  1. GET 本身就是安全幂等的,GET的定义是获取资源。
  2. POST请求是通过负荷对于服务器进行操作,由于操作之后数据状态会发生改变,每次操作结果都会不同,所以是不幂等的。POST不幂等所以不能进行缓存。

但是我们需要避免先入为主的观念,比如可以使用GET对于数据进行增加和删除,也可以通过POST查询数据,幂等只是协议规范里面的定义。

HTTP本身就是明文传输,所谓的数据安全传输不是由请求方法决定的,而是取决于服务端对于敏感数据的保护。

所以为了保护这些数据,很多服务器对于敏感数据都会使用HTTPS的请求。

现在还有最后一个问题,,GET请求能不能带BODY?

答案是可以。RFC没有规定GET才能传数据,也没有规定POST不能URL传参。

最后留个小问题,如果在POST请求URL当中设置A=10,同时在请求BODY中设置A=20,假设服务端没有对请求方法做限制,A=?

HTTP不是什么

  1. HTTP 不是互联网。虽然大部分情况下我们接触HTTP协议是最为频繁的,但是并不是所有的互联网数据传输都是依赖HTTP,比如邮件依赖SMTP和POP3,服务器文件需要FTP等。
  2. HTTP 不是编程语言。 而是一份协议,所谓的协议就是计算机和计算机之间的交流语言规范,
  3. HTTP 不是 HTML。虽然经常出现,但是两者是完全不同的技术。HTTP是通信层数据传输协议,HTML是超文本标记语言,最直接的区别是HTML是标记的“编程语言”。但是HTML通常编写需要HTTP传输的相关文本数据进行交互和展示。
  4. HTTP 不是一个孤立的协议。 指的是它是TCP/IP 协议群里面的一员,HTTP本身是不具备数据传输功能的,我们所看到的网页从服务器依靠TCP/IP 各层通信协议的配合,最终才送到客户端提供给用户浏览。

HTTP 历史快速回顾

  1. HTTP 协议始于三十年前蒂姆·伯纳斯 - 李的一篇论s文;
  2. HTTP/0.9 是个简单的文本协议,只能获取文本资源;
  3. HTTP/1.0 确立了大部分现在使用的技术,但它不是正式标准
  4. HTTP/1.1 是目前互联网上使用最广泛的协议,功能也非常完善;
  5. HTTP/2 基于 Google 的 SPDY 协议,注重性能改善,但普及程度不是很理想;
  6. HTTP/3 基于 Google 的 QUIC 协议,但是存在某些缺陷,目前有大厂以此进行改进。

FAQ

HTTP 是⽤于从互联⽹服务器传输超⽂本到本地浏览器的协议 ,这种说法正确吗?

错误,首先HTTP协议传输是双向的,其次传输不一定是服务器到浏览器传输,可以使任意支持HTTP协议的设备。

什么是WebServer,什么是WebServer服务器

Web server是web服务器,web service是一种web服务协议



相关文章
|
1月前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
7月前
|
算法 网络协议 安全
HTTP 原理和面试题
HTTP 原理和面试题
|
5月前
|
Web App开发 JavaScript 网络协议
|
6月前
|
缓存 网络协议 安全
Android网络面试题之Http基础和Http1.0的特点
**HTTP基础:GET和POST关键差异在于参数传递方式(GET在URL,POST在请求体),安全性(POST更安全),数据大小限制(POST无限制,GET有限制),速度(GET较快)及用途(GET用于获取,POST用于提交)。面试中常强调POST的安全性、数据量、数据类型支持及速度。HTTP 1.0引入了POST和HEAD方法,支持多种数据格式和缓存,但每个请求需新建TCP连接。**
56 5
|
6月前
|
缓存 网络协议 Android开发
Android网络面试题之Http1.1和Http2.0
HTTP/1.1 引入持久连接和管道机制提升效率,支持分块传输编码和更多请求方式如PUT、PATCH。Host字段指定服务器域名,RANGE用于断点续传。HTTP/2变为二进制协议,实现多工处理,头信息压缩和服务器推送,减少延迟并优化资源加载。HTTP不断发展,从早期的简单传输到后来的高效交互。
76 0
Android网络面试题之Http1.1和Http2.0
|
7月前
|
JSON Java API
Android 深入Http(5)从Retrofit源码来看Http,最新Android开发面试解答
Android 深入Http(5)从Retrofit源码来看Http,最新Android开发面试解答
|
7月前
|
缓存 安全 网络协议
【面试必备】HTTP和HTTPS是什么?有什么差异?
HTTP(超文本传输协议)和HTTPS(超文本传输安全协议)是用于在互联网上传输数据的协议。它们都是应用层协议,建立在TCP/IP协议栈之上,用于客户端(如浏览器)和服务器之间的通信。
237 2
|
7月前
|
XML 开发框架 .NET
C# .NET面试系列八:ADO.NET、XML、HTTP、AJAX、WebService
## 第二部分:ADO.NET、XML、HTTP、AJAX、WebService #### 1. .NET 和 C# 有什么区别? .NET(通用语言运行时): ```c# 定义:.NET 是一个软件开发框架,提供了一个通用的运行时环境,用于在不同的编程语言中执行代码。 作用:它为多语言支持提供了一个统一的平台,允许不同的语言共享类库和其他资源。.NET 包括 Common Language Runtime (CLR)、基础类库(BCL)和其他工具。 ``` C#(C Sharp): ```c# 定义: C# 是一种由微软设计的面向对象的编程语言,专门为.NET 平台开发而创建。 作
329 2
|
7月前
|
存储 缓存 安全
面试题:HTTP 协议包括哪些请求?
面试题:HTTP 协议包括哪些请求?
62 0
|
7月前
|
安全 应用服务中间件 Apache
面试题:HTTP长连接在什么时候会超时?
面试题:HTTP长连接在什么时候会超时?
172 0

热门文章

最新文章