+————————-+
|应用层(Application Layer)| <- http
+————————-+
+————————–+
|表现层(Presentation Layer)|
+————————–+
+———————+
|会议层(Session Layer)|
+———————+
+———————–+
|传输层(Transport Layer)|
+———————–+
+———————+
|网络层(Network Layer)|
+———————+
+—————————+
|数据链路层(Data Link Layer)|
+—————————+
+———————-+
|物理层(Physical Layer)|
+———————-+
用于web浏览器 和 web服务器之间的通信设计
+——+ response +——-+
|客户端|——————–>|服务端 |
+——+ +——-+
+——+ request +——-+
|客户端|<——————–|服务端 |
+——+ +——-+
http 请求由一个实体,即用户代理(use agent) 或者一个可以代表它的代理方(proxy)发出,大多数情况下,这个用户代理都是一个web浏览器,不过也可以是个机器爬虫
在客户端宇服务器中间,还有很多代理的实体,有不同的作用,比如充当网管 和 缓存
+——+ +—–+ +——+
|clilet|———–>|Proxy|——-> |server|
+——+ +—–+ +——+
+——+ +—–+ +——+
|clilet|<———–|Proxy|<——- |server|
+——+ +—–+ +——+
是指可以代表用户的工具,这个类工具以浏览器为主,也可以其他
浏览器总是先发起请求->得到这个页面的html文档-> 解析文档-> 并发出数个请求->获得脚本,布局信息(css)->获得一子资源(图片或视频)->Web 浏览器将这些资源整合到一起,展现出一个完整的文档->浏览器中执行的脚本可以获取更多资源,并且浏览器会相应地更新网页。
负责提供客户端所请求的文档
服务器 同一台机器上托管多个服务器软件实例。利用 HTTP/1.1 和 Host 标头,它们甚至可以共用同一个 IP 地址
缓存(可以是公开的也可以是私有的,如浏览器的缓存)
过滤(如反病毒扫描、家长控制…)
负载均衡(让多个服务器服务不同的请求)
认证(控制对不同资源的访问)
日志(使得代理可以存储历史信息)
….
http 是简单易读
在http/2 中 http消息被封装进入了frame
http 可扩展的
http 是无状态的,可以使用http cookie 让每个请求能共享到相同的上下文或相同的状态
http 的连接
在客户端与服务器能够传递请求、响应之前,这两者间必须建立 TCP 连接,这个过程需要多次往返交互
HTTP/1.0 默认为每一对 HTTP 请求/响应都打开一个单独的 TCP 连接。当需要接连发起多个请求时,工作效率比一个TCP低
HTTP/1.1 引入了流水线(已被证明难以实现(没有广泛使用))和持久化连接:
持久化:可以通过 Connection 标头来部分控制底层的 TCP 连接默认不关闭TCP连接,可以被用来传输多个请求和响应
这种连接被称为“持久化连接”,并且可以通过 Connection: keep-alive 头部来启用。持久化连接减少了建立和关闭连接的开销,特别是在发送多个请求时。
HTTP/2 通过在一个连接中复合多个消息,让这个连接始终活跃并更加高效。
缓存:文档如何被缓存可以通过 HTTP 来控制。服务端能指示代理和客户端缓存哪些内容以及缓存多长时间,客户端能够指示中间的缓存代理来忽略已存储的文档。
开放同源限制:为了阻止网络窥听和其它侵犯隐私的问题,Web 浏览器强制在不同网站之间做了严格分割。只有来自于相同来源(same origin)的网页才能够获取一个网页的全部信息
认证:一些页面可能会被保护起来,仅让特定的用户进行访问。基本的认证功能可以直接由 HTTP 提供,既可以使用 WWW-Authenticate 或其他类似的标头,也可以用 HTTP cookie 来设置一个特定的会话
代理服务器和隧道:服务器或客户端常常是处于内网的,对其他计算机隐藏真实 IP 地址。因此 HTTP 请求就要通过代理服务器越过这个网络屏障。并非所有的代理都是 HTTP 代理,例如,SOCKS 协议就运作在更底层。其他的协议,比如 ftp,也能够被这些代理处理
会话:使用 HTTP Cookie 可以利用服务端的状态将不同请求联系在一起。这就创建了会话,尽管 HTTP 本身是无状态协议。这不仅仅对电商平台购物车很有用,也让任何网站都能够允许用户自由定制内容了
1 | GET / HTTP/1.1 |
GET :http 方法
/ :
HTTP/1.1 :HTTP协议号
1 | Host: developer.mozilla.org |
标头
响应
1 | HTTP/1.1 200 OK //http协议号 状态码 状态信息 |
FetchAPI 是基于HTTP最常用的api,还有过时的XMLHttpRequest
server-sent事件 单向服务 允许服务端借助作为 HTTP 传输机制向客户端发送事件
使用 EventSource 接口,客户端可打开连接并创建事件处理器。客户端浏览器自动将 HTTP 流里到达的消息转换为适当的 Event 对象。继而将已知类型的事件,传递给先前注册过的事件处理器,其他未指明类型的事件则传递给 onmessage 事件处理器。