• HTTP


    HTTP

    HTTP(Hypertext Transfer Protocol,超文本传输协议)是在万维网上进行通信时所使用的协议方案。HTTP 有很多应用,但最著名的是用于 Web 浏览器和 Web 服务器之间的双工通信。

    HTTP概述与TCP链接

    HTTP 是现代全球因特网中使用的公共语言。

    • HTTP 使用的是可靠的数据传输协议
    • Web 内容都是存储在 Web 服务器上的。Web 服务器所使用的是 HTTP 协议
    • Web 服务器是 Web 资源(Web resource)的宿主

    特性

    • HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    • HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
    • HTTP是无状态:HTTP协议是无状态协议。无状态是指Web浏览器和Web服务器之间不需要建立持久的连接。

    服务器资源名被称为统一资源标识符(Uniform Resource Identifier,URI)

    URI 有两种形式,分别称为 URL(统一资源定位符) 和 URN(统一资源名)

    1. URL(Uniform Resource Locator) 描述了一台特定服务器上某资源的特定位置。它们可以明确说明如何从一个精确、固定的位置获取资源。

      scheme://host.domain:port/path/filename
      通讯协议 : //服务器地址:通讯端口/文件位置……/文件名

      1scheme - 定义因特网服务的类型。最常见的类型是 http
      2host - 定义域主机(http 的默认主机是 www)
      3domain - 定义因特网域名,比如 w3school.com.cn
      4:port - 定义主机上的端口号(http 的默认端口号是 80
      5path - 定义服务器上的路径(如果省略,则文档必须位于网站的根目录中)。
      6filename - 定义文档/资源的名称
      7
      8Scheme
      9http 超文本传输协议 以 http:// 开头的普通网页。不加密。
      10https 安全超文本传输协议 安全网页。加密所有信息交换。
      11ftp 文件传输协议 用于将文件下载或上传至网站。
      12file 您计算机上的文件。
    2. URN(Uniform Resource Name) 是作为特定内容的唯一名称使用的,与目前的资源所在地无关。使用这些与位置无关的 URN,就可以将资源四处搬移。

    HTTP报文通过传输控制协议(Transmission Control Protocol,TCP)发送

    HTTP 是个应用层协议。Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族。HTTP 无需操心网络通信的具体细节;它把联网的细节都交给了通用、可靠的因特网传输协议 TCP/IP。TCP 提供了:
    • 无差错的数据传输;
    • 按序传输(数据总是会按照发送的顺序到达);
    • 未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)。

    1   ┌────────────────────┐
    2   │       HTTP         │ 应用层
    3   ├────────────────────┤
    4   │       SSL          │ 安全层
    5   ├────────────────────┤
    6   │       TCP          │ 传输层
    7   ├────────────────────┤
    8   │       IP           │ 网络层
    9   ├────────────────────┤
    10   │    网络链路接口     │ 数据链路层
    11   ├────────────────────┤
    12   │    物理网络硬件     │ 物理层
    13   └────────────────────┘

    TCP/IP协议分为四层(也就是数据传输一次主要经历以下4个步骤),分别是从上到下为:应用层,传输层,Internet,物理层。

    1. 应用层先把你的消息进行格式转换,你的消息是文字还是图片,还是成人视频并进行加密等操作交给传输层。(这时的数据单元(单位)是信息)
    2. 传输层将数据切割成一段一段的,便与传输并往里加上一些标记,比如当前应用的端口号等,交给Internet。(这时的数据单元(单位)是数据流)
    3. Internet开始在将数据进行分组,分组头部包含目标地址的IP及一些相关信息交给物理层。(这时的数据单元(单位)是分组)
    4. 物理层将数据转换为比特流开始查找主机真实物理地址进行校验等操作,校验通过,开始嗖~嗖~嗖~的住目的地跑。(这时的数据单元(单位)是比特)

    TCP 网络时延的大小取决于硬件速度、网络和服务器的负载,请求和响应报文
    的尺寸,以及客户端和服务器之间的距离。

    IP地址的概念

    每个计算机必须有一个 IP 地址才能够连入因特网。
    TCP/IP 使用 4 组数字来为计算机编址。每个计算机必须有一个唯一的 4 组数字的地址。
    TCP/IP 使用 32 个比特来编址。一个计算机字节是 8 比特。所以 TCP/IP 使用了 4 个字节。
    根据TCP/IP协议规定,IP地址是由32位二进制数组成,而且在INTERNET范围内是唯一的。例如,某台联在因特网上的计算机的IP地址为:11010010 01001001 10001100 00000010很明显,这些数字对于人来说不太好记忆。人们为了方便记忆,就将组成计算机的IP地址的32位二进制分成四段,每段8位,中间用小数点隔开,然后将每八位二进制转换成十进制数,这样上述计算机的IP地址就变成了:210.73.140.2。
    12 个阿拉伯数字很难记忆。使用一个名称更容易。用于 TCP/IP 地址的名字被称为域名。
    当你键入一个像 http://www.runoob.com 这样的域名,域名会被一种 DNS 程序翻译为数字。在全世界,数量庞大的 DNS 服务器被连入因特网。DNS 服务器负责将域名翻译为 TCP/IP 地址,同时负责使用新的域名信息更新彼此的系统。

    域名

    域名分为顶层(TOP-LEVEL)、第二(SECOND-LEVEL)、子域(SUB-DOMAIN)等。

    1顶层分为几种类型,分别是:
    2    .COM 商业性的机构或公司
    3    .ORG 非盈利的组织、团体
    4    .GOV 政府部门
    5    .MIL 军事部门
    6    .NET 从事Internet相关的网络服务的机构或公司
    7    .XX由两个字母组成的国家代码,如中国为.CN,日本为.JP

    http请求步骤:

    1. 建立TCP连接

    HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,默认端口号是80。(DNS服务器通过域名解析IP地址)

    TCP 连接握手需要经过以下几个步骤。
    (1) 请求新的 TCP 连接时,客户端要向服务器发送一个小的 TCP 分组(通常是 40 ~ 60 个字节)。这个分组中设置了一个特殊的 SYN 标记,说明这是一个连接请求。
    (2) 如果服务器接受了连接,就会对一些连接参数进行计算,并向客户端回送一个 TCP 分组,这个分组中的 SYN 和 ACK 标记都被置位,说明连接请求已被接受
    (3) 最后,客户端向服务器回送一条确认信息,通知它连接已成功建立。
    现代的 TCP 栈都允许客户端在这个确认分组中发送数据。

    HTTP 程序员永远不会看到这些分组——这些分组都由 TCP/IP 软件管理,对其是不可见的。HTTP 程序员看到的只是创建 TCP 连接时存在的时延。

    1. Web浏览器向Web服务器发送请求报文

    一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令,例如:GET/sample/hello.jsp HTTP/1.1。浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。

    1. Web服务器应答

    客户机向服务器发出请求后,服务器会客户机回送应答,HTTP/1.1 200 OK 应答的第一部分是协议的版本号和应答状态码。正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据

    1. Web服务器关闭TCP连接

    一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码Connection:keep-aliveTCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

    Web的结构组件

    • 代理

    位于客户端和服务器之间的 HTTP 中间实体。这是 Web 安全、应用集成以及性能优化的重要
    组成模块。

    • 缓存

    HTTP 的仓库,使常用页面的副本可以保存在离客户端更近的地方。

    • 网关

    连接其他应用程序的特殊 Web 服务器。通常用于将 HTTP 流量转换成其他的协议。

    • 隧道

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

    • Agent 代理

    发起自动 HTTP 请求的半智能 Web 客户端。

    网关、隧道及中继

    网关

    网关是资源和应用程序之间的粘合剂。应用程序可以(通过 HTTP 或其他已定义的接口)请求网关来处理某条请求,网关可以提供一条响应。网关可以向数据库发送查询语句,或者生成动态的内容,就像一个门一样:进去一条请求,出来一个响应。有些网关会自动将 HTTP 流量转换为其他协议,这样 HTTP 客户端无需了解其他协议,就可以与其他应用程序进行交互了。

    HTTP 可以作为一种连接应用程序的基础软件来使用。

    Web 隧道(Web tunnel)

    Web 隧道允许用户通过 HTTP 连接发送非 HTTP 流量,这样就可以在 HTTP 上捎带其他协议数据了。使用 Web 隧道最常见的原因就是要在 HTTP 连接中嵌入非 HTTP流量,这样,这类流量就可以穿过只允许 Web 流量通过的防火墙了。

    中继(relay)

    HTTP 中继(relay)是没有完全遵循 HTTP 规范的简单 HTTP 代理。中继负责处理HTTP 中建立连接的部分,然后对字节进行盲转发。

    HTTP安全

    HTTPS 是最流行的 HTTP 安全形式。使用 HTTPS 时,所有的 HTTP 请求和响应数据在发送到网络之前,都要进行加密。HTTPS 在 HTTP 下面提供了一个传输级的密码安全层

    HTTP存在的问题

    1. 可能被窃听
    2. 认证问题
    3. 可能被篡改

    HTTPS介绍

    超文本传输安全协议(Hypertext Transfer Protocol Secure)是一种通过计算机网络进行安全通信的传输协议,利用SSL/TLS来加密数据包,提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

    HTTPS是在通信接口部分用 TLS(Transport Layer Security 传输层安全性协议),TLS协议采用主从式架构模型,用于在两个应用程序间通过网络创建起安全的连接,防止在交换数据时受到窃听及篡改。

    传输层安全性协议(英语:Transport Layer Security,缩写作 TLS),及其前身安全套接层(Secure Sockets Layer,缩写作 SSL)是一种安全协议,目的是为互联网通信,提供安全及数据完整性保障。

    HTTPS 协议的主要功能基本都依赖于 TLS/SSL 协议,TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数 、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。

    201852214842
    201852214842

    HTTP和HTTPS

    HTTP 的运作

    如果爱丽丝想要给鲍勃发送一段信息,她会把信息绑在信鸽的腿上然后送往鲍勃那里。鲍勃收到了信息,并阅读了信息,非常完美。

    但如果马洛里拦截了爱丽丝的鸽子并且篡改了信息呢?鲍勃就没有办法去知道爱丽丝发出的信息在传递过程中遭到了修改。

    这就是对称密匙加密HTTP的运作

    对称密匙加密

    那么如果爱丽丝和鲍勃都非常的机智。他们一致认同使用一种隐蔽的密码来书写他们的信息。他们会将信息中的每个字母按照字母表中的顺序前移三位。比如,D→A,E→B,F→C。如此一来,原文为 “secret message” 的信息就变成了 “pbzobq jbppxdb” 。

    那现在如果马洛里再截获了信鸽,她既不能做出有意义的修改同时也不会知道信息的内容,因为她不知道隐蔽的密码到底是什么。然而鲍勃却可以很容易反转密码,依靠 A → D, B → E, C → F 之类的规则破译信息的内容。加密后的信息 “pbzobq jbppxdb” 会被破解还原为 “secret message” 。

    这就是对称密匙加密

    如果除了发信者和收信者之外没有人知道使用的是什么密匙,对称密匙加密是非常安全的。问题是如果爱丽丝和鲍勃在开始用信鸽传信之前没有碰过头,他们没有一个安全的方式来确立密匙。如果他们自己来在信中传递密匙,马洛里就会截获信息并发现密匙。这就使得马洛里可以在爱丽丝和鲍勃开始加密他们的信息之前或之后,阅读到他们信息的内容并按照她的意愿来篡改信息。

    这是一个中间人攻击的典型例子,避免这个问题的唯一方法就是收发信的两方一起修改他们的编码系统。

    非对称密钥加密

    所以爱丽丝和鲍勃就想出了一个更好的系统。当鲍勃想要给爱丽丝发送信息时,他会按照如下的步骤来进行:

    • 鲍勃向爱丽丝送一只没有携带任何信息的鸽子。
    • 爱丽丝给鲍勃送回鸽子,并且这只鸽子带有一个有开着的锁的盒子,爱丽丝保管着锁的钥匙。
    • 鲍勃把信放进盒子中,把锁锁上然后把盒子送给爱丽丝。
    • 爱丽丝收到盒子,用钥匙打开然后阅读信息。

    这样马洛里就不能通过截获鸽子来篡改信息了,因为她没有打开盒子的钥匙。当爱丽丝要给鲍勃发送消息的时候同样按照上述的流程。

    这就是非对称密钥加密。在术语中,盒子被称为公匙而用来打开盒子的钥匙被称为私匙。

    HTTPS

    但是会发现还是存在问题。当鲍勃收到盒子时他如何能确定这个盒子来自爱丽丝而不是马洛里截获了鸽子然后换了一个她有钥匙能打开的盒子呢?

    爱丽丝决定签名标记一下盒子,这样鲍勃收到盒子的时候就可以检查签名来确定是爱丽丝送出的盒子了。

    那么鲍勃如何打一开始就能识别出爱丽丝的签名呢?这是个好问题。爱丽丝和鲍勃也确实有这个问题,所以他们决定让泰德代替爱丽丝来标记这个盒子。

    那么谁是泰德呢?泰德很有名的,是一个值得信任的家伙。他会给任何人签名并且所有人都信任他只会给合法的人签名标记盒子。

    如果泰德可以确认索要签名的人是爱丽丝,他就会在爱丽丝的盒子上签名。因此马洛里就不可能搞到一个有着泰德代表爱丽丝签了名的盒子,因为鲍勃知道泰德只会给他确认过的人签名,从而识破马洛里的诡计。

    泰德的角色在术语中被称为认证机构。而你阅读此文时所用的浏览器打包存有许多认证机构的签名。

    所以当你首次接入一个网站的时候你可以信任来自这个站点的盒子因为你信任泰德而泰德会告诉你盒子是合法的。


  • 相关阅读:
    MYSQL数据库基础
    MSYQL操数据DML
    MYSQL外键约束
    MYSQL多表查询
    MYSQL结果排序、分页查询、聚合函数
    未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项”的解决方法
    由于扩展配置问题而无法提供您请求的页面。
    JS中的prototype(转载)
    mvc表单如何绑定bool类型的属性或变量
    使用c#正则验证关键字并找出匹配项
  • 原文地址:https://www.cnblogs.com/qinyuandong/p/15883542.html
Copyright © 2020-2023  润新知