Hypertext Transfer Protocol -- HTTP/1.0

Hypertext Transfer Protocol – HTTP/1.0

1. Introduce

1.1 Purpose

Hypertext Transfer Protocol (HTTP) 是一个无状态的应用层协议,用于分布式的,相互协作的超媒体系统。本文档定义了 HTTP/1.0 的消息语义,分为 request method,request header fields,response status codes,和 response header field是,和 payload of messages(metadata 和 body content)。

HTTP 是 stateless protocol。一个 stateless protocol 不需要 web server 在多个请求期间保留用户的信息和状态。
stateless protocol 是一种通讯协议,接收方不能保留先前请求的 session state。发送方向接收方传输相关的 session state,每个请求都能被单独理解,不需要引用接收方保留的先前请求中的 session state。
相反,stateful protocol 是一种通讯协议,接收方可能保留了先前请求的 session state。
在计算机网络中,stateless protocol 的例子有 Internet Protocol(IP) 和 Hypertext Transfer Protocol(HTTP)。stateful protocol 的例子有 Transmission Control Protocol(TCP)和 File Transfer Protocol(FTP)。
Stateless protocols 提高了可见性,可靠性和可拓展性。可见性被提升,因为监视系统不必查看单个请求之外的信息就可以确定请求的全部性质。可靠性被提升,因为它简化了从部分失败中恢复的任务。拓展性被提升,因为不必存储请求间的 session state,允许 server 快速释放资源,进一步简化了实现。
stateless protocol 的缺点是,它们可能会降低网络性能,因为可能会在一系列请求中发送重复的数据,这是因为数据不能被 server 保留重用。

Examples:
HTTP server 能够理解每个单独的请求。
相反,传统的 FTP server 进行与用户的交互 session。在会话期间,为用户提供一种方式来进行权限验证并设置多个变量(工作目录,传输模式),都作为 session state 的一部分存储于 server 上。

Stacking of stateless and stateful protocol layers:
在不同协议层的 stateful protocols 和 stateless protocols 间可能有复杂的交互。例如,HTTP,一个 stateless protocol,在 stateful protocol TCP 之上的层级,TCP 又在 stateless protocol IP 之上的层级。
层级的重叠甚至在 HTTP 之上继续出现。作为缺少保留的 session state 的近似解决方法,HTTP servers 实现多种 session management 方法,典型地在 HTTP cookie 中使用 session 标识符引用存储在 server 上的 session state,有效地在 HTTP 协议之上创建一个 stateful protocol。HTTP cookies 违反了 REST 架构风格,因为即使没有引用存储于 server 上的 session state,它们也独立于 session state(它们会影响浏览器历史中相同网页的前几页),且他们没有定义的语义。

Hytertext 是展现在计算机屏幕或着其他电子设备上的文本,它有指向其他文本的引用(hyperlinks),读者可以立即访问。Hypertext 文档通过 hyperlinks 互联。从文件中分离出来,术语 “hypertext” 有时用于描述具有集成的 hyperlinks 的 tables,images,和其他表达的内容格式

实际的信息系统需要更多的功能,不单单是简单的检索功能,包括搜索,前后端更新,和 annotation。HTTP 使用 method 表明 request 的目的,使用 URI,作为定位(URL)或名字(URN),来表明方法所要应用的资源。

HTTP 同样被用作通用协议,用于 user agent 和使用其他 Internet 协议的 proxy/gateways 间的通讯,例如 SMTP,NNTP,FTP,Gopher 和 WAIS,允许基本的超媒体访问来自不同应用的资源,简化 user agents 的实现。

在计算机领域,user agent 是任何软件,代表用户行为,它“检索,渲染,促进终端用户与 Web 内容间的交互”。通常,在 client-server 系统中,user agent 表现为 client。比如,Web 浏览器。

在计算机网络中,proxy server 是一个 server 应用,作为在 client 请求一个资源,server 提供资源的中介。
client 直接请求 proxy server,而不是直接连接满足对资源,例如,文件或 web page,的请求的服务器,proxy server 评估请求并执行需要的网络事务。这作为一种简化和控制请求的复杂度的方法,或者提供额外的好处,比如 load balancing,privacy 或者 security。Proxies 被设计出来用于对分布式系统添加结构或封装。因此,当请求服务时,proxy server 代表 client 工作,潜在的掩盖了指向资源服务器的真实来源。

Gateway 是一块网络硬件或软件,用在电信网络中,允许数据从一个分离的网络中流向另一个网络。gateways 与 routers 或 switches 的不同之处在于它们使用超过一个协议来连接多个网络进行通讯,且可以运行于 open systems interconnection(OSI)模型的 7 层中的任意一层。
术语 gateway 可以指代配置用于执行网关任务的计算机或计算机程序,例如 default gateway 或者 router,在 HTTP 的情况下,gateway 也经常用作 reverse proxy 的同义词。
Network gateway:
Network gateway 提供 network 和包含 devices,例如 protocol translators,impedance matchers,rate converters,fault isolators,或者 signal translators。network gateway 需求在使用 gateway 的网络间建立相互接受的管理过程。Network gateways,也被称为 protocol translation gateways 或者 mapping gateways,可以对连接的使用不同网络协议技术的网络执行协议转换。例如,network gateway 连接办公室或家庭内部网到 Internet。如果办公室或家庭计算机用户想要加载一个 web page,至少两个 network gateways 是可访问的 – 一个是从办公室或家庭网络到 Internet 的网关,另一个是从 internet 到服务于 web page 的计算机的 network gateways。
在 Internet Protocol network 中,目的在所给子网掩码之外的 IP packets 被发送到 network gateway。例如,如果私有网络有一个基本的 IPv4 地址 192.168.1.1 且有一个子网掩码 255.255.255.0,然后任何发往 192.168.1.0 之外地址的数据都会被发往 network gateway。IPv6 网络以类似的方式工作。当将 IP packet 转发到另一个网络时,gateway 可能执行 network address translation。
在企业网络中,network gateway 通常也作为 proxy server 和 firewall。
在 Microsoft Windows 上,Internet Connection Sharing 特性允许计算机作为 gateway,通过提供在 internet 和 内部网之间的连接。

在计算机网络中,reverse proxy 是在后端应用之前的一个应用,它转发 client 请求到后端应用上。Reserve proxy 帮助增加拓展性,性能,恢复性和安全性。这些返回到 client 的资源就好像直接来自原始的 server 本身一样。
大型网站和 content delivery networks 搭配其他技术使用 reverse proxies,进行 internal servers 间的 load balance。Reverse proxies 能够保存静态内容的缓存,这更进一步的减少了这些 internal servers 和 internal network 上的负载。在 reverse proxy 在 client 和 reverse proxy 的通讯通道上添加特性也是十分常见的,比如 compression 或 TLS encryption。
Reverse proxies 通常由 web service 拥有或管理,它们被来自公网的 client 访问。相反,forward proxy 通常由 client 管理,它被限制在私有,内部的网络中,除了 client 能请求 forward proxy 作为 client 的代表检索来自公有 Internet 的资源。
Reverse proxy servers 在例如,Apache,Nginx,和 Caddy 等流行的开源 web servers 中被实现。这个软件能检查 HTTP 部首,允许它向 Internet 呈现单一的 IP 地址,基于 HTTP 请求的域名向不同的内部 servers 传递请求。专用的 reverse proxy server 例如开源软件 HAProxy 和 Squid 被用于 Internet 中更大的网站。

1.2 Terminology

connection:两个应用程序间为了通讯的目的建立的传输层虚拟回路。

message:HTTP 通讯的基本单元,由 octets 的结构化序列组成,匹配定义在 Section 4 的语法,通过连接传输。

request:HTTP 请求消息。

response:HTTP 响应消息。

resource:网络数据对象或服务,能使用 URI 标识。

entity:数据资源的特定表示或演示,或者来自服务资源的回复,可能包含在请求或响应消息之中。entity 由 metainformation 和 content 组成,metainformation 的形式为 entity header,content 的形式为 entity body。

client:以发送请求为目的建立连接的应用程序。

user agent:初始化请求的 client。通常是 browsers,editors,spiders(web-traversing robots),或其他终端用户工具。

server:接受连接的应用程序,通过发送响应来服务请求。

origin server:给定资源所在或被创建的 server。

proxy:同时作为 server 和 client 的中间程序,代表 clients 生成请求。请求被内部处理或者 (在翻译后) 将它们传递到其他服务器。一个 proxy 在转发请求消息前必须解释请求消息,必要的话,重写它们。Proxies 通常用作 client-side 的入口来通过网络防火墙,或作为帮助应用来处理请求,使用 user agent 没有实现的协议。

gateway:作为其他服务其中介的服务器。不像 proxy,gateway 在接收请求时表现得如同它就是请求资源得原始服务器一般;请求的 client 可能意识不到它在与 gateway 通讯。Gateway 通常作为 server-side 入口来通过网络防火墙,或者作为 protocol translator 来访问存储于 non-HTTP 系统的资源。

tunnel:tunnel 是中间程序,作为两个连接间的 blind relay。一旦激活,tunnel 不被认为是 HTTP 通讯的一方,虽然 tunnel 可能通过一个 HTTP 请求初始化。当 relayed 连接的两端都关闭时,tunnel 不复存在。Tunnel 在当入口是必要的的时候被使用,且中间程序不能或不应该解释 relayed(转发的)通讯。

cache:响应信息的本地存储,是控制消息的存储,检索,和删除的子系统。缓存存储可缓存的消息,以减少对将来等效的请求的响应时间和网络带宽的消耗。任何 client 或 server 都可能包含缓存,但当 server 作为 tunnel 是不能包含缓存。

任何给定的程序都能既是 client 又是 server;我们使用这些术语仅仅是指代在特定连接中程序所担任的角色,而不是程序通常意义上的能力。同样,任何 server 都可能作为 origin server,proxy,gateway,或 tunnel,基于请求的性质转换其行为。

1.3 Overall Operation

HTTP 协议基于请求/响应范式。client 与 server 建立连接,并向 server 发送请求,请求格式为 request method,URI,和协议版本,紧跟着的是 MINE-like 的消息,包含请求修饰符,client 信息,和可能的 body content。server 的响应如下,状态行,包含消息的协议版本,和成功或失败码,entity 元消息,和可能的 body content。

大部分的 HTTP 通讯由 user agent 初始化,且由被应用于某些 origin server 上的资源的请求组成。在最简单的场景中,这可能通过 user agent (UA) 和 origin server (0) 之间的单个连接完成。
在这里插入图片描述
当一个或多个中介出现在请求/响应链中,情况变得更复杂。有三种常见形式的中介:proxy,gateway,和 tunnel。

  • proxy 是 forwarding agent,接收指向某使用绝对形式表示的 URI 的请求,重写消息的所有或部分内容,然后转发重写格式化后的消息到 URI 表示的 server 上。
  • gateway 是 receiving agent,表现的像是其他 servers 之上的一层,且如果必要的话,将请求翻译为底层 server 的协议格式。
  • tunnel 表现得像是两个连接间得转发点,它不改变消息。当通讯需要通过一个中介(比如防火墙),即使中介不能理解消息的内容, 此时使用 tunnel。
    在这里插入图片描述
    上图表示三个中介(A,B 和 C)出现在 user agent 和 origin server 之间。通过
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值