# 关于HTTP
主要是了解一些关于http的基础知识,毕竟这个知识点展开的话内容确实很多。主要是我们工作当中可能会用到的一些概念,面试中可能会问的一些基础知识点。
首先知道http是什么, 用来做什么我觉得就足够了。能知道面试问的一些基本概念吧
超文本传输协议(HTTP)是一个用于传输超媒体文档的应用层协议。主要可以用于浏览器和服务端通信,HTTP 遵循经典的客户端-服务端模型,客户端打开一个连接以发出请求,然后等待直到收到服务器端响应。HTTP 是无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)。尽管通常基于 TCP/IP 层,但它可以在任何可靠的传输层上使用。
# 一个HTTP请求的组成
POST /login HTTP/1.1
HOST: xdyuan.cn
Accept-Language: zh
content-type: application/json;charset=UTF-8
authorization: token
{"username": "xxx"}
请求方法 空格 路径path HTTP/版本号 回车换行
多个头部
添加空行
请求体
# 一个HTTP response
偷个懒
# HTTP连接
一个连接是由传输层来控制的,这从根本上不属于HTTP的范围。HTTP并不需要其底层的传输层协议是面向连接的,只需要它是可靠的,或不丢失消息的(至少返回错误)。在互联网中,有两个最常用的传输层协议:TCP是可靠的,而UDP不是。因此,HTTP依赖于面向连接的TCP进行消息传递,但连接并不是必须的。
在客户端(通常指浏览器)与服务器能够交互(客户端发起请求,服务器返回响应)之前,必须在这两者间建立一个 TCP 链接,打开一个 TCP 连接需要多次往返交换消息(因此耗时)。HTTP/1.0 默认为每一对 HTTP 请求/响应都打开一个单独的 TCP 连接。当需要连续发起多个请求时,这种模式比多个请求共享同一个 TCP 连接更低效。
为了减轻这些缺陷,HTTP/1.1引入了流水线(被证明难以实现)和持久连接的概念:底层的TCP连接可以通过Connection
(opens new window)头部来被部分控制。HTTP/2则发展得更远,通过在一个连接复用消息的方式来让这个连接始终保持为暖连接。
TIP
Connection 头(header) 决定当前的事务完成后,是否会关闭网络连接。如果该值是“keep-alive”,网络连接就是持久的,不会关闭,使得对同一个服务器的请求可以继续在该连接上完成。
# 基于HTTP的前端js api
基于HTTP的最常用API是 XMLHttpRequest API,可用于在user agent和服务器之间交换数据。 现代Fetch API提供相同的功能,具有更强大和灵活的功能集。
另一种API,即服务器发送的事件,是一种单向服务,允许服务器使用HTTP作为传输机制向客户端发送事件。 使用EventSource
接口,客户端打开连接并建立事件句柄。 客户端浏览器自动将到达HTTP流的消息转换为适当的Event
对象,并将它们传递给专门处理这类type
事件的句柄,如果有这么个句柄的话。但如果相应的事件处理句柄根本没有建立,那就交给onmessage
事件处理程序处理。
TIP
服务端可以单向推送事件流的这么一个技术,用在一些看板刷新应该会比较合适。应该是比较轻量级的那种文本流推送功能。
EventSource (opens new window)
可惜没有实践的机会,后续可以尝试用node实践一些demo。参考看看 (opens new window)
HTTP是一种简单可扩展的协议,其Client-Server的结构以及轻松扩展头部信息的能力使得HTTP可以和Web共同发展。
即使HTTP/2为了提高性能将HTTP报文嵌入到帧中这一举措增加了复杂度,但是从Web应用的角度看,报文的基本结构没有变化,从HTTP/1.0发布起就是这样的结构。
DANGER
以上内容只是自己的学习记录, 更全面的内容还是参考更官方的文档合理