HTTP协议
- 概述
- 名词
- 媒体类型
- URL语法
- HTTP报文组成
- HTTP报文语法
- HTTP请求方法
- HTTP状态码
概述
HTTP(Hypertext transfer protocol)超文本传输协议是Web浏览器,服务器和相关的web应用程序相互通信的基石。HTTP使用的是可靠数据传输协议确保数据在传输过程中不会被损坏或产生混乱。HTTP是一个基于TCP/IP通信协议来传递数据,同时也是一个属于应用层的面向对象的协议。
HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即Web服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。TCP/IP协议是互联网上最流行的应用,虽然HTTP协议并没有规定必须使用TCP/IP协议,只要求其下层协议提供可靠的传输。但大多数HTTP协议仍然使用TCP协议作为其传输层。
名词
- HTTP:(Hypertext transfer protocol)超文本传输协议,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。
- URI:(Uniform Resource Identifier)统一资源标识符,用于定位web上的资源。该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。
- URL:(Uniform Resource Locator)统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。URL是URI的子集。
媒体类型
因特网上有数千种不同的数据类型,HTTP给每种要通过Web传输的对象都打上名为MIME类型(MIME type)的数据格式标签。MIME(Multipurpose Intnet Mail Extension,多用途因特网邮件扩展)。
MIME类型是一种文本标记,表示一种主要对象类型和一个特定的子类型,中间由一条斜杠来分隔:
- HTML格式的文本由 text/html 类型标记。
- ASCII普通文本文档由 text/plain 类型标记。
- JPEG版本的图片为image/jpeg类型。
- GIF格式的图片为image/gif类型。
- Apple的QuickTime电影为video/quicktime类型。
- 微软PowerPoint演示文件为applicatoin/vnd.ms-powerpoint类型。
URL语法
URL提供了一种定位因特网上任意资源的手段,但这些资源可以通过不同的方案(如:HTTP,FTP,SMTP)来访问,因此,URL语法会随方案的不同而有所不同。大多数URL方案都建立在这个由9部分构成的通用格式上:
<scheme:>//<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
常见协议格式(scheme)
-
http: 超文本传输协议,除了没有用户名和密码之外,与通用URL格式相符。默认端口80。
基本格式:
http://<host>:<port>/<path>?<query>#<frag>
示例:
http://www.webserver.com/index.html
http://www.webserver.com:80/index.html -
https:使用了网景的SSL,为HTTP连接提供端到端的加密机制。其他与HTTP语法相同。默认端口443。
基本格式:
https://<host>:<port>/<path>?<query>#<frag>
示例:
https://www.webserver.com/index.html -
mailto:访问的是电子邮件地址
基本格式:
mailto:<RFC-822-addr-spec>
示例:
mailto:123456789@qq.com -
ftp:文件传输协议可以用来从FTP服务器上传或下载文件,并获取FTP服务器上的文件目录内容列表。
基本格式:
ftp://<user>:<password>@<host>:<port>/<path>;<params>
示例:
ftp://anonymous:123456@localhost/files/mp3 -
rtsp,rtspu:RTSP(Real Time Streaming Protocol)实时流传输协议,可以传输实时音视频流媒体资源。rtspu中的u表示它是使用UDP协议来获取资源的。
基本格式
rtsp://<user>:<password>@<host>:<port>/<path>
rtspu://<user>:<password>@<host>:<port>/<path> -
file:访问指定主机上可直接访问的文件。各字段符合通用格式。若省略了主机名,就默认为本地主机。
基本格式:
file://<host>/<path>
示例:
file://docs/python/python.pdf -
news:访问一些特定文章或新闻组。
基本格式:
news:<newsgroup>
news:<news-article-d> -
telnet: 用于访问交互式业务。表示可以通过telnet协议访问的交互式应用程序。
基本格式:
telnet://<user>:<password>@<host>:<port>/
HTTP报文组成
HTTP报文是简单的格式化数据。每条报文都包含一条来自客户端的请求,或者一条来自服务器的响应。他们都由三个部分组成:
- 报文描述起始行(start line);
- 包含属性的首部(header)块;
- 包含数据的主题(body)部分;
起始行和首部就是由行分隔的ASCII文本。报文主题是一个可选数据块,可以包含文本或二进制数据,也可以为空。
HTTP报文语法
说有的HTTP报文都可以分为两类:
- 请求报文(request message),请求报文会向服务器请求一个动作。
- 响应报文(response message),响应报文会将请求结果返回给客户端;
-
请求报文格式:
<method> <request-URL> <version>
<headers>
------注意:这里有空行-----
<entity-body> -
响应报文格式:
<version> <status> <reason-phrase>
<headers>
------注意:这里有空行-----
<entity-body>
HTTP请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法:
- HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
- HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
HTTP状态码
HTTP状态码的英文为HTTP Status Code
常见的HTTP状态码:
- 200 - 请求成功
- 301 - 网页等资源被永久转移到其它URL
- 302 - 网页等资源被临时转移到其它URL
- 404 - 请求的资源(网页等)不存在
- 500 - 内部服务器错误
HTTP状态码分类:
状态码 | 分类描述 |
---|---|
1XX | 信息,服务器收到请求,需要请求者继续执行操作 |
2XX | 成功,操作被成功接收并处理 |
3XX | 重定向,需要进一步的操作以完成请求 |
4XX | 客户端错误,请求包含语法错误或无法完成请求 |
5XX | 服务器错误,服务器在处理请求的过程中发生了错误 |