佳木斯建设工程交易中心网站,网上房地产备案查询,免费做手机网站,芜湖互联网公司HTTP 协议
什么是 HTTP 协议
HTTP#xff08;超文本传输协议#xff0c;HyperText Transfer Protocol#xff09;是用于在客户端#xff08;如浏览器#xff09;和服务器之间传输超文本#xff08;如网页、图片、视频等#xff09;的应用层协议。它是现代互联网数据通…HTTP 协议
什么是 HTTP 协议
HTTP超文本传输协议HyperText Transfer Protocol是用于在客户端如浏览器和服务器之间传输超文本如网页、图片、视频等的应用层协议。它是现代互联网数据通信的基础支持从 Web 服务器传输超文本到本地浏览器的传送协议几乎所有网页和应用都依赖 HTTP 进行交互。
HTTP 工作原理
HTTP 遵循请求-响应模型客户端通常是 Web 浏览器发送一个 HTTP 请求到服务器服务器处理该请求后返回一个 HTTP 响应给客户端。这个过程可以概括为以下几个步骤
建立连接客户端与服务器之间通过 TCP/IP 建立连接。在 HTTP/1.1之前每个请求都需要重新建立连接而 HTTP/1.1引入了持久连接允许在一个 TCP 连接上传输多个请求和响应。发送请求消息客户端向服务器发送请求消息这通常包括请求行指定请求方法如 GET、POST 等请求的 URL 以及 HTTP 版本、请求头部提供关于请求的元数据例如浏览器类型、接受的内容类型等以及可选的请求体对于 POST 请求它包含要发送的数据。处理请求并发送响应消息服务器接收到请求后进行处理并返回一个 HTTP 响应消息给客户端。响应消息包含状态行显示 HTTP 版本、状态码及描述短语、响应头部提供关于响应的元数据如内容类型、长度等和响应体所请求的内容如HTML文档、图片等。关闭或保持连接根据使用的 HTTP 版本和配置连接可能会被立即关闭或保持打开以供后续请求使用。
HTTP 特点
无状态性HTTP 本身是无状态协议即每个请求都是独立的服务器不会保存客户端的状态信息。然而通过使用 Cookies、Session 等技术可以在一定程度上实现有状态的交互。简单快速客户端向服务器请求服务时只需提供请求方法和路径即可因此 HTTP 协议简单且高效。灵活HTTP 允许传输任意类型的数据对象通过 Content-Type 标记来指示数据的类型。安全性尽管 HTTP 本身并不安全但可以通过 SSL/TLS 加密升级为 HTTPS从而确保数据的安全传输。
HTTP 的发展历程
HTTP/0.9
蒂姆伯纳斯李是一位英国计算机科学家也是万维网的发明者。他在1989年创建了单行 HTTP 协议它只是返回一个网页这个协议在1991年被命名为 HTTP/0.9。
HTTP/1.0
1996年HTTP/1.0 发布。该规范是显著扩大并且支持三种请求方法gethead 和 post。
HTTP/1.0 相对于 HTTP/0.9 的改进如下
每个请求都附加了 HTTP 版本。在响应开始时发送状态代码。请求和响应都包含 HTTP 报文头。内容类型能够传输 HTTP 文件以外的文档。
但是HTTP/1.0 不是官方标准。
HTTP/1.1
HTTP 的第一个标准化版本 HTTP/1.1 RFC 2068于1997年初发布支持七种请求方法optionsgetheadpostputdelete 和 trace。
HTTP/1.1 是 HTTP/1.0 的增强
虚拟主机允许从单个 IP 地址提供多个域。持久连接和流水线连接允许 Web 浏览器通过单个持久连接发送多个请求。缓存支持节省了宽带并使响应速度更快。
HTTP/1.1 在接下来的15年左右非常稳定。
在此期间出现了 HTTPS安全超文本传输协议。它是使用 SSL/TLS 进行安全加密通信的 HTTP 的安全版本。
HTTP/2
由 IETF 在2015年发布HTTP/2 旨在提高 web 性能减少延迟增加安全性使 web 应用更加快速、高效和可靠。
多路复用HTTP/2 允许同时发送多个请求和响应而不是像 HTTP/1.1 一样只能一个一个地处理这样可以减少延迟提高效率提高网络吞吐量。二进制传输HTTP/2 使用二进制协议与 HTTP/1.1 使用的文本协议不同二进制协议可以更快地解析更有效地传输数据减少了传输过程中的开销和延迟。头部压缩HTTP/2 使用 HPACK 算法对 HTTP 头部进行压缩减少了头部传输的数据量从而减少了网络延迟。服务器推送HTTP/2 支持服务器推送允许服务器在客户端请求之前推送资源以提高性能。改进的安全性HTTP/2 默认使用 TLSTransport Layer Security加密传输数据提高了安全性。兼容 HTTP/1.1HTTP/2 可以与 HTTP/1.1 共存服务器可以同时支持 HTTP/1.1 和 HTTP/2如果客户端不支持 HTTP/2服务器可以回退到 HTTP/1.1。
HTTP/3
于2021年5月27日发布HTTP/3 是一种新的、快速、可靠以及安全的协议适用于所有形式的设备。HTTP/3 没有使用 TCP而是使用谷歌在2012年开发的新协议 QUIC。
HTTP/3 是继 HTTP/1.1 和 HTTP/2 之后的第三次重大修订。
HTTP/3 带来了革命性的变化以提高 web 性能和安全性设置 HTTP/3 网站需要服务器和浏览器支持。
目前谷歌云、Cloudflare 和 Fastly 支持 HTTP/3。Chrome、Firefox、Edge、Opera 和一些移动浏览器支持 HTTP/3。
请求和响应报文
报文的格式
主体上分为报文首部和报文主体中间空行隔开。 报文首部可以继续细分为“行”和“头”。 请求报文
客户端发送给服务端的报文。
请求报文格式
请求首行请求行GET/POST 资源路径?参数 HTTP/1.1请求头信息请求头。空行。请求体POST请求才有请求体。 浏览器按住F12可以打开浏览器的开发者工具点击网络就可以查看请求数据包 form 表单发送 get 请求特点
由于请求参数在请求首行中已经携带了所以没有请求体也没有请求空行。请求参数拼接在 url 地址中地址栏可见 url?key1value1key2value2不安全。参数在地址栏中携带有大小限制一般限制为4k只能携带纯文本。get 请求参数只能上传文本数据。没有请求体所以封装和解析快效率高浏览器默认提交的请求都是 get 请求例如地址栏输入回车超链接表单默认的提交方式等。
查看 get 请求行、请求头、请求体
请求行组成部分 请求方式 get访问服务器的资源路径?参数1值1参数2值2……协议/版本例如HTTP/1.1
GET /05_web_tomcat/login_success.html?usernameadminpassword123456 HTTP/1.1请求头 Host主机虚拟地址。Connection控制网络连接值为 keep-alive 时为长连接。Upgrade-Insecure-Requests请求协议的自动升级HTTP 的请求如果服务器是 HTTPS 的浏览器会自动将请求协议升级为 HTTPS。User-Agent用户系统信息。Accept浏览器支持的文件类型。Referer当前页面的上一个页面的路径。Accept-Encoding浏览器支持的压缩格式。Accept-Language浏览器支持的语言。 请求空行 请求体 get 请求数据不放在请求体里。
form 表单发送 post 请求特点
post 请求有请求体而 get 请求没有请求体。post 请求数据在请求体中携带请求体数据大小没有限制可以用来上传所有内容文件、文本等。只能使用 post 请求上传文件。post 请求报文多路和请求体相关的配置请求头。地址栏参数不可见相对安全。post 效率比 get 低。post 请求要求将 form 标签的 method 属性设置为 post。 查看 post 请求行、请求头、请求体 请求行组成部分 请求方式 post 访问服务器的资源路径 协议/版本例如HTTP/1.1
POST /05_web_tomcat/login_success.html HTTP/1.1请求头请求空行请求体
usernameadminpassword123456响应报文
服务端返回给客户端的报文。
响应报文格式
响应首行响应行协议/版本 状态码 状态码描述。响应头信息响应头。空行。响应体。 响应行组成部分 协议/版本 HTTP/1.1响应状态码状态描述 OK 缺省
HTTP/1.1 200 OK响应头 Server服务器的版本信息。Accept-Ranges客户端服务器是否允许范围请求即客户端可以请求资源的某个部分而不是整个资源值为 bytes 时表示服务器支持按字节范围请求资源。Content-Type响应体数据的类型。Content-Length响应体内容的字节数。Date响应的时间。Last-Mondified提供文档最后修改的时间可用于验证缓存的有效性。 响应体 常见的响应状态码 200请求成功浏览器会把响应体内容通常为 html显示在浏览器中。302重定向表示服务器要求浏览器重新再发一个请求服务器会发送一个响应头 Location 指定新请求的 url 地址。304使用了本地缓存。404请求的资源没有找到说明客户端错误的请求了不存在的资源。405请求的方法不允许。500请求资源找到了但服务器内部出现了错误。
响应的状态码
HTTP 响应状态码是服务器对客户端请求的响应结果的一种标准化表示它由三位数字组成分为五类每类都有一个共同的起始数字具体如下
1xx信息性状态码指示请求已接收继续处理。 100 Continue表明请求的初始部分已经被接收客户端应继续发送剩余部分。101 Switching Protocols服务器根据客户端的请求切换协议。 2xx成功状态码表示请求已被成功接收、理解和接受。 200 OK标准的成功响应表明请求成功并且信息包含在响应中。201 Created请求成功且服务器创建了新的资源。204 No Content请求成功但响应报文中不包含实体的主体部分。 3xx重定向状态码需要采取进一步操作以完成请求。 301 Moved Permanently请求的资源已被永久移动到新位置并且未来对该资源的任何引用都应该使用本响应返回的URI。302 Found与301类似但是它是临时性的重定向。304 Not Modified如果客户端执行了条件 GET 请求且该页面自上次访问以来未被修改则服务器会返回此状态码。 4xx客户端错误状态码请求包含语法错误或无法完成请求。 400 Bad Request服务器无法理解请求的格式客户端应当修改请求后再试。401 Unauthorized当前请求需要用户验证。403 Forbidden服务器理解请求但拒绝执行。404 Not Found请求的资源在服务器上不存在。405 Method Not Allowed请求方法对指定资源不适用。 5xx服务器错误状态码服务器遇到错误无法完成有效请求。 500 Internal Server Error服务器遇到了未知情况阻止了它完成请求。501 Not Implemented服务器不具备完成请求的功能。例如服务器既不识别请求方法也不支持其对应的资源类型。502 Bad Gateway作为网关或代理工作的服务器尝试执行请求时从上游服务器接收到无效响应。503 Service Unavailable由于临时维护或者过载服务器当前无法处理请求。504 Gateway Timeout作为网关或代理工作的服务器未能及时从上游服务器获得响应。
每个状态码都提供了关于请求过程中的特定信息帮助开发人员和系统管理员诊断问题并优化应用性能。理解这些状态码对于有效的 Web 开发至关重要。