探索Android软键盘的疑难杂症
深入探讨Android异步精髓Handler
详解Android主流框架不可或缺的基石
站在源码的肩膀上全解Scroller工作机制
Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南
自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理
版权声明
- 本文原创作者:谷哥的小弟
- 作者博客地址:http://blog.csdn.net/lfdfhl
在上一篇博客中,我们已经对Servlet有了基础的简单的了解,在深入认识Servlet之前,我们来一起学习HTTP协议。
HTTP简介
HTTP协议(HyperText Transfer Protocol)又叫作超文本传输协议,它是用于从服务器传输超文本到浏览器的传送协议。HTTP不仅保证计算机正确、高效、快速地传输超文本文档还可确定传输文档中的哪一部分内容优先显示。
HTTP是一个应用层协议,一次HTTP通信由请求和响应构成。客户端向服务器发送一个请求,在该请求中包含:请求的方法、URL、用户信息、协议版本、等等信息。服务器在接收到请求后发对此作出响应并返回一个答复消息,该消息包括:响应的时间、请求成功或失败的标识、协议的版本、回复的内容等等信息。
HTTP的特点
标准的HTTP协议是无连接的,无状态的。无连接指的是:每次连接只处理一个请求。服务器处理完客户的请求并收到客户的应答后即断开连接。无状态指的是:协议对于请求的处理没有记忆能力,也就是说每次请求都是独立的,它的执行结果与之前和之后的请求是无直接关系的
标准HTTP协议既有优点也有缺点:优点在于极大地减轻了服务器的压力,每一次请求不会造成不必要连接占用;缺点在于繁复地建立连接和断开连接,请求会传输大量重复的信息,所以随后出现了Keep-Alive、Cookie、Session在某些程度上弥补了标准HTTP的缺点。
HTTP的请求与响应
我们知道:每一次HTTP的请求都由请求(request)和响应(response)构成,在此对这两部分作进一步的说明。
HTTP的请求
HTTP请求由三部分组成:请求消息行、请求消息头、请求消息体
请求消息行
示例如下:
GET /HelloWeb/test.html HTTP/1.1
请求消息行包含三部分内容:
- 请求方式,比如此处的GET
- 资源URI,比如此处的/HelloWeb/test.html
- 协议及其版本号,比如此处的HTTP/1.1
请求消息头
示例如下:
Host:localhost
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Charset: UTF-8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.6
Cache-Control: max-age=0
Cookie:JSESSIONID=97C4302F3350676F65B5E4409ABA87CF
Referer: http://blog.csdn.net/lfdfhl
Content-Type:application/x-www-form-urlencoded
If-Modified-Since: Wed, 02 Feb 2011 12:04:56 GMT
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36
Connection: keep-alive
Date: Tue, 15 Nov 2017 01:12:31 GMT
请求消息头中内容较多,现将常用和重要的字段介绍如下:
Host:发起请求的主机名及其端口号
Accept:客户端可接收的文档类型。其中,*/*表示可接收任何类型
Accept-Charset: 客户端可接受的字符编码集
Accept-Encoding: 客户端支持的压缩格式
Accept-Language:客户端可接受的语言
Cache-Control:设置请求和响应遵循的缓存机制
Cookie:HTTP请求发送时会把保存在该请求域名下的所有cookie值一起发送至服务器。
Referrer:发起HTTP请求的页面的URL
Content-Type:请求时所传递的内容的类型
Content-Length:请求时所传递的内容的长度
If-Modified-Since:该值与响应消息头的Last-Modified字段相对应。Last-Modified与If-Modified-Since都是用来记录页面的最后修改时间。当客户端访问页面时,服务器会将页面最后修改时间通过Last-Modified由服务器发往客户端,客户端会记录下该值;当客户端再次发起请求时,客户端会通过 If-Modified-Since将此前服务器端发过来的最后修改时间戳发送回去;服务器通过这个时间戳判断客户端的页面是否是最新的,如果不是最新的则返回新的内容,如果是最新的则返回304告诉客户端其本地cache的页面是最新的,于是客户端就可直接从本地加载页面。
User-Agent:表示发出该请求的客户端的相关信息,比如操作系统及版本、CPU类型、浏览器及版本、浏览器渲染引擎、浏览器语言等等
Connection: 表示是否需要持久连接,HTTP 1.1默认进行持久连接。
Date: 请求发送的日期和时间
Range:用于告知服务器只需返回部分内容,故用该Range描述这部分内容的范围;该字段对于断点续传等功能非常实用
其实,从这里可以看出来:在每次请求时,客户端需要告诉服务器:自身支持的字符集,压缩格式,语言;请求的消息内容,长度等等众多信息,从而尽量清楚地表达自身的条件和需求以便服务器做出相应的响应。
请求消息体
username=大泽玛利亚&hobby=摄影
当请求方式是POST方式时可见消息正文,假若是GET方式则请求消息体中无内容
HTTP的响应
HTTP响应由三部分组成:响应消息行、响应消息头、响应消息体
响应消息行
HTTP/1.1 200 OK
响应消息行由三部分组成:
- 协议及其版本号,比如此处的 HTTP/1.1
- 响应状态码,比如此处的200
常用的状态码有:200(正常)、02/307(临时重定向)、304(未修改)表示客户端缓存的版本是最新的,客户端无需到服务器请求、404(找不到)、500(服务器内部错误) - 响应码的描述,比如此处的OK
响应消息头
Accept-Ranges: bytes
Content-Encoding: gzip
Content-Length: 4533
Content-Language: en,zh
Content-Type: text/html
Date: Sun, 06 Sep 2015 07:56:07 GMT
Last-Modified: Fri, 04 Sep 2015 13:37:55 GMT
Server: apache tomcat
Location: http://blog.csdn.net/lfdfhl
Refresh: 5; url=http://www.csdn.net/
Content-Disposition: attachment; filename=test.zip
Set-Cookie: UserID=tom; Max-Age=3600; Version=1
Expires: Thu, 01 Dec 2015 12:20:00 GMT
Cache-Control: no-cache
Pragma: no-cache
Connection: keep-alive
响应消息头中内容较多,现将常用和重要的字段介绍如下:
Accept-Ranges: 表明服务器是否支持指定范围请求及哪种类型的分段请求。假若服务器想告诉浏览器不要使用Range,则返回Accept-Range: none;假若服务器想告诉浏览器可使用以byte为单位的Range的请求,则返回Accept-Range:bytes
Content-Encoding: 服务器的返回内容的压缩编码类型
Content-Length: 服务器的返回内容的的长度
Content-Language: 服务器的返回内容的语言
Content-Type: 服务器的返回内容的类型
Date:服务器发出响应的时间
Last-Modified: 返回的内容的最后修改时间
Server: 服务器的类型
Location:指示被请求的资源的位置,常和请求消息头一起使用完成请求重定向
Refresh:延时跳转到某个页面或者定时刷新本页面
Content-Disposition: 指示客户端下载文件
Set-Cookie: 服务器端发送给客户端的Cookie
Expires: 响应过期的时间
Cache-Control: 指定响应遵循的缓存机制
Pragma: 用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同
Connection: 表示是否需要持久连接,HTTP 1.1默认进行持久连接。
响应消息体
响应消息体中表示响应的的具体内容。比如,响应的内容是网页,那么响应消息体的内容和网页右键”查看网页源代码”所看到的内容一样。
后会有期
在此简单地介绍了HTTP协议,但也不会如此仓促地完结。我们将在后续的博客中结合Servlet对与HTTP紧密相关的Cookie和Session进行详细的学习,再会。