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,其中著名的RFC2616定义了HTTP 1.1 。

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

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

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

 

9.2 资源定位标识符

HTTP请求的内容资源由统一资源标识符(uniform resource identifiers,URI)来标识,关于资源定位及标识有三种:URI、URN、URL,三种资源定位详解如下:

  • 统一资源标识符(uniform resource identifier,URI),用来唯一标识一个资源;
  • 统一资源定位符(uniform resource locator,URL),是一种具体的URI,URL可以用来标识一个资源,而且可以访问或者获取该资源;
  • 统一资源命名(uniform resource name,URN),通过名字来标识识别资源。

 

URI、URN、URL关联与区别

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

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

参数详解如下:

  • protocol:基于某种协议,常见协议有HTTP,HTTPS,FTP,RSYNC等。
  • host:服务器的IP地址或者域名。
  • port:服务器的端口号,如果是HTTP 80端口,默认可以省略。
  • path:访问资源在服务器的路径。
  • query-srting:传递给服务器的参数及字符串。
  • anchor:锚定结束。

 

HTTP URL案例演示如下:

http://www.zeyunanke.com

参数对应关系如下:

  • protocol:HTTP协议
  • host:www.zeyunanke.com
  • path:无
  • query-srting:无
  • anchor:yunan

 

9.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接口。

 

9.4 HTTP request与response详解

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

客户端发起request,request消息分为3奔赴,分别包括request line,request header,body,如下图所示。

HTTP request message组成

UNIX/Linux系统中执行curl -v命令可以打印访问Web服务器的request及response详细处理流程,命令如下,流程如下图。

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

request及response请求回应流程

(1)request信息详解如下表所示。

GET/index.html HTTP/1.1

请求行

request message

Server: Apache/2.4.6 (CentOS)

Date: Wed, 16 Dec 2020 06:49:25 GMT

Content-Type: text/html; charset=UTF-8

...

响应头部

>

空行

<h1>www.zeyunanke.com</h1>

响应body

说明:

  • 第一部分:相应状态行,包括HTTP协议版本号,状态码,状态消息。HTTP/1.1表示HTTP协议版本号,200表示返回状态码,OK表示状态消息。
  • 第二部分:消息包头,响应头部附加信息。Date表示生成响应的日期和时间;Content-Type表示指定MIME类型的HTML(text/html),编码类型是UTF-8,记录文件资源的Last-Modified时间。
  • 第三部分:空行,表示消息报头相应完毕。
  • 第四部分:响应正文,服务器返回给客户端的文本信息。

 

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

  • GET方法:向特定的资源发出请求,获取服务器端数据。
  • POST方法:向Web服务器提交数据进行处理请求,常指提交新数据。
  • PUT方法:向Web服务器提交上传最新内容,常指更新数据。
  • DELETE方法:请求删除request-URL所标识的服务器资源。
  • TRACE方法:回显服务器收到的请求,主要用于测试或诊断。
  • CONNECT方法:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
  • OPTIONS方法:返回服务器针对特定资源所支持的HTTP请求方法。
  • HRAD方法:HRAD方法根GET方法相同,只不过服务器响应时不会返回消息体。

 

1.5 HTTP 1.0/1.1协议区别

HTTP协议定义服务器端和客户端之间文件传输的沟通方式,HTTP 1.0运行方式,如下图所示。

说明如下:

  • 基于HTTP协议的客户/服务器模式的信息交换过程,如下图所示,它分为4个过程,即建立连接,发送请求信息,发送响应信息,关闭连接。
  • 浏览器与Web服务器的连接过程是短暂的,每次连接只处理一个请求和相应。对每一个页面的访问,浏览器与Web服务器都要建立一次单独的连接。
  • 浏览器到Web服务器之间的所有通信都是完全独立分开的请求和响应。

 

HTTP 1.1运行方式,如下图所示。

说明如下:

  • 在一个TCP连接上可以传送多个HTTP请求和相应;
  • 多个请求和响应过程可以重叠;
  • 增加了更多的请求头和响应头,比如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常用状态码详解如下图所示。

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 gatewy

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

503

service unavailable

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

504

gateway time-out

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

505

HTTP version not supported

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

 

1.7 HTTP MIME类型支持

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

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

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

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

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值