[HTTP][概述][一][学习笔记]
1.HTTP概述
超文本传输协议(HTTP)是一个用于传输超媒体文档(例如HTML)的应用层协议。它是为Web浏览器与Web服务器之间的通信而设计的。HTTP遵循CS模型,客户端打开一个连接以发出请求,然后等待直到收到服务器端响应。HTTP是无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)。尽管通常基于TCP/IP层,但它可以在任何可靠的传输层上使用,也就是说,该协议不像UDP那样静默丢失消息。RUDP(UDP可靠化升级版本)是合适的替代选择。
Web栈的层次结构图
客户端和服务端交换各自消息进行交互。浏览器发出requests,服务端响应responses。
2.基于HTTP的组件系统
HTTP是cs协议:请求通过一个实体发出,实体就是用户代理。一般指浏览器,但也可以是爬虫之类的。
每个发到服务器的请求,都会被服务器处理并返回一个消息(response)。在请求与响应之间有很多称为proxies的实体,比如网关、缓存等。
2.1.客户端:user-agent
user-agent就是能为用户发起行为的工具。通常指浏览器。浏览器总是作为发起一个请求的实体,要展现一个网页,浏览器首先发送一个请求来获取页面的HTML文档,在解析文档中的资源信息发送其他请求,获取脚本或CSS进行布局渲染以及其他图片视频等。然后,浏览器将这些资源整合起来,形成网页。
一个网页就是一个超文本文档。其中一部分显示的文本可能是链接,点击它能获取一个新页面。浏览器负责发送HTTP请求,并进一步解析HTTP返回的消息,以向用户提供明确的响应。
2.2.Web服务端
Web Sever来服务并提供客户端所请求的文档。Server可以代表服务器,也可以是一种软件,通过向其他计算机(缓存,数据库服务器等)发起请求来获取资源。
2.3.代理(Proxies)
在浏览器和服务器之间,有很多计算机和其他设备转发了HTTP消息。由于Web栈层次结构的原因,大多出现在传输层、网络层和物理层上。还有一部分在应用层上,被称为代理(Proxies)。代理可以为透明,也可以不透明("改变请求"会通过他们)。代理主要作用由:
- 缓存(可以是公开的也可以是私有的,像浏览器的缓存)
- 过滤(像反病毒扫描,家长控制等)
- 负载均衡(让多个服务器服务不同的请求)
- 认证(对不同资源进行权限管理)
- 日志记录(允许存储历史信息)
3.HTTP的基本特质
3.1.HTTP是简单的
HTTP被设计得简单易读,报文能够被人都懂,还允许简单测试,降低了门槛。
3.2.HTTP是可拓展的
在HTTP/1.0中出现的HTTP headers让协议扩展变得非常容易。只要服务端和客户端就新 headers 达成语义一致,新功能就可以被轻松加入进来。
3.3.HTTP是无状态,有会话的
HTTP是无状态的:在同一个连接中,两个执行成功的请求之间是没有关系的。这样会带来一个问题,用户没有办法在同一个网站中进行连续的交互,比如在购物网站,用户添加了购物车,切换到另一个页面后再添加购物车,这两次添加购物车没有任何关联,浏览器无法知道用户选了什么商品。使用HTTP的头部扩展,HTTP Cookies可以解决这个问题。把Cookies添加到头部中,创建一个会话让每次请求都能共享相同的上下文信息,达到相同的状态。HTTP本质无状态,使用Cookies创建有状态会话。
3.4.HTTP和连接
一个连接是传输层控制的,不属于HTTP范围。HTTP并不需要底层的传输层协议是面向连接的,只需要它是可靠的或不丢失消息的(出错会返回错误)。在互联网中两个最常用的协议:TCP是可靠的,UDP不可靠。因此,HTTP依赖于面向连接的TCP进行消息传递,但连接不是必须的。
在客户端与浏览器交互之前,必须在两者之间建立一个TCP链接,打开一个TCP连接需要多次交换消息(很耗时)。为了减轻这些缺陷,HTTP通过在一个连接复用消息的方式来让这个连接始终保持为暖连接。为了更好的适合HTTP,设计一种更好传输协议的进程一直在进行。
4.HTTP能控制什么
4.1.缓存
通过HTTP来控制文档如何缓存。服务端能告诉代理和客户端哪些文档需要被缓存,缓存多久,客户端也能够命令中间的缓存代理来忽略存储的文档。
4.2.开放同源限制
为了防止隐私泄露,浏览器强制对Web网站做了分割限制。只有来自于相同来源的网页才能够获取网站的全部信息。HTTP可以通过修改头部来开放这样的限制,因此Web文档可以是由不同域下的信息拼接成的。
4.3.认证
一些页面被保护起来只让特定用户访问。基本的认证功能可以直接通过HTTP提供,使用Authenticate相似头部或者HTTP Cookies设置指定会话。
4.4.代理和隧道
一般情况下服务器或客户端是出于内网的,对外网隐藏真实IP。因此HTTP请求就要通过代理越过这个网络屏障。但不是代理都是HTTP代理。比如,SOCKS协议代理就运行在更底层,一些像FTP这样的协议都能够被它们处理。
4.5.会话
使用HTTP Cookies允许用一个服务端的状态发起请求,创建会话。基本的HTTP是无状态的协议。不仅仅可以应用到像购物车这样的电商业务上,任何网站都可以为用户定制显示内容。
5.HTTP流
当客户端和服务端进行交互时要经过以下几步:
-
打开TCP连接:TCP连接用来发送一条或多条请求,以及接受响应消息。客户端可能打开一条新的连接或重用已经存在的连接,也可能开几个连接。
-
发送一个HTTP报文:报文被封装在帧中。
-
读取服务端返回的报文信息
-
关闭连接或为后续请求重用连接。
6.HTTP报文
有两种HTTP报文类型,请求与响应。
6.1.请求
- HTTP的method,经常是由一个动词像GET, POST 或者一个名词像OPTIONS,HEAD来定义客户端的动作行为。通常客户端的操作都是获取资源(GET方法)或者发送HTML form表单(POST方法),虽然在一些情况下也会有其他操作。
- path,路径
- accept-encoding,接受的编码
- accept-language,接受的语言
6.2.响应
7.基于HTTP的APIs
基于HTTP的最常用API是XMLHttpRequest API,可用于在user agent和服务器之间交换数据。 现代Fetch API提供相同的功能,具有更强大和灵活的功能集。
另一种API,即服务器发送的事件,是一种单向服务,允许服务器使用HTTP作为传输机制向客户端发送事件。使用EventSource接口,客户端打开连接并建立事件句柄。 客户端浏览器自动将到达HTTP流的消息转换为适当的Event对象,并将它们传递给专门处理这类type事件的句柄,如果有这么个句柄的话。但如果相应的事件处理句柄根本没有建立,那就交给onmessage (en-US)事件处理程序处理。
- 点赞
- 收藏
- 关注作者
评论(0)