HTTP概述(一)

在刚开始接触Web开发的同学经常会遇到以下几个概念,下面以通俗的方式一一介绍下:

1、什么是HTTP?

大家试想一个问题,每天我们都在访问各种各样的网站,比如各种电商网站,这些网站首页的共同特点就是含有大量的图片、HTML页面、文本文件、各种格式的电影和音频文件、Java小程序,HTTP指的就是将遍布在全世界的Web服务器的这些资源以迅速、便捷、可靠地的手段上搬移到你的浏览器或对应的软件上;

HTTP使用的是可靠的传输协议,因此无论数据在哪个角落里,它也能够确保数据在传输的过程中不会被损坏或产生混乱;

2、Web的客户端和服务器

Web内容(刚刚说道的大量图片、页面、文本文件、各种电影和音频文件等)都是存储在Web服务器上的,由于Web服务器所使用的是HTTP协议,所以也被称为HTTP服务器;服务器会接收HTTP客户端发出的请求,它们会提供数据。即客户端向服务器发送HTTP请求,服务器会在HTTP响应中回送所请求的数据,如下图所示:


大家每天都在使用客户端,最常见的客户端就是咱们熟知的浏览器,比如IE,chrome,firefox等,当我们想浏览某个网站,在浏览器地址栏输入URL(比如:http://www.oreilly.com/index.html)时,浏览器会向服务器www.oreilly.com发送一条HTTP请求。这时服务器会去寻找所期望的对象,如果成功,就将对象、对象类型、对象长度以及其它一些信息放在HTTP响应中发送到客户端,然后有浏览器显示在你的屏幕上。

3、Web资源

Web资源就是上面提到的Web内容的源头,Web服务器是Web资源的宿主;Web资源指的不只是静态文件(文本、图片、视频、音频或所有其它你能想到的格式)。更重要的是包含动态内容资源,这些动态内容资源可以根据你的身份、喜好、不同的天气、时间段等产生不同的内容,比如常用的软件今日头条上面产生的就是动态内容资源等,再次不做赘述!

4、媒体类型(MIME类型)

因特网上有数千种不同的资源类型,HTTP仔细地给每种要通过Web传输的对象都打上了名为MIME类型的数据格式标签。Web服务器会为所有HTTP对象数据附加一个MIME类型。当Web浏览器从服务器中取回一个对象时,会去查看相关的MIME类型,看看Web浏览器本身是否知道应该如何处理这个对象,如下图所示:


MIME类型是一种文本标记,它的主要作用是告诉浏览器该数据的类型以及如何让浏览器以什么方式打开,该MIME类型的组成由一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔,常见的MIME类型有数百个,下面列举几个简单的类型:

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

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

JPEG版本的图片为image/jpeg类型

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

通过上述可以观察MIME类型的组成为:主要的对象类型/特定的子类型 ;

5、URI

刚刚说到每个Web资源散布在因特网的各个角落里,那么要如何定位这个资源呢?或者是有没有一个类似于人的身份证或者名字一样的东西,有了它,就可以在世界范围内唯一标识并定位信息资源。答案是肯定的,每个Web服务器资源都有一个名字,被称为统一资源标识符(Uniform Resource Identifier,URI),它的作用是在世界范围内唯一标识并定位信息资源

URI有两种形式,分别为URL和URN,有的时候经常会问道URI和URL的关系,需要注意区分哈。

6、URL

统一资源定位符(URL)是资源标识符最常见的形式。URL描述了一台特定服务器上某资源的特定位置,下面通过图片来说明如何从一个精确、固定的位置获取资源。


大部分URL都遵循一种标准格式,这个格式包含三个部分。

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

第二部分给出了服务器的因特网地址(比如,www.joes-hardware.com).

其余部分指定了Web服务器上的某个资源(比如,/specials/saw-blade.gif)

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

7、URN

说完URL(描述资源所在位置的),就不得不说URN(统一资源名),URN作为特定内容的唯一名称使用的,与目前的资源所在地无关。使用这些与位置无关的URN,就可以将资源四处搬移,很明显URL就不具备这种特点。通过URN,还可以用同一个名字通过多种网络访问协议来访问资源。

需要说明的是URN目前处于试验阶段,同时为了更有效地工作,URN需要一个支撑架构来解析资源的位置,恰巧此类架构的缺乏也延缓了URN的采用进度,所以目前仍然以URL为主!

8、HTTP事务

一个HTTP事务是由一条(从客户端发往服务器的)请求命令和一个(从服务器端发回客户端的)响应结果组成。这种通信是通过名为HTTP报文(HTTP message)的格式化数据块进行的,简单例子如下:


9、HTTP请求方法

HTTP支持几种不同的请求命令,这些命令被称为HTTP方法。每个HTTP请求报文都包含一个方法。这个方法会告诉服务器要执行什么动作(比如说获取资源、运行服务器端程序、删除资源等操作),常见HTTP方法如下:


10、状态码

每条HTTP响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码,告知客户端请求是否成功,或者是否需要采取其它动作,常见状态码如下:


实际响应中,伴随着每个数字状态码,HTTP还会发送一条解释性的“原因短语”文本,需要注意的是该文本主要是为了进行描述,所有的处理过程使用的都是数字码,如下所示:


11、Web页面中可以包含多个对象

日常生活中,当我们浏览一个电商网站首页时,会发现除了必要的文字信息,另外包含了大量的图片、音频、视频,此时Web浏览器会发布一系列的HTTP事务来获取并显示一个包含了丰富资源的Web页面。浏览器会执行一个事务来获取描述页面布局的HTML“框架”,然后发布另外的HTTP事务来获取每个嵌入式图片、Java小程序等。这些内嵌式资源甚至可能位于不同的服务器上,日常生活中的Web页面通常都不是单个资源,而是一组资源的集合;

12、HTTP报文

在正式介绍报文之前,先看一个图片来简单认识下:


上述是一个简单事务所使用的HTTP报文。HTTP报文是由一行一行的简单字符串组成的。HTTp报文都是纯文本,不是二进制代码,可以方便人们进行读写;从Web客户端发往Web服务器的HTTP报文称为请求报文。从服务器端发往客户端的报文称为响应报文,目前就这两种报文,请求和响应报文格式很类似,包括三个部分

a)起始行

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

b)首部字段

起始行后面有零个或多个首部字段。每个首部字段都包含了一个名字和值,为了便于解析,两者之间用冒号(:来分隔。首部以一个空行结束

c)主体

空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包含了要发送给Web服务器的数据;响应主体中撞在了要返回给客户端的数据。起始部和首部都是文本形式且都是结构化的,而主体则不同,主体部可以包含任意的二进制数据。同样也可以包含文本;

下面通过一个简单的交互例子,来演示上述三个部分的作用:




  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值