http 协议
1.URL
URL 即统一资源定位符(Uniform Resource Locator),用来唯一地标识万维网中的某一个文档。URL 由协议、主机和端口(默认为 80)以及文件名三部分构成,如:
2.HTTP 具体工作流程
前面已经讲过,HTTP 的工作原理就是一个请求 - 响应交互模型,那当用户从浏览器输入网址到浏览器呈现给用户内容之间的过程到底发生了什么?下面举例来说明:
在用户点击 URL 为 http://www.sxtyu.com/index.html 的链接后,浏览器和 web 服务器执行了以下动作:
- 浏览器分析超链接中的 URL
- 浏览器向 DNS 请求解析 http://www.sxtyu.com 的 IP 地址
- DNS 将解析出来的 IP 地址 202.2.16.21 返回浏览器
- 浏览器与服务器建立 TCP 链接(80 端口)
- 浏览器请求文档:GET/index.html
- 服务器给出响应,将文档 index.html 发送给浏览器
- 释放 TCP 链接
- 浏览器显示 index.html 中的内容
3.HTTP 头信息
HTTP 头信息分为了请求头信息和响应头信息,其中,请求头只出现在 HTTP 请求中,请求报头允许客户端向服务端传递请求的附加信息和客户端自身信息;响应头是服务器根据请求向客户端发送的 HTTP 头。
HTTP 的请求头主要包含的参数信息有:
- Host 请求报头域主要用于指定被请求资源的 Internet 主机和端口。
- User-Agent 请求报头域允许客户端将它的操作系统、浏览器和其他属性告诉服务器。
- Referer 包含一个 URL,代表当前访问 URL 的上一个 URL,也就是说,用户是从什么地方来到本页面。当前请求的原始 URL 地址。
- Cookie 是非常重要的请求头,常用来表示请求者的身份等。
- Accept 这个消息头用于告诉服务器客户端愿意接受那些内容,比如图像类,办公文档格式等等。
HTTP 的响应头主要包含的参数信息有:
- Allow:服务器支持哪些请求方法(如 GET、POST 等)。
- Content-Encoding:文档的编码(Encode)方法。只有在解码之后才可以得到 Content-Type 头指定的内容类型。利用 gzip 压缩文档能够显著地减少 HTML 文档的下载时间。
- Content-Length:表示内容长度。
- Content-Type:表示后面的文档属于什么 MIME 类型。Servlet 默认为 text/plain,但通常需要显式地指定为 text/html。
- Date:当前的 GMT 时间。
- Expires:应该在什么时候认为文档已经过期,从而不再缓存它?
- Last-Modified:文档的最后改动时间。客户可以通过 If-Modified-Since 请求头提供一个日期,该请求将被视为一个条件 GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个 304(Not Modified)状态。
- Location:表示客户应当到哪里去提取文档。Location 通常不是直接设置的,而是通过 HttpServletResponse 的 sendRedirect 方法,该方法同时设置状态代码为 302。
- Refresh:表示浏览器应该在多少时间之后刷新文档,以秒计。注意 Refresh 头不属于 HTTP 1.1 正式规范的一部分,而是一个扩展,但 Netscape 和 IE 都支持它。
- Server:服务器名字。Servlet 一般不设置这个值,而是由 Web 服务器自己设置。
- Set-Cookie:设置和页面关联的 Cookie。
- WWW-Authenticate:客户应该在 Authorization 头中提供什么类型的授权信息?在包含 401(Unauthorized)状态行的应答中这个头是必需的。
4.HTTP 状态码
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含 HTTP 状态码的信息头(server header)用以响应浏览器的请求。
HTTP 状态码的英文为 HTTP Status Code,一般有五种状态码:
1xx:信息提示,表示请求已被成功接收,继续处理。
2xx:请求被成功提交。
3xx:客户端被重定向到其他资源。
4xx:客户端错误状态码,格式错误或者不存在资源。
5xx:描述服务器内部错误。
常见的状态码描述如下:
200:客户端请求成功,是最常见的状态。
302:重定向。
404:请求资源不存在,是最常见的状态。
400:客户端请求有语法错误,不能被服务器所理解。
401:请求未经授权。
403:服务器收到请求,但是拒绝提供服务。
500:服务器内部错误,是最常见的状态。
503:服务器当前不能处理客户端的请求。
5.HTTP 会话
WEB 应用中的会话是指一个客户端浏览器与 WEB 服务器之间连续发生的一系列请求和响应过程。
WEB 应用的会话状态是指 WEB 服务器与浏览器在会话过程中产生的状态信息,借助会话状态,WEB 服务器能够把属于同一会话中的一系列的请求和响应过程关联起来。
6.Cookie 技术
Cookie 是一种在客户端保持 HTTP 状态信息的技术,它好比商场发放的优惠卡。
Cookie 是在浏览器访问 WEB 服务器的某个资源时,由 WEB 服务器在 HTTP 响应消息头中附带传送给浏览器的一片数据,WEB 服务器传送给各个客户端浏览器的数据是可以各不相同的。
一旦 WEB 浏览器保存了某个 Cookie,那么它在以后每次访问该 WEB 服务器时,都应在 HTTP 请求头中将这个 Cookie 回传给 WEB 服务器。
WEB 服务器通过在 HTTP 响应消息中增加 Set-Cookie 响应头字段将 Cookie 信息发送给浏览器,浏览器则通过在 HTTP 请求消息中增加 Cookie 请求头字段将 Cookie 回传给 WEB 服务器。
一个 Cookie 只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。
一个 WEB 站点可以给一个 WEB 浏览器发送多个 Cookie,一个 WEB 浏览器也可以存储多个 WEB 站点提供的 Cookie。
浏览器一般只允许存放 300 个 Cookie,每个站点最多存放 20 个 Cookie,每个 Cookie 的大小限制为 4KB。
Cookie 的传送过程示意图: