【前端全家桶】 HTTP协议类

写在开头

大家好,这里是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:所请求的页面已经转移至新的URL
  • 302 Found:所请求的页面已经临时转移至新的URL
  • 304 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 支持此技术(重点)
  • 只有gethead请求可以进行管线化,而 post 有所限制(重点)
  • 初次创建连接时不应启动管线机制,因为对方(服务器)不一定支持 HTTP /1.1版本的协议(重点)
  • 管线化不会影响响应到来的顺序,如上面的例子所示,响应返回的顺序并未改变
  • HTTP / 1.1要求服务器端支持管线化,但并不要求服务器端也对响应进行管线化处理,只是要求对于管线化的请求不失败即可
  • 由于上面提到的服务器端的问题,开启管线化很可能并不会带来大幅度的性能提升,而且很多服务器端和代理程序对管线化的支持并不好,因此现代浏览器如 ChromeFirefox 默认并未开启管线化支持

结尾

如若本文有瑕疵需修改的地方,请提出来,谢谢您的贡献!

欢迎关注微信公众号:小狮子前端Vue

谢谢您的支持!✿✿ヽ(°▽°)ノ✿

学如逆水行舟,不进则退
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章