HTTP协议详解

超文本传输协议(HyperText Transfer Protocol,HTTP)是互联网上应用最为广泛的一种网络协议。所有的WWW服务器都基于该协议。HTTP设计最初的目的是为了提供一种发布WEB页面和接收WEB页面的方法。

本章向读者介绍TCP、HTTP协议、HTTP资源定位、HTTP请求及响应头详细信息、HTTP状态码及MIME类型详解等。

1.1 TCP协议与HTTP协议

1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),为HTTP超文本传输协议标准架构的发展奠定了根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。

很多读者对TCP协议与HTTP协议存在疑问,这两者有什么区别呢,从应用领域来说,TCP协议主要用于数据传输控制,而HTTP协议主要用于应用层面的数据交互,本质上两者没有可比性。

HTTP协议属于应用层协议,是建立在TCP协议基础之上,HTTP协议以客户端请求和服务器端应答为标准,浏览器通常称为客户端,而WEB服务器称之为服务器端。客户端打开任意一个端口向服务端的指定端口(默认为80)发起HTTP请求,首先会发起TCP三次握手,TCP三次握手的目的是建立可靠的数据连接通道,TCP三次握手通道建立完毕,进行HTTP数据交互,如图9-1(a)、9-1(b)所示:

                                                (a) HTTP与TCP关系结构图

                                                (b) HTTP客户端与服务器

当客户端请求的数据接收完毕后,HTTP服务器端会断开TCP连接,整个HTTP连接过程非常短。HTTP连接也称为无状态的连接,无状态连接是指客户端每次向服务器发起HTTP请求时,每次请求都会建立一个新的HTTP连接,而不是在一个HTTP请求基础上进行所有数据的交互。

1.2 资源定位标识符

发起HTTP请求的内容资源由统一资源标示符(Uniform Resource Identifiers,URI)来标识,关于资源定位及标识有三种:URI、URN、URL,三种资源定位详解如下:

q 统一资源标识符(uniform resource identifier,URI),用来唯一标识一个资源;

q 统一资源定位器(uniform resource locator,URL),是一种具体的URI。URL可以用来标识一个资源,而且访问或者获取该资源;

q 统一资源命名(uniform resource name,URN),通过名字来标识或识别资源。

如图9-2所示,可以直观区分URI、URN、URL的区别:

                                URI、URN、URL关联与区别

三种资源标识,其中URL资源标识方式使用最为广泛,完整的URL标识格式如下:

protocol://host[:port]/path/.../[?query-string][#anchor]

protocol 基于某种协议,常见协议:http、https、ftp、rsync等;

host 服务器的IP地址或者域名;

port 服务器的端口号,如果是HTTP 80端口,默认可以省略。

path 访问资源在服务器的路径;

query-string 传递给服务器的参数及字符串;

anchor- 锚定结束;

Http URL案例演示如下:

京峰教育授课方式-京峰教育官网

protocol: http协议;

host: www.jfedu.net;

path: /newindex/plus/list.php

Query String: tid=2

Anchor: jfedu

1.3 HTTP与端口通信

HTTP WEB服务器默认在本机会监听80端口,不仅HTTP会开启监听端口,其实每个软件程序在Linux系统中运行,会以进程的方式启动,程序就会启动并监听本地接口的端口,为什么会引入端口这个概念呢?

端口是TCP/IP协议中应用层进程与传输层协议实体间的通信接口,端口是操作系统可分配的一种资源,应用程序通过系统调用与某个端口绑定后,传输层传给该端口的数据会被该进程接收,相应进程发给传输层的数据都通过该端口输出。

在网络通信过程中,需要唯一识别通信两端设备的端点,就是使用端口识别运行于某主机中的应用程序。如果没有引入端口,则只能通过PID进程号进行识别,而PID进程号是系统动态分配的,不同的系统会使用不同的进程标识符,应用程序在运行之前没有明确的进程号,如果需要运行后再广播进程号则很难保证通信的顺利进行。

而引入端口后,就可以利用端口号识别应用程序,同时通过固定端口号来识别和使用某些公共服务,例如如HTTP默认使用80端口,而FTP使用21、20端口,MYSQL则使用3306端口。

使用端口还有一个原因是随着计算机网络技术的发展,物理机器上的硬件接口已不能满足网络通信的要求,而TCP/IP协议模型作为网络通信的标准就解决了这个通信难题。

TCP/IP协议中引入了一种被称为套接字(Socket)的应用程序接口。基于Socket接口技术,一台计算机就可以与任何一台具有Socket接口的计算机进行通信,而监听的端口在服务器端也称之为Socket接口。

1.4 HTTP Request与Response详解

客户端浏览器向WEB服务器发起Request, Web服务器接到Request后进行处理,会生成相应的Response信息返给浏览器,客户端浏览器收到服务器返回的Response信息,会对信息进行解析处理,最终用户看到浏览器展示WEB服务器的网页内容。

客户端发起Request,Request消息分为三个部分,分别包括:Request line、Request header、Body,如图9-3所示:

                                        HTTP Request Message组成

Unix/Linux系统中执行CURL -v命令可以打印访问WEB服务器的Request及Response详细处理流程,如图9-4所示:

curl -v http://192.168.111.131/index.html

                Request及Response请求回应流程

(1) Request信息详解如表9-1所示:

GET /index.html HTTP/1.1

请求行

Request Message

User-Agent: curl/7.19.7

Host: 192.168.111.131

Accept: */*

……

请求头部

>

空行

>

请求Body

第一部分:请求行,指定请求类型,访问的资源及使用的HTTP协议版本。

GET表示Request请求类型为GET;/index.html表示访问的资源;HTTP/1.1表示协议版本。

第二部分:请求头部,请求行下一行起,指定服务器要使用的附加信息;

User-Agent 表示用户使用的代理软件,常指浏览器;HOST表示请求的目的主机。

第三部分:空行,请求头部后面的空行表示请求头发送完毕。

第四部分:请求数据也叫Body,可以添加任意的数据,Get请求的Body内容默认为空。

                Request请求头详解

(2) Response信息详解如表9-2所示:

HTTP/1.1 200 OK

响应行

Response Message

Server: nginx/1.10.1

Date: Thu, 11 May 2017

Content-Type: text/html

……

响应头部

>

空行

<h1>www.jf1.com Pages</h1>

响应Body

第一部分:响应状态行,包括HTTP协议版本号、状态码、状态消息。

HTTP/1.1表示HTTP协议版本号;200表示返回状态码;OK表示状态消息。

第二部分:消息报头,响应头部附加信息。

Date表示生成响应的日期和时间,Content-Type表示指定MIME类型的HTML(text/html),编码类型是UTF-8,记录文件资源的Last-Modified时间。

第三部分:空行,表示消息报头响应完毕。

第四部分:响应正文,服务器返回给客户端的文本信息。

                        Request请求头详解

(3) Request请求方法根据请求的资源不同,有如下请求方法:

GET方法,向特定的资源发出请求,获取服务器端数据;

POST方法,向WEB服务器提交数据进行处理请求,常指提交新数据;

PUT方法,向WEB服务器提交上传最新内容,常指更新数据;

DELETE方法,请求删除Request-URL所标识的服务器资源;

TRACE方法,回显服务器收到的请求,主要用于测试或诊断;

CONNECT方法,HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器;

OPTIONS方法,返回服务器针对特定资源所支持的HTTP请求方法;

HEAD方法,HEAD方法跟GET方法相同,只不过服务器响应时不会返回消息体。

1.5 HTTP 1.0/1.1协议区别

HTTP 协议定义服务器端和客户端之间文件传输的沟通方式HTTP1.0运行方式,如图9-5所示:

                                        HTTP1.0 客户端、服务器传输模式

q 基于HTTP协议的客户/服务器模式的信息交换过程,如图所示,它分四个过程,建立连接、发送请求信息、发送响应信息、关闭连接;

q 浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接;

q 浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应。

HTTP1.1运行方式,如图9-6所示:

                                        HTTP1.1 客户端、服务器传输模式

q 在一个TCP连接上可以传送多个HTTP请求和响应;

q 多个请求和响应过程可以重叠;

q 增加了更多的请求头和响应头,比如Host、If-Unmodified-Since请求头等。

1.6 HTTP状态码详解

HTTP状态码(HTTP Status Code)是用来表示WEB服务器HTTP Response状态的3位数字代码,常见的状态码范围分类:

100-199 用于指定客户端应相应的某些动作;

200-299 用于表示请求成功;

300-399 已移动的文件且被包含在定位头信息中指定新的地址信息;

400-499 用于指出客户端的错误;

500-599 用于支持服务器错误。

HTTP协议Response常用状态码详解表9-3所示:

HTTP状态码

状态码英文含义

状态码中文含义

100

Continue

HTTP/1.1新增状态码,表示继续,客户端继续请求HTTP服务器;

101

Switching Protocols

服务器根据客户端的请求切换协议,切换到HTTP的新版本协议;

200

OK

HTTP请求完成,常用于GET、POST请求中;

301

Moved Permanently

永久移动,请求的资源已被永久的移动到新URI;

302

Found

临时移动,资源临时被移动,客户端应继续使用原有URI;

304

Not Modified

文件未修改,请求的资源未修改,服务器返回此状态码时,常用于缓存;

400

Bad Request

客户端请求的语法错误,服务器无法解析或者访问;

401

Unauthorized

请求要求用户的身份认证;

402

Payment Required

此状态码保留,为以后使用;

403

Forbidden

服务器理解请求客户端的请求,但是拒绝执行此请求;

404

Not Found

服务器没有该资源,请求的文件找不到;

405

Method Not Allowed

客户端请求中的方法被禁止;

406

Not Acceptable

服务器无法根据客户端请求的内容特性完成请求;

499

Client has closed connection

服务器端处理的时间过长;

500

Internal Server Error

服务器内部错误,无法完成请求;

502

Bad Gateway

服务器返回错误代码或者代理服务器错误的网关;

503

Service Unavailable

服务器无法响应客户端请求,或者后端服务器异常;

504

Gateway Time-out

网关超时或者代理服务器超时;

505

HTTP Version not supported

服务器不支持请求的HTTP协议的版本,无法完成处理。

                                HTTP常用状态码

1.7 HTTP MIME 类型支持

浏览器接收到WEB服务器的Response信息,浏览器会进行解析,在解析页面之前,浏览器必须启动本地相应的应用程序来处理获取到的文件类型。

基于多用途互联网邮件扩展类型 (Multipurpose Internet Mail Extensions,MIME),可以明确某种文件在客户端用某种应用程序来打开,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开,设计之初是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。然而当它被HTTP协议支持之后,它使得HTTP传输的不仅是普通的文本,可以支持更多文件类型、多媒体音、视频等。

在HTTP协议中,HTTP Response消息,MIME类型被定义在Content-Type header中,例如:Content-Type: text/html,表示默认指定该文件为html类型,在浏览器端会以HTML格式来处理。

在最早的HTTP协议中,并没有附加的数据类型信息,所有传送的数据都被客户程序解释为超文本标记语言HTML文档,为了支持多媒体数据类型,新版HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据类型,如表9-4所示:

Mime-Types(MIME类型)

Dateiendung (扩展名)

Bedeutung

application/msexcel

*.xls *.xla

Microsoft Excel Dateien

application/mshelp

*.hlp *.chm

Microsoft Windows Hilfe Dateien

application/mspowerpoint

*.ppt *.ppz *.pps *.pot

Microsoft Powerpoint Dateien

application/msword

*.doc *.dot

Microsoft Word Dateien

application/octet-stream

*.exe

exe

application/pdf

*.pdf

Adobe PDF-Dateien

application/post******

*.ai *.eps *.ps

Adobe Post******-Dateien

application/rtf

*.rtf

Microsoft RTF-Dateien

application/x-httpd-php

*.php *.phtml

PHP-Dateien

application/x-java******

*.js

serverseitige Java******-Dateien

application/x-shockwave-flash

*.swf *.cab

Flash Shockwave-Dateien

application/zip

*.zip

ZIP-Archivdateien

audio/basic

*.au *.snd

Sound-Dateien

audio/mpeg

*.mp3

MPEG-Dateien

audio/x-midi

*.mid *.midi

MIDI-Dateien

audio/x-mpeg

*.mp2

MPEG-Dateien

audio/x-wav

*.wav

Wav-Dateien

image/gif

*.gif

GIF-Dateien

image/jpeg

*.jpeg *.jpg *.jpe

JPEG-Dateien

image/x-windowdump

*.xwd

X-Windows Dump

text/css

*.css

CSS Stylesheet-Dateien

text/html

*.htm *.html *.shtml

-Dateien

text/java******

*.js

Java******-Dateien

text/plain

*.txt

reine Textdateien

video/mpeg

*.mpeg *.mpg *.mpe

MPEG-Dateien

video/vnd.rn-realvideo

*.rmvb

realplay-Dateien

video/quicktime

*.qt *.mov

Quicktime-Dateien

video/vnd.vivo

*viv *.vivo

Vivo-Dateien

                                HTTP MIME类型详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值