HTTP 协议的相关文档
HTTP 协议 (Hypertext Transfer Protocol, 超文本传输协议 ) 是网络应用层的协议,建立在 TCP/IP 协议的基础上。 HTTP 协议使用可靠的 TCP 连接,默认端口是 80 。 HTTP 的第一个版本是 HTTP/0.9, 后来发展到了 HTTP/1.0, 现在是 HTTP/1.1 。 HTTP1.1 协议对应的 RFC 文档为 RFC2068 。
HTTP 协议基于客户 / 服务器模式,客户端主动发出 HTTP 请求,服务器接收 HTTP 请求,返回 HTTP 响应结果。 HTTP 协议对 HTTP 强求以及响应的格式做出了明确的规定。
HTTP 协议简介:
当用户打开浏览器,输入一个 URL 地址,就能接收到远程 HTTP 服务器发送过来的网页。浏览器就是最常见的 HTTP 客户程序。 HTTP 客户程序必须先发出一个 HTTP 请求,然后才能接收到来自 HTTP 服务器的响应。
HTTP 客户程序与 HTTP 服务器的通信过程
HTTP 协议简介:
HTTP 客户程序和 HTTP 服务器分别由不同的软件开发商提供的,它们都可以用任意的编程语言编写。用 VC 编写的 HTTP 客户程序能否与用 Java 编写的 HTTP 服务器顺利通信呢?答案是肯定的。
HTTP 协议严格规定了 HTTP 请求和 HTTP 响应的数据格式,只要 HTTP 服务器与客户程序都遵守 HTTP 协议,就能彼此看得懂对方发送的消息。
HTTP 请求格式:
HTTP 协议规定, HTTP 请求由三部分构成,分别是:
请求方法、 URI 、 HTTP 协议的版本
请求头 (Request Header)
请求正文 (Request Content)
下面是一个 HTTP 请求的例子:
POST /hello.html HTTP/1.1
Accept: image/gif, image/jpeg, */*
Referer: http://localhost/login.htm
Accept-Language: en, zh-cn; q=0.5
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0)
Host: localhost
Content-Length: 43
Connection: Keep-Alive
Cache-Control: no-cache
username=weiqin&password=1234&submit=submit
1. 请求方式、 URI 、 HTTP 协议的版本
HTTP 请求的第一行包括请求方式、 URI 和协议版本这三项内容,以空格分开:
POST /hello.html HTTP/1.1
在以上代码中, “ POST ”标示请求方式,“ /hello.html ”标示 URI ,“ HTTP/1.1 ” , 标示 HTTP 协议的版本。
根据 HTTP 协议, HTTP 请求可以使用多种请求方式,主要包括:
GET
POST
PUT
DELETE
请求头 (Request Header)
请求头包含许多有关客户端环境和请求的正文信息。例如,请求头可以声明浏览器的类型,所用的语言,请求正文的类型,以及请求正文的长度。
Accept: image/gif, image/jpeg, */*
Referer: http://localhost/login.htm
Accept-Language: en,zh-cn;q=0.5 // 浏览器所用的语言
Content-Type: application/x-www-form-urlencoded // 正文类型
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) // 浏览器类型
Host: localhost // 远程主机
Content-Length: 43 // 正文长度
Connection: Keep-Alive
Cache-Control: no-cache
请求正文( Request Content )
n HTTP 协议规定,请求头和请求正文之间必须以空行分割(即只有 CRLF 符号的行),这个空行非常重要,它表示请求头已经结束,接下来是请求正文。请求正文中可以包含客户以 POST 方式提交的表单数据:
username=weiqin&password=1234
n 在以上 HTTP 请求例子中,请求正文只有一行内容。在实际应用中, HTTP 请求的正文可以包含更多的内容。
HTTP 响应格式
和 HTTP 请求相似, HTTP 响应也由三部分构成,分别是:
HTTP 协议的版本、状态代码、描述
响应头( Response Header )
响应正文( Response Content )
下面是一个 HTTP 响应的例子
HTTP/1.1 200 OK
Server: nio/1.1
Content-type: text/html; charset=GBK
Content-length: 102
<html>
<head>
<title>helloapp</title>
</head>
<body >
<h1>hello</h1>
</body>
</html>
1 . HTTP 协议的版本、状态代码、描述
n HTTP 响应的第一行包括服务器使用的 HTTP 协议的版本、状态代码,以及对状态代码的描述,这三项内容之间以空格分割。在本例中,使用 HTTP1.1 协议,状态代码为 200 ,该状态代码表示服务器已经成功的处理了客户端发出的请求:
HTTP/1.1 200 OK
n 状态代码是一个 3 位整数,以 1 、 2 、 3 、 4 或 5 开头:
n 1xx :信息提示,表示临时的响应。
n 2xx :响应成功,表明服务器成功的接收了客户端请求。
n 3xx :重定向。
n 4xx :客户端错误,表明客户端可能有问题。
n 5xx :服务器错误,表明服务器由于遇到某种错误而不能响应客户请求。
2 .响应头( Response Header )
n 响应头也和请求头一样包含许多有用的信息,例如服务器类型、正文类型和正文长度等:
Server: nio/1.1 // 服务器类型
Content-type: text/html; charset=GBK // 正文类型
Content-length: 102 // 正文长度
3 .响应正文( Response Content )
n 响应正文就是服务器返回的具体的文档,最常见的是 HTML 网页:
<html>
<head>
<title>helloapp</title>
</head>
<body >
<h1>hello</h1>
</body>
</html>
n HTTP 响应头与响应正文之间也必须用空行分隔。
HTTP1.0 的会话方式:
浏览器与 WEB 服务器的连接过程是短暂的,每次连接只处理一个请求和响应,对每一个页面的访问,浏览器与 WEB 服务器都要建立一次单独的连接。
浏览器到 WEB 服务器之间的所有通讯都是完全独立分开的请求和响应。
支持代理 .
浏览器访问多图网页的过程。
HTTP1.1 与 HTTP1.0 的比较
HTTP 消息:
响应消息的实体内容就是网页文件的内容,也就是在浏览器中使用查看源文件的方式所看到的内容。
一个使用 GET 方式的请求信息中不能包含实体内容,只有使用 POST 、 PUT 和 DELETE 方式的请求消息中才可以包含实体内容。
对于 HTTP1.1 来说,如果 HTTP 消息中包含实体内容,且没有采用 chuncked 传输编码方式,那么消息头部分必须包含内容长度的字段,否则,客户和服务器程序就无法知道实体内容到何时结束。
在 HTTP 协议中,还可以使用简单的请求消息和响应消息,它们都是没有消息头部分,简单的请求消息只能用于 GET 方式,且请求行中不用指定 HTTP 版本好,对于简单的请求消息,服务器返回简单的响应消息,简单的相应消息中只返回实体内容。
HTTP 消息头:
使用消息头,可以实现 HTTP 客户器与服务器之间的条件请求和应答,消息头相当于服务器和浏览器之间的一些暗号指令。
每个消息头包含一个头字段的名称,然后依次是冒号,空格,值,回车和换行符。
消息头字段名是不区分大小写,但习惯上将每个单词的第一个字母大写。
整个消息头部分中的各行消息头可按任何顺序排列。
消息头又可分为通用消息头,请求头,响应头,实体头等四类。
许多请求头字段都允许客户端在值部分指定多个可接受的选项,多个选项