浅谈HTTP协议

来源:互联网 发布:淘宝龙纹鲤30块 编辑:程序博客网 时间:2024/04/30 14:14

Http超文本传输协议

Http是应用层协议,是一个基于请求/响应模式的,无状态的协议。

Http使用的是可靠的基于连接的数据传输协议TCP协议。

HTTP1.1版本中,给出了一个“持续连接”的机制,并将其作为HTTP1.1中建立连接的缺省行为。通过这种连接,客户端可以连续发送多个请求,而不用等待每个响应的到来。

 

一、浏览器与服务器通信的过程:

 

二、资源

平时上网所看到的大多数是Web资源。这些资源都寄存在Web服务器上。当我们访问所需资源时,Web服务器会给我们提供。资源包括静态资源(文档、静态页面、音频等)、需要生产内容的软件程序。

1、媒体类型

在众多web资源中,它们有不同的数据类型。HTTP会给每种要通过web传输的资源对象定义一个MIME类型的标签。MIME类型是一种文本标记。表示一种主要的对象类型和一个特定的子类型。中间由一条斜杠来分割。

常见的MIME类型(通用型):

超文本标记语言文本 .html text/html

xml文档 .xml text/xml

XHTML文档 .xhtml application/xhtml+xml

普通文本 .txt text/plain

AVI文件 .avi video/x-msvideo

GZIP文件 .gz application/x-gzip

TAR文件 .tar application/x-tar

任意的二进制数据 application/octet-stream

2、URI

每一个web服务器资源都有一个名字,这个名字叫“资源标识符”。URI有两种形式:URL、URN

 

URL:统一资源定位符,也成为网页地址。

URL的格式由下列三部分组成:

第一部分是协议(或称为服务方式);

第二部分是存有该资源的主机IP地址(有时也包括端口号);

第三部分是主机资源的具体地址。如目录和文件名等。

第一部分和第二部分之间用“://”符号隔开,第二部分和第三部分用“/”符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略。

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

格式:

–http://host[: port] [abs_path]

–其中http表示要通过HTTP协议来定位网络资源。

–Host表示合法的Internet主机域名或IP地址(以点分

十进制格式表示)

–Port用于指定一个端口号,拥有被请求资源的服务器

主机监听该端口的TCP连接。如果port是空,则使用缺

省的端口80。

–abs_path指定请求资源的URI(UniformResource

Identifier,统一资源标识符),如果URL中没有给出

abs_path,那么当它作为请求URI时,必须以“/”的形

式给出。通常这个工作浏览器就帮我们完成了

 

URN:统一资源名称。唯一标识一个实体的标识符。但是不能给出实体的位置。系统可以先在本地寻找一个实体,在它试着在Web上找到该实体之前。它也允许Web位置改变,然而这个实体却还是能够被找到。URN 可以提供一种机制,用于查找和检索定义特定命名空间的架构文件。尽管普通的 URL 可以提供类似的功能,但是在这方面,URN 更加强大并且更容易管理,因为 URN 可以引用多个 URL。与 URL不同,URN 与地址无关。URN 和 URL 都属于 URI。URN在web中主要应用是下拉菜单的制作。使用URN时下拉菜单的易扩展性将会得到很大的提高。

 

三、事务

一个HTTP事务是有一个web客户端的请求和得到一个web服务器端响应组成的。这种通信是通过一种叫作“http报文”的数据块进行传输的。

1、方法

每一种请求HTTP请求报文都包含一种方法。这个方法指示了服务器要执行什么动作(获取页面、运行网关程序、删除文件等)。

 

四种常见的HTTP方法:

1)head向服务器索要与get请求一致的响应,只是响应体不会被返回。这个方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。

2)get向特定的资源发出请求。【注意:get方法不应被用于产生“副作用”的操作中,例如在webapp中,其中一个原因是get可能会被网络蜘蛛等随意访问。】

3)post向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。Post请求可能会导致新的资源的建立和/或已有资源的修改。

4)put向指定资源位置上传其最新内容。

5)delete请求服务器删除Request-URI所标识的资源。

 

2、状态码

每一个HTTP响应报文都会带回一个响应状态码。也就是反应此次请求的结果状态。反应请求是否成功,或者要执行其他动作。常见的状态码有200,404,505等。

 

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

应用程序完成一项任务时通常会发布多个HTTP 事务。比如,Web 浏览器会发布一系列HTTP 事务来获取并显示一个包含了丰富图片的Web 页面。浏览器会执行一个事务来获取描述页面布局的HTML“框架”,然后发布另外的HTTP事务来获取每个嵌入式图片、图像面板、Java小程序等。

 

四、报文

客户端通过发送HTTP请求向服务器请求对资源的访问。

HTTP请求由三部分组成,分别是:请求行,消息报头,请求正文

 

请求行:以一个方法符号开头,后面跟着请求URI和协议的版本,以CRLF作为结尾。请求行以空格分隔。除了作为结尾的CRLF外,不允许出现单独的CR或LF字符,格式如下:Method Request-URI HTTP-Version CRLF。例如:GET/test.html HTTP/1.1 (CRLF)

 

与HTTP请求类似,HTTP响应也是由三个部分组成,分别是:状态行,消息报头,响应正文

 

状态行:由协议版本,数字形式的状态代码,相应的状态描述组成,各元素之间以空格分隔,除了结尾的CRLF(回车换行)序列外,不允许出现CR或LF字符。格式如下:HTTP-Version Status-CodeReason-Phrase CRLF

 

状态代码:由三位数字组成,表示请求是否被理解或被满足,状态描述给出了关于状态代码的简短文本描述。

 

状态代码的第一个数字定义了响应的类别,后面两个数字没有具体的分类。第一个数字有五种可能的取值:

–1xx:指示信息—表示请求已接收,继续处理

–2xx:成功—表示请求已经被成功接收,理解,接受

–3xx:重定向—要完成请求必须进行更进一步的操作

–4xx:客户端错误—请求有语法错误或请求无法实现

–5xx:服务器端错误—服务器未能实现合法的请求

 

状态代码

状态描述

说明

200

OK

客户端请求成功

400

Bad Request

由于客户端请求有语法错误,不能被服务器所理解

401

Unauthorized

请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403

Forbidden

服务器收到请求,但是拒绝提供服务,服务器通常会在响应正文中给出不提供服务的原因

404

Not Found

请求的资源不存在,例如:输入了错误的URL

500

Internal

Server Error

服务器发生不可预期的错误,导致无法完成客户的请求

503

Service

Unavailable

服务器当前不能够处理客户端的请求,在一段时间之后,服务可能会恢复正常


ps:以上参考自圣思园张龙老师的教学视频。

另外可以参考http://blog.csdn.net/csh624366188/article/details/8568621

原创粉丝点击