前端面试题之HTTP协议类

HTTP

本文主要介绍面试可能会问到的关于http方面的问题。都是比较基础的问题,需要自己理解记忆,面试的时候能回答出来即可。更深入的问题,以后可能会再列举补充。

1. HTTP协议的主要特点

其特点主要有四个:简单快速、灵活、无连接、无状态。
- 简单快速:统一资源服,资源地址是固定的,请求资源只需要传送对应的路径和方法。
- 灵活:HTTP允许传输任意类型的数据对象。同一个http协议可以完成不同数据类型的传输。
- 无连接:每次处理完请求之后,链接就会断开,不会一直处于链接状态。
- 无状态:无状态是指协议对于事务处理没有记忆能力,简单说就是每次请求处理完断开后,没有记录信息,客户端再次请求,服务端也不能识别是否是同一个客户端。

2. HTTP报文的组成部分

报文分为:请求报文、响应报文。
请求报文包括:
- 请求行:主要包括请求方法、页面地址、协议版本。
- 请求头:由key/value 组成,告诉服务端需要的资源类型。
- 空行:表示请求头结束,下边的都是请求体内容。
- 请求体:包括请求的一些数据。
响应报文:响应行、响应头、空行、响应体与请求报文相差不多,就不做详细解释了。

3. HTTP方法

主要列举常见的以及常用的方法。
GET:请求资源;
POST:传输资源;
HEAD:获取报文首部数据;
PUT:更新资源;(应用不多)
DELETE:删除资源;(应用更少)

4. POST和GET的区别

1、GET 在浏览器回退时是无害的,而POST会再次提交请求。
2、GET 请求会被浏览器主动缓存,POST不会,除非手动设置。
3、GET 请求参数会被完整保留在浏览器历史记录中,POST不会保存。
4、GET 请求在URL中传递的参数是有长度限制的,POST不会限制。
5、GET 参数通过URL传递,POST 放在 Reques Body 中。
6、GET 产生的URL 地址可以收藏,POST 不可以。
7、GET 请求只能进行 url 编码,而POST 支持多种编码方式。
8、对参数的数据类型,GET只接受ASCII 字符,POST没有限制。
9、GET比POST更不安全,GET的参数都暴露在URL上,不能用来传递敏感信息。
以上的区别,选择性的记几条,以前五条为主。

5. HTTP状态码

状态码表示服务端返回的响应状态码。
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
分类 分类描述
1** : 信息,服务器收到请求,需要请求者继续执行操作
2** : 成功,操作被成功接收并处理
3** : 重定向,需要进一步的操作以完成请求
4** :客户端错误,请求包含语法错误或无法完成请求
5** :服务器错误,服务器在处理请求的过程中发生了错误

常见的状态码主要有:
200:请求成功。一般用于GET与POST请求
206:部分内容。服务器成功处理了部分GET请求
301:永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302:临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
304:未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
400:客户端请求的语法错误,服务器无法理解
401:请求要求用户的身份认证
403:服务器理解请求客户端的请求,但是拒绝执行此请求
404:服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置”您所请求的资源无法找到”的个性页面
500:服务器内部错误,无法完成请求
503:由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
更多更详细的请参考菜鸟教程HTTP教程http状态码

6. 什么是持久连接?管线化?

持久连接
HTTP协议采用”请求-应答“模式,当使用普通模式,即非持久连接(Keep-Alive)模式时,每个请求/应答客户端和服务端都要重新建立连接,完成之后立即断开。(HTTP为无连接协议)

当使用Keep-Alive模式(又称持久连接,连接重用)时,Keep-Alive 功能使客户端到服务端的连接持续有效,当出现对服务器的后续请求时,Keep-Alive 功能避免了建立或者重新建立连接。(http 1.1版本支持)

管线化
在使用持久连接的情况下,某个连接上的消息传递类似于这样:
请求1->响应1->请求2->响应2->请求3->响应3

管线化就是将请求和响应都进行打包,即:
请求1->请求2->请求3->响应1->响应2->响应3

管线化特点:

  • 管线化机制通过持久连接完成,仅HTTP1.1版本支持。
  • 只有GET 和 HEAD 请求可以进行管线化,POST有限制。
  • 初次创建连接时不应启动管线机制,因为服务器不一定支持HTTP1.1版本的协议
  • 管线化不会影响到响应的顺序。
  • HTTP1.1要求服务端支持管线化,但并不要求服务端也对响应进行管线化处理,只是要求对于管线化的请求不是白即可。
  • 由于上面提到的服务端问题,开启管线化可能并不会带来大幅度的性能提升,而且很多服务端和代理程序对管线化的支持并不好,因此现代浏览器默认并未开启管线化支持。

对于管线化,能简单回答出是什么和有什么特点即可。

本文主要介绍这么多,有新的扩展后续会再介绍。有什么不对的地方欢迎指正。

猜你喜欢

转载自blog.csdn.net/m0_37585915/article/details/78507231