HTTP协议内容:HTTP URL、HTTP请求、HTTP响应和HTTP消息。
HTTP超文本传输协议,是应用层协议。
HTTP是一个基于请求/响应模式的、无状态的协议。
浏览器与服务器通信过程:客户发起连接;客户发送请求;服务器响应请求;服务器关闭连接。
HTTP1.1版是一个持续连接,支持流水线请求
HTTP URL格式:http://host[“:”port][abs_path]
Host为Internet主机名或IP地址
Abs_path是URI(Uniform Resource Identifier,统一资源标识符),当它为请求时默认由浏览器给出为”/”形式给出。
提示:
URI(包括URL和URN,通用资源名)是个符号结构,指定构成web资源的字符串的各个不同部分。URL为特殊的URI,它包括了查找某个资源足够的信息。
HTTP请求组成:请求行,消息报头,请求正文组成,其中消息报头和请求正文都是可选的。
请求行格式:MethodRequest—URI HTTP—Version CRLF //注意CRLF表示回车换行
例如:GET /form.html HTTP/1.1(CRLF)
例如:HEAD/index.html HTTP/1.1
HTTP请求的方法(HTTP中方法区分大小写,HTML文档中方法名不区分大小写)
方法 | 作用 |
GET | 请求获取由Request—URI所标识的资源 |
POST | 在Request—URI所标识的资源后附加新德资源 |
HEAD | 请求获取由Request—URI所标识的资源的响应消息报头 |
PUT | 请求服务器存储一个资源,并用Request—URI作为其标识 |
DELETE | 请求服务器删除由Request—URI所标识的资源I |
TRACE | 请求服务器回送收到的请求信息,主要用于测试或诊断 |
CONNECT | 保留将来使用 |
OPTIONS | 请求查询服务器的性能,或查询与资源相关的选项和需求 |
当我们在浏览器的地址栏中直接输入网址访问时,浏览器就采用GET方法向服务器获取资源。
POST方法用于向目的服务器发出请求,请求服务器接受附在请求后边的数据,表单提交时用得较多。在消息报头后的两个回车换行后为提交的数据
HTTP响应,在服务器接收和解释后会返回一个HTTP响应消息。它由状态行,消息报头,响应正文组成。其中消息报头和消息正文都是可选的。
状态行格式:HTTP—Version Status—Code Reason—Phrase CRLF // 状态代码和状态描述
例如:HTTP/1.1200 ok CRLF //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 | 服务器当前不能够处理客户端的请求,一段时间后可能恢复 |
HTTP消息报头包括请求报头、响应报头、普通报头和实体报头。
每个报头域组成:名字+”:”+空格+值组成,消息报头域的名字与大小写无关的。
普通报头中,有少数报头域应用于所有的请求和响应消息,但并不用于传输的实体,这些报头域只用于传输的消息。
常用请求报头域
报头名 | 作用 |
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!” |
常用普通报头:
报头名 | 说明 |
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作用相同 |
常用实体报头:请求和响应消息都可以传送一个实体,实体由实体报头域和实体正文组成,实体正文常务请求消息的请求正文或响应消息的响应正文。实体报头域和实体正文并不一定在一起发送。
实体报头定义了实体正文和请求所标识的资源的元信息(元信息指描述其他信息的信息)
实体报头名 | 作用 |
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 |