超文本传输协议

目录·概述
·请求信息
·请求方法
·安全方法
·协议版本号
·状态行
·持久连接
·安全超文本协议
·例子




超文本传输协议(HTTP,HyperText Transfer Protocol)是因特网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。



概述

HTTP的发展是万维网协会和Internet工作小组合作的结果,在一系列的RFC发布了最终的版本,其中最著名的是RFC 2616。在RFC 2616中定义了HTTP 1.1这个今天普遍使用的版本。
HTTP是一个用于在客户端和服务器间请求和应答的协议(TCP)。一个HTTP的客户端,诸如一个web浏览器,通过建立一个到远程主机特殊端口(默认端口为80)的连接,初始化一个请求。一个HTTP服务器通过监听特殊端口等待客户端发送一个请求序列, 就像“GET / HTTP/1.1”(用来请求网页服务器的默认页面),有选择的接收像email一样的MIME消息,此消息中包含了大量用来描述请求各个方面的信息头序列,响应一个选择的保留数据主体。接收到一个请求序列后(如果要的话,还有消息),服务器会发回一个回复,如“200 OK”,同时发回一个它本报的消息,此消息的主体可能是被请求的文件、错误消息或者其他的一些信息。
HTTP 并不局限于使用网络协议(TCP/IP)及其相关支持层,尽管这是它在互联网上最为流行的应用程序。 事实上,HTTP可以“在任何其他互联网协议之上执行,或者在其他网络上执行。HTTP 只认可可靠的传输,任何能够提供这种保证的协议都可以被其使用。
HTTP不同于其他基于TCP的协议,诸如FTP。在HTTP中,一旦一个特殊的请求(或者请求的相关序列)完成,连接通常被中断。这个设计使得对于当前页面有规则连接到另一台服务器页面的万维网来说,HTTP是完美的。当持久连接的缺乏成为保持用户状态的必需选择的方法时,对网页设计者来说,会偶然产生一些问题。而大部分这些方法包括了对“cookies”的使用。
这里有一个HTTP的安全版本称为HTTPS,HTTPS支持任何的加密算法,只要此加密算法能被页面双方所理解。
HTTP(和HTTPS)由统一资源定位器或者简称URLs定位。创造这种地址定位的语法为了HTML的链接。

请求信息

发出的请求信息包括以下几个

请求行,例如GET /images/logo.gif HTTP/1.1,表示从/images 目录下请求logo.gif 这个文件。
标题,例如Accept-Language: en
空行
可选信息

请求行和标题必须以<CR><LF> 作为结尾(也就是,回车然后换行)。空行内必须只有<CR><LF>而无其他空格。在HTTP/1.1 协议中,所有的标题除主机外都是可选的。

请求方法

HTTP 定义了八种方法来指示确认的资源执行所需的行为。
HEAD

要求与GET请求相应的回复一样的应答,但是没有回应的内容。这对找回写在回应标题中的
meta-infomation有帮助,不需要传输整个内容。

GET

请求某个特殊的资源,是目前网上最通用的方法。不应该用于一些会造成副作用的操作中
(在网络软件中使用是一个常见的错误用法)。参看下个目录的安全方法。

POST

向确定的资源提交需要处理的数据。这些数据包括在请求的内容里。这可以造成新资源的产生和更新已有资源。

PUT

上传特定资源

DELETE

删除特定资源

TRACE

返回接收的请求,客户端可因此察看在请求过程中什么中间服务器被加进来或者有所改变。

OPTIONS

返回服务器支持的HTTP方法,这可以用来检查网络服务器的功能。

CONNECT

将请求连接转换成透明的TCP/IP通道,通常通过非加密的HTTP代理利用SSL-加密通讯(HTTPS)。


安全方法

有些方法(比如HEAD, GET, OPTIONS, and TRACE) 被定义为安全方法,这些方法针对的只是信息的返回,并不会改变服务器的状态(换句话说就是这些方法不会产生副作用)。不安全的方法(例如POST, PUT and DELETE) 应该用特殊的方式向用户展示,通常是按钮而不是链接,这样就可以使用户意识到可能要负的责任(例如一个按钮带来的资金交易。)

幂等方法和网络应用软件

协议版本号

超文本传输协议已经演化出了很多版本,它们中的大部分都是向下兼容的。客户端在请求的开始告诉服务器它采用的协议版本号,而后者则在响应中采用相同或者更早的协议版本。

0.9
已过时。只接受 GET 一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持 POST 方法,所以客户端无法向服务器传递太多信息。

HTTP/1.0
这是第一个在通讯中指定版本号的 HTTP 协议版本,至今仍被广泛采用,特别是在代理服务器中。

HTTP/1.1
当前版本。持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。
此版相较于 HTTP/1.0 协议的区别主要体现在:

缓存处理
带宽及网络连接的管理
安全性及完整性


状态行


参见:HTTP状态码

所有 HTTP 响应的第一行都是状态行, 依次是当前 HTTP 版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
状态代码的第一个数字代表当前响应的类型:

1xx 消息——请求已被服务器接收,继续处理
2xx 成功——请求已成功被服务器接收、理解、并接受
3xx 重定向——需要后续操作才能完成这一请求
4xx 请求错误——请求含有词法错误或者无法被执行
5xx 服务器错误——服务器在处理某个正确请求时发生错误

虽然 RFC 2616 中已经推荐了描述状态的短语,例如"200 OK","404 Not Found",但是 WEB 开发者仍然能够自行决定采用何种短语,用以显示本地化的状态描述或者自定义信息。

持久连接


安全超文本协议


例子

下面是一个HTTP客户端与服务器之间会话的例子,运行于www.google.com,端口80
客户端请求:

GET / HTTP/1.1
Host:www.google.com

(紧跟着一个换行,通过敲入回车实现)
服务器应答:

HTTP/1.1 200 OK
Content-Length: 3059
Server: GWS/2.0
Date: Sat, 11 Jan 2003 02:44:04 GMT
Content-Type: text/html
Cache-control: private
Set-Cookie: PREF=ID=73d4aef52e57bae9:TM=1042253044:LM=1042253044:S=SMCc_HRPCQiqy
X9j; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Connection: keep-alive

(紧跟着一个空行,并且由HTML格式的文本组成了Google的主页)
在HTTP1.0中,客户端发送一个请求至服务器,服务器发送一个应答至客户端。之后,连接将被释放。另一方面,HTTP1.1支持持久连接。这使得客户端可以发送请求并且接收应答,然后迅速的发送另一个请求和接收另一个应答。因为多个额外的请求,TCP连接并没有被释放,而每个请求中关于TCP的负载相对较少。同时,在得到上一个请求的应答之前发送多个请求(通常是两个)也成为可能。这个技术被称为“流水线”。





Copyright © 1999-2024 C114 All Rights Reserved | 联系我们 | 沪ICP备12002291号-4