什么是HTTP协议?

此文章简单叙述了HTTP协议,还有更多底层的东西没有涉及,有什么问题想法也欢迎共同探讨。

诞生

都说 HTTP 是基于应用层的协议,而且是基于 TCP / IP 协议的。
如果你接触过socket网络编程,就应该明白TCPUDP这两种使用广泛的通信协议如图:
在这里插入图片描述

既然TCP/UDP是广泛使用的网络通信协议,那为啥有多出个http协议来呢?
  • UDP协议具有不可靠性和不安全性,显然这很难满足web应用的需要。

  • TCP协议是基于连接和三次握手的,虽然具有可靠性,但仍具有一定的弊端。
    就是因为它基于连接,若是有上万用户同时在线呢,那么数万的客户端和服务器一直保持连接状态,那么服务器将无法承载

这就衍生出了HTTP协议。
通俗点说,就是在请求之后,服务器端立即关闭连接、释放资源。这样既保证了资源可用,也吸取了TCP的可靠性的优点。
正是因为这一点,所以才说HTTP是无状态的。简单来说就是“服务端不知道你客户端干了什么”,这一点很大情况也是为了性能考虑的(请求后释放资源)

1.概述

HTTP (HyperText Transfer Protocol)协议是因特网上应用最为广泛的一种网络传输协议,所有WWW文件都必须遵循这个标准。
它是为了Web服务器Web浏览器之间的通信而设计的
HTTP 是一个基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等)。

简单来说,HTTP 就是一种协议,是用于万维网服务器传输超文本到本地浏览器的传送协议。而它是基于TCP/IP通信协议来传递数据的。

注: HTTP协议虽然基于TCP/IP层来使用,但是它也可以在其他任何可靠地传输层上使用

2.基本工作原理

HTTP既然是一种传输协议,那么肯定在传输的过程中存在信息的交互。
交互原理有这四个步骤:连接、请求、应答、关闭连接

  1. 连接:服务端 与 客户端(一般为Web服务器)建立连接,打开名为socket的虚拟文件,此文件建立成功代表连接也建立成功

连接不是必须的,是因为 HTTP 使用了 面相连接的 TCP(传输控制协议)

  1. 请求:客户端 通过建立的socket文件向 服务端 提交请求。HTTP的请求一般是GET / POST命令(POST一般由于FORM参数的传递)。GET命令的格式为: GET路径 / 文件名HTTP/1.0,其中HTTP/1.0指出Web浏览器使用的HTTP版本。
  2. 应答:客户端 提出请求后,通过HTTP协议传送给服务端。等待服务端处理请求,然后将处理结果返回给客户端 (通过HTTP),最后在 客户端 上显示出所请求的页面。
  3. 关闭连接:应答结束后,客户端 与 服务端 必须断开,以保证其他浏览器和服务器建立连接。
    在这里插入图片描述

3.HTTP的组件系统

3.1.客户端

客户端就是任何能够为用户发起行为的工具。这个角色通常由浏览器来扮演。
浏览器总是作为一个发起请求的实体。

浏览器获取和渲染网页也都是通过 HTTP 请求来实现

  • 首先发送请求获取HTML文档(请求由服务端接收处理),再解析其中的资源和信息。
  • 再发送其它请求,获取可执行脚本或CSS样式文件进行页面的渲染,以及其他的一些页面资源(图片视频)。
  • 最后浏览器将整合资源,展现出完整的网页
  • 浏览器执行的脚本(JavaScript)可以在之后的阶段获取更多资源,并相应地更新网页。

一个网页就是超文本文档。当用户操作客户端时,浏览器负责发送 HTTP 请求,并进一步解析HTTP返回的消息,以向用户提供明确的响应。

3.2.Web服务端

通俗的说服务端就是为客户端而服务的(通信的一端)
Web服务器可以解析(handles)HTTP协议。处理客户端发送的请求

服务端虚拟意义上代表了一个机器:它可以是一种复杂的软件,它可也以是共享负载(负载均衡)的一组服务器组成的计算机集群,通过向其他计算机(如缓存,数据库服务器,电子商务服务器 …)发起请求来获取部分或全部资源。

3.3.代理(proxy)

他是网络信息的中转站,介于浏览器和Web服务器之间。

代理服务器是介于客户端和服务端之间的一台服务器。有了代理服务器之后,浏览器提出的请求不会直接由服务端来操作,请求信号会先发送至代理服务器,由代理服务器来判断是否需要向服务器端发送请求,如果代理服务器中有请求中所需的信息,那么会由代理服务器处理请求并向传递信息。

而且,大部分的代理服务器都具有缓冲的功能,它有很大的储存空间,它不断地将新取得的数据储存到它的本机储存器上,如果浏览器所请求的数据在它本机上存在并且是最新的情况下,那么他就可以直接将本机储存器中的数据传送给用户的浏览器,这样就可以显著的提高交互的效率

它还有很多的功能:

  • 突破 IP 访问的限制(访问国外的网站等)
  • 访问单位以及团体的内部资源
  • 提高访问的速度:通常代理服务器设置一个较大的硬盘缓冲区,当外界有信息通过时,同时也会将其保存至缓冲区中,当其他用户再次访问相同的信息时,则直接从缓冲区中取出信息,传给用户,可以提高效率
  • 隐藏真实IP:上网者也可以通过这种方法隐藏自己的IP,免受攻击。

看到这里就可以很好的理解下面这张图了
在这里插入图片描述实际上,在一个浏览器和处理请求的服务器之间,还有路由器、调制解调器等许多计算机。由于Web的层次设计,那些在网络层和传输层的细节都被隐藏起来了。HTTP位于最上层的应用层。虽然底层对于分析网络问题非常重要,但是大多都跟对HTTP的描述不相干。

4.基本性质

HTTP 是简单的

  • HTTP大体上还是被设计得简单易读。

HTTP 是可扩展的

  • HTTP/1.0 中出现的 HTTP headers 让协议扩展变得非常容易。只要服务端和客户端就新 headers 达成语义一致,新功能就可以被轻松加入进来。

HTTP 是无状态,有会话的

  • HTTP是无状态的,这句话有点抽象,就是说在同一个连接中,两个执行成功的请求之间是没有关系的用户没有办法在同一个网站中进行连续的交互

比如在一个电商网站里,用户把某个商品加入到购物车,切换一个页面后再次添加了商品,这两次添加商品的请求之间没有关联,浏览器无法知道用户最终选择了哪些商品。

而使用HTTP的头部扩展,HTTP Cookies可以解决此问题。把Cookies添加到头部中,创建一个会话让每次请求都能共享相同的上下文信息,达成相同的状态。

HTTP 和连接

  • 一个连接是由传输层来控制的,这从根本上不属于HTTP的范围。
  • HTTP并不需要其底层的传输层协议是面向连接的,只需要它是可靠的,或不丢失消息的(至少返回错误)。
  • 互联网中最常用且最可靠的是 TCP(传输控制协议),因此,HTTP依赖于面向连接的TCP进行消息传递,但连接并不是必须的。

5.cookies

注意:h5 不再支持 cookies,可以使用 webStorage 代替,点击了解:https://blog.csdn.net/pspxuan/article/details/105296043

Cookie 就是保存在本地的一小块数据:
HTTP Cookie(也被称为Web Cookie或浏览器Cookie),是指服务器发送到客户端并被客户端保存到本地的一小块数据。

Cookie 会在浏览器下次向同一服务器再发起请求时,被携带并发送到服务器。
通常,它用于告知服务端两个请求是否来自同一浏览器,比如保持用户的登录状态。
所以说,Cookie 可以帮助 HTTP 记录稳定的状态信息。

主要作用

  • 会话状态的管理(登录状态、购物车、游戏分数等)
  • 个性化设置(如自定义设置、主题等’
  • 浏览器行为跟踪(如跟踪分析用户行为等)

现在随着现代浏览器开始支持各种各样的存储方式,Cookie渐渐被淘汰。
由于服务器指定Cookie后,浏览器的每次请求都会携带Cookie数据,会带来额外的性能开销(尤其是在移动环境下)。
新的浏览器API已经允许开发者直接将数据存储到本地( Web storage API (本地存储和会话存储)或 IndexedDB等)

6.HTTP的历史(点击查看)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值