[HTTP][概述][一][学习笔记]

举报
John2021 发表于 2022/05/20 07:44:39 2022/05/20
【摘要】 1.HTTP概述超文本传输协议(HTTP)是一个用于传输超媒体文档(例如HTML)的应用层协议。它是为Web浏览器与Web服务器之间的通信而设计的。HTTP遵循CS模型,客户端打开一个连接以发出请求,然后等待直到收到服务器端响应。HTTP是无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)。尽管通常基于TCP/IP层,但它可以在任何可靠的传输层上使用,也就是说,该协议不像UD...

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)。代理可以为透明,也可以不透明("改变请求"会通过他们)。代理主要作用由:

  1. 缓存(可以是公开的也可以是私有的,像浏览器的缓存)
  2. 过滤(像反病毒扫描,家长控制等)
  3. 负载均衡(让多个服务器服务不同的请求)
  4. 认证(对不同资源进行权限管理)
  5. 日志记录(允许存储历史信息)

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流

当客户端和服务端进行交互时要经过以下几步:

  1. 打开TCP连接:TCP连接用来发送一条或多条请求,以及接受响应消息。客户端可能打开一条新的连接或重用已经存在的连接,也可能开几个连接。

  2. 发送一个HTTP报文:报文被封装在帧中。

  3. 读取服务端返回的报文信息

  4. 关闭连接或为后续请求重用连接。

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)事件处理程序处理。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。