HTTP是什么
HTTP是什么
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP协议是在Web上进行数据交换的基础,是一种“客户端-服务器端”协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
HTTP请求与响应消息
客户端和服务端通过交换各自的消息(与数据流正好相反)进行交互。
- 由像浏览器这样的客户端发出的消息叫做请求( requests )
- 被服务端回应的消息叫做响应( responses)
HTTP的基本原理
HTTP被设计于上20世纪90年代初期,是一种可扩展的协议。它是应用层的协议,通过TCP,或者是TLS-加密的TCP连接来发送,理论上任何可靠的传输协议都可以使用。因为其良好的扩展性,时至今日,它不仅被用来传输超文本文档,还用来传输图片、视频或者向服务器发送如HTML表单这样的信息。HTTP还可以根据网页需求,仅获取部分Web文档内容更新网页。
HTTP 工作原理
HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。
Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP默认端口号为80,但是你也可以改为8080或者其他端口。
HTTP三点注意事项:
- HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
- HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
基于HTTP的组件系统
概述
HTTP是一个client-server协议:请求通过一个实体被发出,实体也就是用户代理。每一个发送到服务器的请求,都会被服务器处理并返回一个消息,也就是*response。*在这个请求与响应之间,还有许许多多的被称为proxies的实体,他们的作用与表现各不相同,比如有些是网关,还有些是caches等。
实际上,在一个浏览器和处理请求的服务器之间,还有路由器、调制解调器等许多计算机。由于Web的层次设计,那些在网络层和传输层的细节都被隐藏起来了。HTTP位于最上层的应用层。虽然底层对于分析网络问题非常重要,但是大多都跟对HTTP的描述不相干。
客户端:user-agent
user-agent就是任何能够为用户发起行为的工具。这个角色通常都是由浏览器来扮演。一些例外情况,比如是工程师使用的程序,以及Web开发人员调试应用程序。
浏览器总是作为发起一个请求的实体,他永远不是服务器(虽然近几年已经出现一些机制能够模拟由服务器发起的请求消息了)。
浏览器首先发送一个请求来获取页面的HTML文档,再解析文档中的资源信息发送其他请求,获取可执行脚本或CSS样式来进行页面布局渲染,以及一些其它页面资源(如图片和视频等)。然后,浏览器将这些资源整合到一起,展现出一个完整的文档,也就是网页。浏览器执行的脚本可以在之后的阶段获取更多资源,并相应地更新网页。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vK87i5ZY-1636689562248)(C:\Users\86175\Desktop\启嘉\Git\jody\HTTP\1.png)]
Web服务端
Web Server来服务并提供客户端所请求的文档。Server只是虚拟意义上代表一个机器:它可以是共享负载(负载均衡)的一组服务器组成的计算机集群,也可以是一种复杂的软件,通过向其他计算机(如缓存,数据库服务器,电子商务服务器…)发起请求来获取部分或全部资源。
Web服务不一定是一台机器,但一个机器上可以装载的众多Servers。在HTTP/1.1和Host头部中,它们甚至可以共享同一个IP地址。
代理(Proxies)
在浏览器和服务器之间,有许多计算机和其他设备转发了HTTP消息。由于Web栈层次结构的原因,它们大多都出现在传输层、网络层和物理层上,对于HTTP应用层而言就是透明的,虽然它们可能会对应用层性能有重要影响。还有一部分是表现在应用层上的,被称为代理
(Proxies)。代理(Proxies)既可以表现得透明,又可以不透明(“改变请求"会通过它们)。代理主要有如下几种作用:
- 缓存(可以是公开的也可以是私有的,像浏览器的缓存)·过滤(像反病毒扫描,家长控制…)
- 负载均衡(让多个服务器服务不同的请求)。认证(对不同资源进行权限管理)
- 日志记录(允许存储历史信息)
HTTP的基本性质
-
HTTP是简单的
虽然下一代HTTP/2协议将HTTP消息封装到了帧(frames)中,HTTP大体上还是被设计得简单易读。HTTP报文能够被人读懂,还允许简单测试,降低了门槛,对新人很友好。
-
HTTP是可扩展的
在HTTP/1.0中出现的HTTP headers让协议扩展变得非常容易。
-
HTTP是无状态,有会话的
在同一个连接中,两个执行成功的请求之间是没有关系的。这就带来了一个问题,用户没有办法在同一个网站中进行连续的交互。
-
HTTP和连接
一个连接是由传输层来控制的,这从根本上不属于HTTP的范围。
HTTP能控制什么
以下是可以被HTTP控制的常见特性:
-
缓存
开放同源限制认证
-
基本的认证功能可以直接通过HTTP提供,或用HTTP Cookies来设置指定的会话
代理和隧道
-
通常情况下,服务器和/或客户端是处于内网的,对外网隐藏真实IP地址。因此HTTP请求就要通过代理越过这个网络屏障。
会话
HTTP流
-
打开一个TCP连接:TCP连接被用来发送一条或多条请求,以及接受回应消息。
-
发送一个HTTP报文:HTTP报文(在HTTP/2之前)是语义可读的。
GET /HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr
- 读取服务端返回的报文信息:
HTTP/1.1 200 OK
Last-Modified: Tue,01 Dec 2009 20:18:22 GMTContent-Length: 29769
Content-Type: text/html
- 关闭连接或者为后续请求重用连接。
HTTP报文
HTTP报文,又称为HTTP消息,是服务器和客户端之间交换数据的方式。有两种类型的消息︰请求,由客户端发送用来触发一个服务器上的动作;响应,来自服务器的应答。
HTTP消息由采用ASCI编码的多行文本构成。在HTTP/1.1及早期版本中,这些消息通过连接公开地发送。在HTTP/2中,为了优化和性能方面的改进,曾经可人工阅读的消息被分到多个HTTP帧中。
请求
请求报文由以下元素组成:一个HTTP的nethod、要获取的资源的路径、HTTP协议版本号、为服务端表达其他信息的可选头部headers以及对于一些像POST这样的方法。
响应
响应报文由以下元素组成:HTTP协议版本号、一个状态码、一个状态信息、HTTPheaders以及包含获取的资原body。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZbBWhqIk-1636689562251)(https://media.prod.mdn.mozit.cloud/attachments/2016/08/09/13691/58390536967466a1a59ba98d06f43433/HTTP_Response.png)]