• http概述


    HTTP 使用的是可靠的数据传输协议,因此即使数据来自地球的另一端,它也能够确保数据在传输的过程中不会被损坏或产生混乱。这样,用户在访问信息时就不用
    担心其完整性了。
    1.1 Web客户端和服务器
    浏 览 一 个 页 面 时( 比 如 http://www.oreilly.com/index.html), 浏 览 器 会 向 服 务 器www.oreilly.com 发送一条 HTTP 请求(参见图 1-1)。服务器会去寻找所期望的对象(在这个例子中就是 /index.html),如果成功,就将对象、对象类型、对象长度以及其他一些信息放在 HTTP 响应中发送给客户端。
    1.2 资源
    Web 服务器是 Web 资源(Web resource)的宿主。Web 资源是 Web 内容的源头。最简单的 Web 资源就是 Web 服务器文件系统中的静态文件。这些文件可以包含任意内容:文本文件、HTML 文件、微软的 Word 文件、Adobe 的 Acrobat 文件、JPEG 图片文件、AVI 电影文件,或所有其他你能够想到的格式。但资源不一定非得是静态文件。资源还可以是根据需要生成内容的软件程序。这些动态内容资源可以根据你的身份、所请求的信息或每天的不同时段来产生内容。它们可以为你显示照相机中活生生的照片,也可以帮你进行股票交易,搜索房产数据库,或者从在线商店中购买礼物(参见图 1-2)。
    1.3媒体类型
    MIME 类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间
    由一条斜杠来分隔。
    • HTML 格式的文本文档由 text/html 类型来标记。
    • 普通的 ASCII 文本文档由 text/plain 类型来标记。
    • JPEG 格式的图片为 image/jpeg 类型。
    • GIF 格式的图片为 image/gif 类型。
    • Apple 的 QuickTime 电影为 video/quicktime 类型。
    • 微软的 PowerPoint 演示文件为 application/vnd.ms-powerpoint 类型。
    1.4 URI
    每个 Web 服务器资源都有一个名字,这样客户端就可以说明它们感兴趣的资源是什么了。服务器资源名被称为统一资源标识符(Uniform Resource Identifier,URI)。URI 就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源。
    1.5 URL
    统一资源定位符(URL)是资源标识符最常见的形式。URL 描述了一台特定服务器上某资源的特定位置。它们可以明确说明如何从一个精确、固定的位置获取资源。
    大部分 URL 都遵循一种标准格式,这种格式包含三个部分。
    • URL 的第一部分被称为方案(scheme),说明了访问资源所使用的协议类型。这
    部分通常就是 HTTP 协议(http://)。
    • 第二部分给出了服务器的因特网地址(比如,www.joes-hardware.com)。
    • 其余部分指定了 Web 服务器上的某个资源(比如,/specials/saw-blade.gif)。
    1.6 URN
    URI 的第二种形式就是统一资源名(URN)。URN 是作为特定内容的唯一名称使用的,与目前的资源所在地无关。使用这些与位置无关的 URN,就可以将资源四处搬移。通过 URN,还可以用同一个名字通过多种网络访问协议来访问资源。
    URN 仍然处于试验阶段,还未大范围使用
    1.7 事务
    一个 HTTP 事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成。
    1.8 方法
    1.9 状态码
    1.10 Web页面中可以包含多个对象 
    应用程序完成一项任务时通常会发布多个 HTTP 事务。
    1.11 报文
    HTTP 报文是由一行一行的简单字符串组成的。HTTP 报文都是纯文本,不是二进制代码,所以人们可以很方便地对其进行读写
    从 Web 客户端发往 Web 服务器的 HTTP 报文称为请求报文(request message)。从服务器发往客户端的报文称为响应报文(response message),此外没有其他类型的
    HTTP 报文。HTTP 请求和响应报文的格式很类似
    HTTP 报文包括以下三个部分。
    • 起始行
    报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况。
    • 首部字段
    起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号(:)来分隔。首部以一个空行结束。添加一个首部字段和添加新行一样简单。
    • 主体
    空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括了要发送给 Web 服务器的数据;响应主体中装载了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意的二进制数据(比如图片、视频、音轨、软件程序)。当然,主体中也可以包含文本。 

    1.12 连接
    HTTP 是个应用层协议。HTTP 无需操心网络通信的具体细节;它把联网的细节都交给了通用、可靠的因特网传输协议 TCP/IP。
    在HTTP 客户端向服务器发送报文之前,需要用网际协议(Internet Protocol,IP)地址和端口号在客户端和服务器之间建立一条 TCP/IP 连接。
    步骤如下:
    (a) 浏览器从 URL 中解析出服务器的主机名;
    (b) 浏览器将服务器的主机名转换成服务器的 IP 地址;
    (c) 浏览器将端口号(如果有的话)从 URL 中解析出来;
    (d) 浏览器建立一条与 Web 服务器的 TCP 连接;
    (e) 浏览器向服务器发送一条 HTTP 请求报文;
    (f) 服务器向浏览器回送一条 HTTP 响应报文;
    (g) 关闭连接,浏览器显示文档。 
     一个使用Telnet的实例
     
    例1-1 一个使用Telnet 的HTTP 事务
    % telnet www.joes-hardware.com 80
    Trying 161.58.228.45...
    Connected to joes-hardware.com.
    Escape character is '^]'.
    GET /tools.html HTTP/1.1
    Host: www.joes-hardware.com
    HTTP/1.1 200 OK
    Date: Sun, 01 Oct 2000 23:25:17 GMT
    Server: Apache/1.3.11 BSafe-SSL/1.38 (Unix) FrontPage/4.0.4.3
    Last-Modified: Tue, 04 Jul 2000 09:46:21 GMT
    ETag: "373979-193-3961b26d"
    Accept-Ranges: bytes
    Content-Length: 403
    Connection: close
    Content-Type: text/html
    <HTML>
    <HEAD><TITLE>Joe's Tools</TITLE></HEAD>
    <BODY>
    <H1>Tools Page</H1>
    <H2>Hammers</H2>
    <P>Joe's Hardware Online has the largest selection of hammers on the
    earth.</P>
    <H2><A NAME=drills></A>Drills</H2>
    <P>Joe's Hardware has a complete line of cordless and corded drills,
    as well as the latest
    in plutonium-powered atomic drills, for those big around the house
    jobs.</P> ...
    </BODY>
    </HTML>
    Connection closed by foreign host.

    Telnet 会查找主机名并打开一条连接,连接到在www.joes-hardware.com 的端口80
    上监听的Web 服务器。这条命令之后的三行内容是Telnet 的输出,告诉我们它已经
    建立了连接。
    然后我们输入最基本的请求命令GET/tools.html HTTP/1.1,发送一个提供了源
    端主机名的Host 首部,后面跟上一个空行,请求从服务器www.joes-hardware.com
    上获取资源tools.html。随后,服务器会以一个响应行、几个响应首部、一个空行和
    最后面的HTML 文档主体来应答。
    1.13 协议版本

    • HTTP/0.9
    HTTP 的1991 原型版本称为HTTP/0.9。这个协议有很多严重的设计缺陷,只应该用于与老客户端的交互。HTTP/0.9 只支持GET 方法,不支持多媒体内容的MIME 类型、各种HTTP 首部,或者版本号。HTTP/0.9 定义的初衷是为了获取简单的HTML 对象,它很快就被HTTP/1.0 取代了。
    • HTTP/1.0
    1.0 是第一个得到广泛使用的HTTP 版本。HTTP/1.0 添加了版本号、各种HTTP首部、一些额外的方法,以及对多媒体对象的处理。HTTP/1.0 使得包含生动图片的Web 页面和交互式表格成为可能,而这些页面和表格促使万维网为人们广泛地接受。这个规范从未得到良好地说明。在这个HTTP 协议的商业演进和学术研究都在快速进行的时代,它集合了一系列的最佳实践。
    • HTTP/1.0+
    在20 世纪90 年代中叶,很多流行的Web 客户端和服务器都在飞快地向HTTP中添加各种特性,以满足快速扩张且在商业上十分成功的万维网的需要。其中很多特性,包括持久的keep-alive 连接、虚拟主机支持,以及代理连接支持都被加入到HTTP 之中,并成为非官方的事实标准。这种非正式的HTTP 扩展版本通常
    称为HTTP/1.0+。
    • HTTP/1.1
    HTTP/1.1 重点关注的是校正HTTP 设计中的结构性缺陷,明确语义,引入重要的性能优化措施,并删除一些不好的特性。HTTP/1.1 还包含了对20 世纪90 年代末正在发展中的更复杂的Web 应用程序和部署方式的支持。HTTP/1.1 是当前使用的HTTP 版本。
    • HTTP-NG(又名 HTTP/2.0)
    HTTP-NG 是HTTP/1.1 后继结构的原型建议,它重点关注的是性能的大幅优化,以及更强大的服务逻辑远程执行框架。HTTP-NG 的研究工作终止于1998 年,编写本书时,还没有任何要用此建议取代HTTP/1.1 的推广计划。

     1.14 Web的结构组件

    两个Web 应用程序(Web 浏览器和Web 服务器)是如何相互发送报文来实现基本事务处理的。在因特网上,要与很多Web 应用程序进行交互。在本节中,我们将列出其他一些比较重要的应用程序,如下所示。
    • 代理
    位于客户端和服务器之间的HTTP 中间实体。
    • 缓存
    HTTP 的仓库,使常用页面的副本可以保存在离客户端更近的地方。
    • 网关
    连接其他应用程序的特殊Web 服务器。
    • 隧道
    对HTTP 通信报文进行盲转发的特殊代理。
    • Agent 代理
    发起自动HTTP 请求的半智能Web 客户端。

    1.14.1 代理 
     代理位于客户端和服务器之间,接收所有客户端的HTTP 请求,并将这些请求转发给服务器(可能会对请求进行修改之后转发)。对用户来说,这些应用程序就是一个代理,代表用户访问服务器。
     

     出于安全考虑,通常会将代理作为转发所有Web 流量的可信任中间节点使用。代理还可以对请求和响应进行过滤。比如,在企业中对下载的应用程序进行病毒检测,或者对小学生屏蔽一些成人才能看的内容。

     1.14.2 缓存
     Web 缓存(Web cache)或代理缓存(proxy cache)是一种特殊的HTTP 代理服务器,可以将经过代理传送的常用文档复制保存起来。
     

     1.14.3 网关

     网关(gateway)是一种特殊的服务器,作为其他服务器的中间实体使用。通常用于将HTTP 流量转换成其他的协议。网关接受请求时就好像自己是资源的源端服务器一样。客户端可能并不知道自己正在与一个网关进行通信。

     1.14.4 隧道

     隧道(tunnel)是建立起来之后,就会在两条连接之间对原始数据进行盲转发的HTTP 应用程序。HTTP 隧道通常用来在一条或多条HTTP 连接上转发非HTTP 数据,转发时不会窥探数据。
     

     1.14.5 Agent代理

     用户Agent 代理(或者简称为Agent 代理)是代表用户发起HTTP 请求的客户端程序。所有发布Web 请求的应用程序都是HTTP Agent 代理。到目前为止,我们只提到过一种HTTP Agent 代理:Web 浏览器,但用户Agent 代理还有很多其他类型。
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    php趣题小记
    git常用语法
    Go 使用小记
    小程序 显示对话框 确定-取消
    小程序 后退一页
    Vue脚手架使用步骤 2.9.6版本
    小程序 后台返回的对象数组(每个数组添加一个新的属性值)
    小程序 添加对象
    小程序图表wx-chart
    微信小程序之自定义select下拉选项框组件
  • 原文地址:https://www.cnblogs.com/liujunjun/p/12578047.html
Copyright © 2020-2023  润新知