HTTP概述(一)

                   从本章起 ,我们就开始讲解关于HTTP的一些基础知识,很多时候,由于语言的高级性,导致我们对于这些基础的知识点一知半解,当你达到一定的深度时候,你就会发现基础知识是多么的重要,所以,从本章起,我开始会讲解一系列的关于HTTP的基础知识,希望对你有所帮助。

 

HTTP

 

HTTP定义:

http可以理解为因特网的多媒体信使,它是一种可靠的数据传输协议,用于实现数据的搬运功能

 

HTTP媒体类型:

因特网上有数千种不同的数据类型,HTTP仔细地给每种要通过Web传输的对象都打上了名为MIME类型的数据格式标签。MIME类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杆来分隔。

常见的MIME类型:

1) HTML格式的文本文档由text/html类型来标记

2)普通的ASCII文本文档由text/plain类型来标记

3)JPEG格式的图片为image/jpeg类型

4)GIF格式的图片为image/gif类型

当然,常见的MIME类型并不仅仅只有这些,常见的类型有数百个,具体的可以自己去百度一下

 

URI:(统一资源标识符)

每个Web服务器资源都有一个名字,这样客户端就可以说明它们感兴趣的资源是什么了。在实际的工作中我们一般用到最多的是URL,那么URI又是什么呢?URI(Uniform Resource Identifier)被称为统一资源标识符,用来唯一标识并定位信息资源。那么URI和URL是什么关系呢?其实URI和URL是包含和被包含的关系,即URI包含URL。URI有两种形式:URL和URN。

 

URL:(统一资源定位符)

URL描述了一台特定服务器上某资源的特定位置,它们可以明确说明如何从一个精确、固定的位置获取资源。一般情况下我们的URL的地址是这样的:http://www.joes.com/special/index.html

这种格式包含三个部分:

第一部分(http://):这部分被称为方案(scheme),说明了访问资源所使用的协议类型

第二部分(www.joes.com):服务器的因特网地址

第三部分(/special/index.html):指定了服务器上的某个资源

现在,几乎所有的URI都是URL

 

URN:(统一资源名)

这是URI的另外一种形式。URN作为特定内容的唯一名称使用的,与目前资源所在地无关。使用这些与资源地址无关的URN,就可以将资源四处搬移。这种方式现在基本上很少见了,知道就好,不做过多的解释。

 

 

事务

 

事务是指一次完整的HTTP请求,包括一条请求指令(从客户端发往服务端)和一条响应指令(从服务端发往客户端),这种通信是通过名为HTTP报文的格式化数据块来进行的,如下图

我们注意看请求报文的组成内容:

1》方法

GET是HTTP请求命令当中的一种,这些命令被称为HTTP方法。每条HTTP请求都包含一个方法,这个方法标识了服务器要执行什么样的请求。常见的HTTP方法有:

       (1)GET:从服务端向客户端发送资源

       (2)POST:将客户端数据发送到一个服务器网关程序(也可以理解为向服务端发送数据)

       (3)PUT:将来自客户端的数据存储到一个命名的服务器资源当中

       (4)DELETE:从服务器中删除资源

       (5)HEAD:仅仅发送响应资源中的HTTP首部

2》状态码

每条HTTP响应报文返回时都会携带一个状态码,用来标识请求的状态,请求码是一个三位数字的代码,常见的状态码如下:

        (1)200:返回成功,数据正常返回

        (2)302:Redirect(重定向)。到其他地方去获取资源

        (3)404:Not Found(资源没找到)

当然,状态码绝对不仅仅是这些,后面我会单独用一篇文章来讲解

 

报文:

上面说到,HTTP报文是以数据块的形式进行传送的,那么报文到底是什么呢?它里面到底是什么样子的呢?接下来我们就一起来分析一下

先看下上面这张图,这是一个简单的HTTP请求,我们发现,报文其实就是由纯文本组成的,当然报文是分层的

HTTP报文分为三层:

1》起始行

     报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况

2》首部

     起始行后面有零个或者多个首部字段,通过键值对的形式来进行显示,中间用冒号(:)来进行区分,以一个空行结束

3》主体

     主体就是数据存放的位置,其中包含了所有类型的数据。请求主体中包括了要发送给Web服务器的数据,响应主体中装载了要返回给客户端的数据。与起始行和首部不同,主体中可以包含任意的二进制数据(比如图片,视频,音频,软件程序)

 

连接

通过前面的学习我们知道了HTTP的一些基础知识,包括HTTP定义,事务,报文,但是现在有一个疑问,数据到底是如何进行传输的呢?即资源是如何从指定的服务器到达我们指定的位置的呢?在解决这个问题之前我们先需要了解一下其他知识点

 

1》网络分层

在工作中我们听到最多的就是HTTP协议,TCP/IP协议,当然还有UDP协议等等,那么这些协议是如何进行工作的呢?先来看一张图

HTTP是个应用层协议,无需关心网络通信的具体细节,它把联网的细节都交给了通用、可靠的因特网传输协议TCP/IP。因特网自身就是基于TCP/IP的,只要建立了TCP连接,客户端和服务端之间的报文交换就不会丢失,不会被破坏,也不会在接收时出现错序了,那么TCP到底提供了些什么呢?

TCP提供了:

(1)无差错的数据传输

(2)按序传输(数据总是会按照发送的顺序到达)

(3)未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)

 

2》连接、IP地址及端口号

在HTTP客户端向服务器发送报文之前,客户端和服务端之间需要建立一条TCP/IP连接。在TCP中,你需要知道服务器的IP地址,以及与服务器上运行的特定软件相关的TCP端口号,这样就可以了。看到这里你会一脸懵逼,平时我们发送请求的时候没用到这些东西呀,为什么请求照样成功了呢?这里就涉及到另外一个东西了:域名。域名也被称为主机名,是IP地址比较人性化的别称,可以通过一种称为域名服务(DNS)的机制方便地将主机名转换为IP地址。那么端口号我们该如何处理呢?默认情况下端口号是80,有了IP地址和端口号,我们就可以很方便的和服务端进行TCP/IP连接了。

 

Web的结构组件

尽管客户端和服务端之间已经建立起了TCP连接,但是很多时候我们会添加一些额外的组件来更好的为传输进行服务。下面是一些比较重要的应用程序:

1》代理

      位于客户端和服务器之间的HTTP中间实体

如图所示,代理位于客户端和服务器之间,接收所有客户端的HTTP请求,并将这些请求转发给服务器。通常情况下,为了安全考虑,代理会作为转发所有Web流量的可信任中间节点使用,同时还可以对请求和响应进行过滤。例如,对下载的应用程序进行病毒检测,屏蔽一些黄赌毒内容

 

2》缓存

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

当我们请求的数据是静态的,不需要改动的时候,我们就可以把资源存在缓存当中,这样客户端从附近的缓存下载文档比从服务器下载快的多

 

3》网关

     连接其他应用程序的特殊Web服务器

网关是一种特殊的服务器,作为其他服务器的中间实体实现,通常用于将HTTP流量转换成其他的协议,比如将HTTPS请求转换为HTTP请求

 

4》隧道

     对HTTP通信报文进行盲转发的特殊处理

隧道是建立起来之后,就会在两条连接之间对原始数据进行盲转发的HTTP应用程序。HTTP隧道通常用来在一条或多条HTTP连接上转发非HTTP数据,转发时不会窥探数据。HTTP隧道的一种常见用途是通过HTTP连接承载加密的安全套接字层流量,这样SSL流量就可以穿过只允许Web流量通过的防火墙了。使用隧道可以保证数据在传输的过程中不被拦截,篡改,保证了数据的安全性

 

5》Agent代理

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

用户Agent代理是代表用户发起HTTP请求的客户端程序。所有发布Web请求的应用程序都是HTTP Agent代理。到目前为止,我们只提到过一种HTTP Agent代理:Web浏览器,但用户Agent代理还有很多其他类型

 

到这里,基本内容就结束了,接下来我会对上面的内容进行详细讲解,欢迎大家在下面留言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值