TLS
传输层安全性协议(Transport Layer Security),他的前身是SLL(Secure Sockets Layer),是一个被应用程序用来在网络中安全通信的protocol(通讯协议),防止电子邮件,网页,消息以及其他协议被篡改或是窃听。
所有现代浏览器都支持 TLS 协议,它们都要求服务器提供一个有效的digital certificate(数字证书)来确认身份以建立安全连接。如果客户端和服务器都能提供自己的数字证书,则它们可以互相认证。
TCP
传输控制协议(TCP)是主要的网络协议之一。它使两台主机能够建立连接并交换数据流。TCP能保证数据的交付,维持数据包的发送顺序。
深入
TCP 是互联网的基本通信语言协议。它会校验包的交付。TCP 被用于 Web 浏览器连接到互联网时以及从一个地址向另一个地址发送文件传递电子邮件。TCP 确保数据传输的可靠性,并且保证每一个字节在接收时维持它们的发送顺序。操作系统通过一个编程接口来管理 TCP。
HTTP概述
HTTP是一种用作获取HTML这类资源的协议。他是Web上进行任何数据的交换的基础。同时也是一种客户端--服务器(client-server)协议
客户端和服务端之前通过交换一个个独立的消息(而非数据流)进行通信。由客户端----通常是浏览器-----发出的消息叫做请求(request),由服务器发出的应答消息被称作为响应(response)。
Cache
cache(web cache或者THHP cache)是临时存储HTTP响应的组件,只要它符合一定条件,就可以用于后续的HTTP请求。
基于HTTP的组件系统
HTTP是一个客户端--服务器协议:请求由一个实体,即用户代理,或是一个可以代表他的代理方(proxy)发出。大多数情况下,用户代理都是一个网页浏览器,不过他可能是任何东西,比如一个爬取网页来充实,维护搜索引擎索引的机器爬虫(网络爬虫其实叫做网络数据采集更好理解,就是通过编程向网络服务器请求数据(HTML表单),然后解析HTML,提取出自己想要的数据)。
每个请求都会被发送到一个服务端,它会处理这个请求并提供一个作为响应的回复。在客户端和服务端之间,还有许许多多的被称为代理的实体,履行着不同的作用,例如充当网关或缓存。
客户端:用户代理
用户代理是能代表用户行为的工具,这类工具以浏览器为主。浏览器总是首先发起请求的那个实体,永远不会是服务端。
为了展现一个网页,浏览器需要发送最初的请求来获取描述这个页面的HTML文档。接着,解析文档并发送数个其他请求,响应的获取可执行脚本,展示用的布局信息(CSS),以及其他的一些页面资源(视频或图片等)。然后,浏览器将这些整合到一起,展现出一个完整的文档,即Web页面,之后的阶段,浏览器的可执行脚本会获取更多的资源,同时浏览器会更新网页。
一个Web网页是一个超文本文档。这意味着它展示的有一部分是链接--可以被激活,来获取一个新的网页--用户可以通过这些指示用户代理进行网络浏览,浏览器会将收到的指示变成HTML请求,并进一步解析HTTP响应。
Web服务端
他负责提供客户端所请求的文档。
代理
代理服务器是用来在不同的Internet网络之间进行导航的中继软件和计算机。代理服务器会拦截请求并提供响应;他不一定会转发所有请求(比如说在有缓存的情况),而且修改请求或响应(比如说在两个网络环境边界的时候修改头部信息)。
代理可以存在在自己的电脑上,或者任何其他在用户计算机与互联网上的远程服务器之间的任何一个地方。一般来说,有两种代理类型:
-
正向代理:指处理到互联网请求的代理。
-
反向代理:只处理到互联网的请求并转发到服务器的代理。
代理可以将请求传递给服务器之前使用一些手段修改这个请求。
-
缓存(可以是公开的也可以是私有的,如浏览器的缓存)
-
过滤(如反病毒扫描、家长控制...)
-
负载均衡(让多个服务器服务不同的请求)
-
认证(控制对不同资源的访问)
-
日志(使得代理可以存储历史信息)
HTTP的基本性质
-
HTTP是简约的大体上,HTTP被设计得简单易读。
-
HTTP是可扩展的在HTTP/1.0中引用的HTTP标头(header)让协议变得非常容易。只要服务端客户端之间对新标头的语义经过简单协商,新功能就可以被加进来。
-
HTTP无状态,但是有会话HTTP是无状态的:在同一个连接中,两个执行成功的请求之间是没有关系的。这样用户就没有办法在同一个网站中进行连贯的交互。尽管HTTP根本上来说是无状态的,但是可以借助HTTP cookie就可以有状态的会话。利用标头的扩展性,HTTP cookie被加入了协议工作流程,每个请求就能够创建会话,让每个请求都能够创建会话,让每个请求都能够共享相同的上下文信息或相同的状态。
-
HTTP和网络连接一个网络连接是由传输层来控制的,因此根本上不属于HTTP的范畴。HTTP依靠于TCP的标准,即面向链接的状态。在客户端与服务端能够传递请求、响应之前,这两者间必须建立一个 TCP 链接,这个过程需要多次往返交互。当需要接连发起多个请求时,工作效率相比于它们之间共享同一个 TCP 连接要低。可以通过
Connection标头来部分控制底层的 TCP 连接,让这个连接始终平缓并更加高效。
HTTP能控制什么
-
缓存:文档如何被缓存可以通过 HTTP 来控制。服务端能指示代理和客户端缓存哪些内容以及缓存多长时间,客户端能够指示中间的缓存代理来忽略已存储的文档。
-
缓存:文档如何被缓存可以通过 HTTP 来控制。服务端能指示代理和客户端缓存哪些内容以及缓存多长时间,客户端能够指示中间的缓存代理来忽略已存储的文档。服务器的 HTTP 标头可以减弱此类严格分离,使得一个网页可以是由源自不同地址的信息拼接而成。某些情况下,放开这些限制还有安全相关的考虑。
-
认证_:一些页面可能会被保护起来,仅让特定的用户进行访问。基本的认证功能可以直接由 HTTP 提供,既可以使用
WWW-Authenticate或其他类似的标头,也可以用 HTTP cookie 来设置一个特定的会话。 -
代理服务器和隧道:服务器或客户端常常是处于内网的,对其他计算机隐藏真实 IP 地址。因此 HTTP 请求就要通过代理服务器越过这个网络屏障。
-
会话:使用 HTTP Cookie 可以利用服务端的状态将不同请求联系在一起。这就创建了会话。
HTTP报文
HTTP/1.1以及之前更早的HTTP协议都是有语义可读性。在HTTP/2中,这些报文被嵌入了一个新的二进制结构--帧,帧允许使用很多优化,比如报文标头的压缩可以多路复用。
请求
HTTP请求的一个例子:
请求由以下元素组成:
-
一个HTTP的方法。
-
要获取的那个资源的路径。
-
HTTP协议版本号。
-
为服务端表达其他信息可选标题。
-
请求体(body),类似于响应中的请求体。
响应
HTTP一个响应的例子:
响应报文包含了下面的元素:
-
HTTP协议版本号。
-
一个状态码(status code),来指明对应请求已经执行或是没有,以及响应的原因。
-
一个状态信息。
-
HTTP标头,与请求标头类似。
-
可选项,一个包含被获取资源的主体。