HTTP协议——HTTP概述

《HTTP协议》这一系列博文是我记录自己学习过程中的一些笔记,参考书籍为《HTTP权威指南》和《图解HTTP》

一、Web页面生成原理

        当我们在浏览器的地址栏中输入网址,然后点击回车,接着,浏览器就会呈现出我们需要的web界面,那么,这个界面是怎么产生的?web的界面是根据我们输入的URL(网址、地址),浏览器从服务器端获取对应的文件资源等信息,然后显示在浏览器上面。像这种通过发送请求获取服务器资源的web浏览器等,都可以称之为客户端(client)。

                   

        Web 使用一种名为 HTTP(HyperText Transfer Protocol)的协议作为规范,完成从客户端到服务器端等一系列运作流程。而协议是指规则的约定。可以说,Web 是建立在 HTTP 协议上通信的。

        HTTP使用的是可靠的数据传输协议,因此即使数据来自地球的另一端,它也能确保数据在传输的过程中不会被损坏或产生混乱,用户在访问信息的时候不用担心其完整性。


二、Web资源

1、MIME类型

        网络上有着数千种不同的数据类型,HTTP仔细地给每种要通过Web传输的对象都打上了名为MIME类型的数据格式标签。
        MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。
        MIME类型是一种文本标记,表示一种主要的对象类型和一个特殊的子类型,中间由一条斜杠分隔。例如:HTML格式的文本文档是text/html,GIF格式的图片是image/gif
        当Web浏览器从服务器中取回一个对象时,会去查看相关的MIME类型,看看是否知道如何处理这个对象,大多数浏览器都可以处理数百种常见的对象类型,或者运行外部插件软件来处理特殊格式的数据。

        常用Mime类型:

文件后缀

Mime类型

说明

.flv

flv/flv-flash 

在线播放

.html或.htm 

text/html 

超文本标记语言文本

.rtf 

application/rtf

RTF文本

.gif 

image/gif

GIF图形

.jpeg或.jpg 

image/jpeg

JPEG图形

.au

audio/basic 

au声音文件

.mid或.midi

audio/midi或audio/x-midi

MIDI音乐文件

.ra或.ram或.rm 

audio/x-pn-realaudio

RealAudio音乐文件

.mpg或.mpeg或.mp3 

video/mpeg

MPEG文件

.avi 

video/x-msvideo

AVI文件

.gz

application/x-gzip

GZIP文件

.tar

application/x-tar 

TAR文件

.exe 

application/octet-stream

下载文件类型

.rmvb 

video/vnd.rn-realvideo 

在线播放

.txt 

text/plain

普通文本

.mrp 

application/octet-stream 

MRP文件(国内普遍的手机)

.ipa

application/iphone-package-archive

IPA文件(IPHONE)

.deb 

application/x-debian-package-archive

DED文件(IPHONE)

.apk

application/vnd.android.package-archive 

APK文件(安卓系统)

.cab

application/vnd.cab-com-archive 

CAB文件(Windows Mobile)

.xap

application/x-silverlight-app 

XAP文件(Windows Phone 7)

.sis

application/vnd.symbian.install-archive

SIS文件(symbian平台)

.jar 

application/java-archive

JAR文件(JAVA平台手机通用格式)

.jad

text/vnd.sun.j2me.app-descriptor

JAD文件(JAVA平台手机通用格式)

.sisx 

application/vnd.symbian.epoc/x-sisx-app 

SISX文件(symbian平台)

2、URI

        URI(Uniform Resource Identifier,统一资源标识符)是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对网络中(一般指万维网)的资源通过特定的协议进行交互操作。

        URI的格式如下:

        使用 http: 或 https: 等协议方案名获取访问资源时要指定协议类型。不区分字母大小写,最后附一个冒号(:),也可使用 data: 或 javascript: 这类指定数据或脚本程序的方案名。
登录信息(认证)
        指定用户名和密码作为从服务器端获取资源时必要的登录信息(身份认证)。此项是可选项。
服务器地址
        使用绝对 URI 必须指定待访问的服务器地址。地址可以是类似hackr.jp 这种 DNS 可解析的名称,或是 192.168.1.1 这类 IPv4 地址名,还可以是 [0:0:0:0:0:0:0:1] 这样用方括号括起来的 IPv6 地址名。
服务器端口号
        指定服务器连接的网络端口号。此项也是可选项,若用户省略则自动使用默认端口号。
带层次的文件路径
        指定服务器上的文件路径来定位特指的资源。这与 UNIX 系统的文件目录结构相似。
查询字符串
        针对已指定的文件路径内的资源,可以使用查询字符串传入任意参数。此项可选。
片段标识符

        使用片段标识符通常可标记出已获取资源中的子资源(文档内的某个位置)。但在 RFC 中并没有明确规定其使用方法。该项也为可选项。

        URI 可以进一步划分为定位符(URL),名称(URN)或两者兼备。URL 和 URN 都是 URI 子集。URN 如同一个人的名称,而 URL 代表一个人的住址。换言之,URN 定义某事物的身份,而 URL 提供查找该事物的方法。

3、URL

        URL(Uniform Resource Locator,统一资源定位符),最常见的形式是 URI,经常指定为非正式的网址。

       URL 是一种 URI,它标识一个互联网资源,并指定对其进行操作或获取该资源的方法。可能通过对主要访问手段的描述,也可能通过网络“位置”进行标识。例如,http://www.waylau.com 这个 URL,标识一个特定资源(首页)并表示该资源的某种形式(例如以编码字符表示的,首页的 HTML 代码)是可以通过 HTTP 协议从www.waylau.com 这个网络主机获得的。

        大部分URL遵循一种标准格式,该格式包含三个部分:
        第一部分:方案;说明了访问资源所使用的协议类型,通常为http协议:hhtp://
        第二部分:地址;比如:www.baidu.com
        第三部分:指定服务器上某个资源,比如:specisal/saw-blade.gif

       现在几乎所有的URI都是URL了。

4、URN

       URN(Uniform Resource Name,统一资源名称),是URI的第二种形式,其目的是通过提供一种途径,用于在特定的命名空间资源的标识,以补充网址。

        URN 是基于某命名空间通过名称指定资源的URI。URN是作为特定内容的唯一名称使用的,与目前的资源所在地无关。使用这些与位置无关的URN,就可以将资源四处搬移。通过URN,还可以用同一个名字通过多种网络访问协议来访问资源。人们可以通过 URN 来指出某个资源,而无需指出其位置和获得方式。资源无需是基于互联网的。例如,URN urn:isbn:0-395-36341-1 指定标识系统(即国际标准书号ISBN)和某资源在该系统中的唯一表示的 URI。它可以允许人们在不指出其位置和获得方式的情况下谈论这本书。

三、HTTP事务

        一个HTTP事务是由一条请求命令和一个响应结果组成的。这种通信时通过http报文(HTTP message)的格式化数据块进行的。事务也可以理解为从客户端到服务器再到客户端,一次完整通信的过程。

1、HTTP方法

        HTTP的不同的请求命令被称为HTTP方法。每条HTTP请求报文都包含一个方法。这个方法会告诉服务器执行什么动作。例如post,get等。

        具体的方法后面详细介绍。

2、状态码

        每条HTTP响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码,告诉客户端请求是否成功,或者是否需要进行其他的动作。例如404,,500,200等。

        具体的状态码后面详细介绍。

3、一个web界面中可以包含多个对象

        应用程序完成一项任务时通常会发布多个事务。一个“Web页面”通常不是单个资源,而是一组资源的集合。

四、报文

        HTTP报文是由一行一行的简单字符组成的,是由纯文本组成,不是二进制代码,所以方便人们进行读写。
        请求报文(request message):从客户端发往服务器
        响应报文(response message):从服务器发往客户端
        http报文包括以下三个部分:
        起始行:报文第一行,在请求报文里用来说明要做什么,在响应报文里说明出现了什么情况
        首部字段:位于起始行后面,有零个或者多个,每个首部字段都包含一个名字和一个值,便于解析,两者之间用冒号(:)隔开,首部之间以一个空行结束。
        主体:空行之后就是可选的报文主题。其中包含了所有类型的数据。请求主体中包括了要发送给Web服务器的数据,响应主体找那个装载了要返回给客户端的数据。主体中可以包含任何二进制数据,也可以包含文本。
        具体的报文内容在后面详细介绍。

五、连接

1、TCP/IP

        http协议是位于整个数据传输通信的最上层应用层协议,不关注细节,负责通信细节的协议为传输层控制协议(Transmission Control Protocl,TCP)
        TCP特点:1)无差错的数据传输
                        2)按序传输(按照数据发送顺序到达服务器)
                        3)未分段的数据流(任意时刻任何大小将数据发出去)

        英特网是全世界计算机和网络设备最常用的层次化分组交换网络协议集,其隐藏了网络和硬件的特点和弱点,使各类型的计算机和网络都能进行可靠的通信。

        关于TCP/IP的基础介绍,请参考https://blog.csdn.net/vikeyyyy/article/details/80568255

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

        HTTP客户端向服务器发送报文之前,需要用忘记协议(IP)地址和端口号在客户端和服务器之间建立一条TCP/IP连接。而IP和端口则是通过URL来获取。
        http://207.200.83.29:80/index.html  这个URL使用了机器的IP地址207.200.83.29,以及端口号80
        http://www.netscape.com:80/index.html 这个URL使用了文本形式的域名(主机名:IP地址比较人性化的别称)。通过域名服务(Domain Name Service,DNS)机制对主机名进行转换。
        http://www.netscape.com/index.html  这种情况一般默认端口号为80

        下图为浏览器通过http显示服务器中某个简单HTML资源的流程导图


步骤如下:
1)浏览器从URL中解析出服务器主机名;
2)浏览器将主机名转换为服务器的IP地址;
3)浏览器将端口号(如果有)从URL中解析出来;
4)浏览器建立一条与服务器的连接TCP连接通道;
5)浏览器向服务器发送一条http请求报文;
6)服务器向浏览器发送一条http响应报文;
7)结束通信,关闭连接,浏览器显示具体资源;

六、Web结构组件

        web的应用程序,除了浏览器和服务器之外,还有其他几个很重要的组件(简单介绍一下,后面详细介绍)

1、代理

        HTTP代理服务器是Web安全、应用集成以及性能优化的重要组成模块。


2、缓存

        Web缓存(Web Cache)或代理缓存(proxy cache)是一种特殊的HTTP代理服务器,可以将经过代理传送的常用文档复制保存起来。下一个请求同一个文档的客户端就可以共用这个副本提供的服务。
        客户端从缓存下载文件户会比从远程服务器快很多。HTTP定义了很多功能,使得缓存更加高效,并规范了文档的新鲜度和缓存内容的隐私性。

3、网关

        网关是一种特殊的服务器,作为其他服务器的中间实体使用。通常用于将HTTP流量转换成其他的协议,接受请求时就好像自己是资源的源服务器。

4、隧道

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

        常见用途是通过HTTP连接承载加密的安全套接字层(SSL)流量,这样SSL流量就可以穿过只允许Web流量通过的防火墙。

5、Agent代理

        用户Agent代理是代表用户发起HTTP请求的客户端程序。所有发布Web请求的应用程序都是HTTP Agent代理,如Web浏览器。

猜你喜欢

转载自blog.csdn.net/vikeyyyy/article/details/80527784