写在开头
大家好,这里是 lionLoveVue,基础知识决定了编程思维,学如逆水行舟,不进则退。金三银四,为了面试也还在慢慢积累知识,Github上面可以直接查看所有前端知识点梳理, github传送门,觉得不错,点个Star★,好运连连,Offer终究鼠于你,持续更新中。另外,也可以关注微信公众号: 小狮子前端Vue,源码以及资料今后都会放在里面。
一直想着成为一个up主,正值时间挺多的,4月份左右面试的面经我会制作视频去分享,赶快捧个场吧。 哔哩哔哩:一百个Chocolate
HTTP 协议类
题目
-
HTTP协议的主要特点
-
HTTP报文的组成部分
-
HTTP方法
-
POST和GET的区别
-
HTTP状态码
-
什么是持久连接
-
什么是管线化
HTTP协议的主要特点
- 简单快速 (每个资源URL是固定的,一个图片或页面地址,统一资源符,只需输入URL即可访问)
- 灵活 (在HTTP协议头部head部分有一个数据类型,通过http协议可以完成不同数据类型的传输)
- 无连接 (连接一次会断掉,不会保持连接)
- 无状态 (客户端和服务端连接两次,不能区分两次连接者身份)
HTTP报文的组成部分
- 请求行:包含方法、页面地址、HTTP协议版本
- 请求头:key-value值,告诉服务端需要什么内容,要注意什么类型
- 空行:告诉服务端请求头结束,接下来是请求体部分了
- 请求体:数据部分
同理,响应报文
请求示例
以上第一行就是请求行,包含GET
方法 / 表示首页 HTTP/1.1
表示HTTP协议版本
后面内容都是请求头,都是key-value
键值对
空行在这里没有显示出来,然后对于请求体就是一些数据部分了。
响应示例
第一行是状态行,包含HTTP协议版本,协议状态码200
下面就是响应头了,也是键值对的形式
下面会有一个空行,类似下面这种效果(下面这条分割横线)
HTTP方法
方法 | 作用 |
---|---|
GET | 获取资源 |
POST | 传输资源 |
PUT | 更新资源 |
DELETE | 删除资源 |
HEAD | 获取报文首部 |
POST和GET的区别(重点前5条)
-
get在浏览器回退时是无害的,而post会再次提交请求
-
get请求会被浏览器主动缓存,而post不会,除非手动设置
-
get请求参数会被完整保留在浏览器历史记录里,而post中的参数不会被保留
-
get请求在URL中传送的参数是有长度限制的,而POST没有限制
-
get参数通过URL传递,post放在Request body中
-
get请求只能进行url编码,而post支持多种编码方式
-
对参数的数据类型,get只接受ASCALL字符,而post没有限制
-
get比post更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息
-
get产生的URL地址可以被收藏,而post不可以
HTTP状态码
- 1xx:指示信息——表示请求已接收,继续处理
- 2xx:成功——表示请求已经被成功接收
- 3xx:重定向——要完成请求必须进行更进一步的操作
- 4xx:客户端错误——请求有语法错误或请求无法实现
- 5xx:服务器错误——服务器未能实现合法的请求
一般答完上述基本ok了,如果问的详细一点的话,就多加一点知识上去:
200 OK
:客户端请求成功206 Partial Content
:客户发送了一个带有Range(范围)头的GET请求,服务器完成了它(比如客户端请求0-1w字节,服务器就会返回206,常见播放视频和音频地址,文件过大时一般返回206)
301 Moved Permanently
:所请求的页面已经转移至新的URL302 Found
:所请求的页面已经临时
转移至新的URL304 Not Modified
:客户端有缓冲
的文档并发出一个条件性的请求,服务器告诉客户,原来缓冲的文档还可以继续使用
400 Bad Request
:客户端请求有语法错误,不能被服务器所理解401 Unauthorized
:请求未经授权,这个状态码必须和WWW-Authenticate
报头域一起使用403 Forbidden
:请求访问的页面被禁止(比如页面只能通过服务端去访问)404 Not Found
:请求资源不存在
500 Internal Server Error
:服务器发生不可预料的错误但原来缓冲的文档还可以继续使用503 Server Unavailable
:请求未完成,服务器临时过载或当机,一段时候后可能恢复正常
什么是持久连接
HTTP协议采用“请求-应答”模式,当使用普通模式,即非 Keep-Alive
模式时,每个请求 / 应答客户和服务器都要新建一个连接,完成之后立即断开连接(HTTP协议为无连接的协议)
当使用 Keep-Alive
模式(又称持久连接、连接重用)时,Keep-Alive
功能使客户端到服务端的连接持续有效,当出现对服务器的后续请求时,Keep-Alive
功能避免了建立或者重新建立连接
PS:只有HTTP 1.1 版本才支持持久连接,1.0不支持。
什么是管线化(加分点)
在使用持久连接的情况下,某个连接上消息的传递类似于
请求1->响应1->请求2->响应2->请求3->响应3
某个连接上的消息类似变成了这样:
请求1->请求2->请求3->响应1->响应2->响应3
(将请求打包一起发送,然后服务器一起打包回来响应)
拓展知识:
- 管线化机制通过持久连接完成,仅
HTTP / 1.1
支持此技术(重点) - 只有
get
和head
请求可以进行管线化,而post
有所限制(重点) - 初次创建连接时不应启动管线机制,因为对方(服务器)不一定支持
HTTP /1.1
版本的协议(重点) - 管线化不会影响响应到来的顺序,如上面的例子所示,响应返回的顺序并未改变
HTTP / 1.1
要求服务器端支持管线化,但并不要求服务器端也对响应进行管线化处理,只是要求对于管线化的请求不失败即可- 由于上面提到的服务器端的问题,开启管线化很可能并不会带来大幅度的性能提升,而且很多服务器端和代理程序对管线化的支持并不好,因此现代浏览器如
Chrome
和Firefox
默认并未开启管线化支持
结尾
如若本文有瑕疵需修改的地方,请提出来,谢谢您的贡献!
欢迎关注微信公众号:小狮子前端Vue
谢谢您的支持!✿✿ヽ(°▽°)ノ✿
学如逆水行舟,不进则退