1 HTTP的定义
定义:超文本传输协议 (HTTP-Hypertext transfer protocol) 是分布式,协作式,超媒体系统应用之间的通信协议。
作用:是万维网(world wide web)交换信息的基础,它允许将超文本标记语言(HTML) 文档从 Web 服务器传送到 Web浏览器。HTTP是应用层协议,在Internet上建立在TCP协议之上。
HTTP协议包括HTTP URL、HTTP请求、HTTP响应和HTTP消息。
2 HTTP的特征
l 支持客户/服务器模式
l 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
l 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
l 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
l 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
3 HTTP的版本
HTTP常见的有三种版本:HTTP/1.0、HTTP/1.1、HTTP-NG
在当下的WWW使用的是HTTP/1.1
4 HTTP的工作流程
HTTP/1.1的改进:
u 支持Persistent Connections(持续连接),支持流水线请求
u 支持Host字段
5 HTTP URL
HTTP URL的格式如下:
http://host[“:”port][abs_path]
其中abs_path 是一个URI
Host为Internet主机名或IP地址
Abs_path是URI(Uniform Resource Identifier,统一资源标识符),当它为请求时默认由浏览器给出为”/”形式给出。
输入:www.guet.edu.cn
浏览器自动转换成:http://www.guet.edu.cn/
提示:
URI(包括URL和URN,通用资源名)是个符号结构,指定构成web资源的字符串的各个不同部分。URL为特殊的URI,它包括了查找某个资源足够的信息。
6 HTTP请求
HTTP请求由三部分组成:请求行、请求报头和正文,其中消息报头和请求正文都是可选的。
请求行:
Methor Request-URI HTTP-Version CRLF
e.g. GET /form.html HTTP/1.1 (CRLF)
HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作方式:
HTTP请求的方法(HTTP中方法区分大小写,HTML文档中方法名不区分大小写)
方法 | 作用 |
GET | 请求获取由Request—URI所标识的资源 |
POST | 在Request—URI所标识的资源后附加新德资源 |
HEAD | 请求获取由Request—URI所标识的资源的响应消息报头 |
PUT | 请求服务器存储一个资源,并用Request—URI作为其标识 |
DELETE | 请求服务器删除由Request—URI所标识的资源I |
TRACE | 请求服务器回送收到的请求信息,主要用于测试或诊断 |
CONNECT | 保留将来使用 |
OPTIONS | 请求查询服务器的性能,或查询与资源相关的选项和需求 |
在HTTP方法中是区分大小写的,但是在HTML文档中是不区分大小写的
常用的HTTP方法:HEAD、GET、POST
GET:在浏览器中输入地址栏中输入地址访问网页的时候,使用的是GET方法
POST:向目的服务器发送数据,常用于提交表单
HEAD:与GET的方法类似,但是只能返回请求消息报头。通常用于测试URL的有效性等。
请求正文:eg:user=zhangzz&password=123456
7 HTTP响应
三个部分:状态行、消息报头、响应正文
状态行:HTTP-Version Status-Code Reason-Phrase CRLF
Eg:HTTP/1.1 200 OK (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 | 服务器当前不能够处理客户端的请求,一段时间后可能恢复 |
8 HTTP消息
消息报头 - 空行(CRLF) - 消息正文
消息报头:普通报头、请求报头、响应包头、实体报头
每个报头域组成: 名字+”:”+空格+值组成,消息报头域的名字与大小写无关的。
普通报头中,有少数报头域应用于所有的请求和响应消息,但并不用于传输的实体,这些报头域只用于传输的消息。
常用普通报头:
报头名 | 说明 |
Cache—Control | 指定缓存指令,分为请求或响应时的缓存指令,缓存指令是单向的,C 例如JSP代码:response.setHeader(“Cache—Control”,”no—cache”); |
Date | 消息产生的日期和时间,客户端只有在发送消息中包含了消息正文的时候,才发送Date报头域,服务器端响应总是包含Date报头域。 |
Connection | 允许发送者指定连接的选项,服务器响应后的状态 |
Pragmatic | 用于包含特定实现(implementation—specific)的指令,Pragma:no—cache与HTTP1.1版的Cache—Control:no—cache作用相同 |
常用请求报头域
报头名 | 作用 |
Accept | 指定客户端接受哪些类型的信息,例如:Accept:image/gif |
Accept—Charset | 指定客户端接受的字符集,例如:Accept—Charset:gb2312 |
Accept—Encoding | 指定客户端可接受的内容编码,例如:Accept—Encoding:gzip |
Accept—Language | 指定客户端可接受的一种自然语言,例如:Accept—Language:zh—cn |
Authorization | 用于证明客户端有权查看某个资源 |
Host | 指定被请求资源的Internet主机和端口号,它是必须得报头域,例如:Host:www.baidu.com |
User—Agent | 允许客户端将它的操作系统、浏览器和其它属性告诉服务器。它不是必须的。 |
常用响应报头:允许服务器传递不能放在状态行中附加响应信息,以及服务器信息和对Request—URI所标识的资源进行下一步访问的信息
报头名 | 作用 |
Location | 用于重定向接受者到一个新德位置。如当域名更换时。 |
Server | 包含服务器用来处理请求的软件信息。与User—Agent相对应。例如:Server:Apache—Coyote/1.1 |
WWW—Authenticate | 必须被包含在401(未授权的)响应消息中,与Authorization请求报头域是相关的。当客户端收到401响应时,如果要求服务器对其进行验证,客户端就发送一个包含了Authorization报头域的请求, 例如:WWW—Authorization:Basic realm=”Basic Auth Test!” |
常用实体报头:请求和响应消息都可以传送一个实体,实体由实体报头域和实体正文组成,实体正文常务请求消息的请求正文或响应消息的响应正文。实体报头域和实体正文并不一定在一起发送。
实体报头定义了实体正文和请求所标识的资源的元信息(元信息指描述其他信息的信息)
实体报头名 | 作用 |
Content—Encoding | 媒体类型的修饰符,常用于文档压缩方法,例如:Content—Encoding:gzip |
Content—Language | 实体报头域描述了资源所用的自然语言, |
Content—Length | 指明实体正文的长度,没有包括实体报头的长度 |
Content—Type | 指明发送给接收者的实体正文的媒体类型 例如:Content—Type:text/html:charset=GB2312 |
Last—Modified | 指示资源最后的修改日期和时间 |
Expires | 给出响应过期的日期和时间,非法的日期时间格式(包括零)当做已经过期。 例如:Expires:Thu.15 Sep 2005 16:00:00 GMT |
9 HTTPS - 安全超文本传输协议
HTTPS(Secure Hypertext Transfer Protocol)--安全超文本传输协议
它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的完全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。
10 FAQ
F:如何在浏览器上启用/关闭HTTP 1.1
Q:Internet 选项 - 高级 - 使用HTTP 1.1
F:显示友好HTTP错误信息
Q:Internet 选项 - 高级 - 使用HTTP 1.1
实习:利用telnet观察HTTP协议的通讯过程
实验目的及原理:
利用MS的telnet工具,通过手动输入http请求信息的方式,向服务器发出请求,服务器接收、解释和接受请求后,会返回一个响应,该响应会在telnet窗口上显示出来,从而从感性上加深对http协议的通讯过程的认识。
实验步骤:
1、打开telnet
1.1 打开telnet
运行-->cmd-->telnet
1.2 打开telnet回显功能
set localecho
2、连接服务器并发送请求
2.1 open www.guet.edu.cn 80 //注意端口号不能省略
HEAD /index.asp HTTP/1.0
Host:www.guet.edu.cn
/*我们可以变换请求方法,请求桂林电子主页内容,输入消息如下*/
open www.guet.edu.cn 80
GET /index.asp HTTP/1.0 //请求资源的内容
Host:www.guet.edu.cn
2.2 open www.sina.com.cn 80 //在命令提示符号下直接输入telnet www.sina.com.cn 80
HEAD /index.asp HTTP/1.0
Host:www.sina.com.cn
3 实验结果:
3.1 请求信息2.1得到的响应是:
HTTP/1.1 200 OK //请求成功
Server: Microsoft-IIS/5.0 //web服务器
Date: Thu,08 Mar 200707:17:51 GMT
Connection: Keep-Alive
Content-Length: 23330
Content-Type: text/html
Expries: Thu,08 Mar 2007 07:16:51 GMT
Set-Cookie: ASPSESSIONIDQAQBQQQB=BEJCDGKADEDJKLKKAJEOIMMH; path=/
Cache-control: private
//资源内容省略
3.2 请求信息2.2得到的响应是:
HTTP/1.0 404 Not Found //请求失败
Date: Thu, 08 Mar 2007 07:50:50 GMT
Server: Apache/2.0.54 <Unix>
Last-Modified: Thu, 30 Nov 2006 11:35:41 GMT
ETag: "6277a-415-e7c76980"
Accept-Ranges: bytes
X-Powered-By: mod_xlayout_jh/0.0.1vhs.markII.remix
Vary: Accept-Encoding
Content-Type: text/html
X-Cache: MISS from zjm152-78.sina.com.cn
Via: 1.0 zjm152-78.sina.com.cn:80<squid/2.6.STABLES-20061207>
X-Cache: MISS from th-143.sina.com.cn
Connection: close
失去了跟主机的连接
按任意键继续...
===========================================
转载请注明来自http://blog.csdn.net/dongyu1009/article/details/8873199