Accept-Charset:浏览器可接受的字符集

User-Agent:告诉HTTP服务器,客户端使用的操作系统和浏览器的名称和版本

Content-Type:例如:Content-Type: application/x-www-form-urlencoded。

Connection:例如:

Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。HTTP 1.1默认进行持久连接。利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。

Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭,当客户端再次发送Request,需要重新建立TCP连接。

Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面

Host:(发送请求时,该头域是必需的)主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的(http1.1协议种必须包含)

例如: 我们在浏览器中输入:http://www.guet.edu.cn/index.html,浏览器发送的请求消息中,就会包含Host请求头域:Host:http://www.guet.edu.cn,此处使用缺省端口号80,若指定了端口号,则变成:Host:指定端口号

Cookie:最重要的请求头之一, 将cookie的值发送给HTTP服务器

Content-Length:表示请求消息正文的长度

Authorization:授权信息

8.2  HTTP常见的响应头


Allow:服务器支持哪些请求方法(如GET、POST等)

Date:表示消息发送的时间,时间的描述格式由rfc822定义。

Expires:指明应该在什么时候认为文档已经过期,从而不再缓存它,重新从服务器获取,会更新缓存

P3P:用于跨域设置Cookie, 这样可以解决iframe跨域访问cookie的问题

Set-Cookie:非常重要的header, 用于把cookie发送到客户端浏览器,每一个写入cookie都会生成一个Set-Cookie。

例如: Set-Cookie: sc=4c31523a; path=/; domain=.acookie.taobao.com

ETag:和If-None-Match 配合使用。

Last-Modified:用于指示资源的最后修改日期和时间。Last-Modified也可用setDateHeader方法来设置。

Content-Type:WEB服务器告诉浏览器自己响应的对象的类型和字符集,

例如:Content-Type: text/html;charset=utf-8

Content-Length:指明实体正文的长度,以字节方式存储的十进制数字来表示

Content-Encoding:WEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象

Content-Range:用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度

Content-Language:WEB服务器告诉浏览器自己响应的对象所用的自然语言

Connection:

例如:Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。

Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭,当客户端再次发送Request,需要重新建立TCP连接。

Location:用于重定向一个新的位置,包含新的URL地址

Refresh:表示浏览器应该在多少时间之后刷新文档,以秒计

摘抄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436.html

九 HTTP缓存机制

==============

WEB缓存(cache)位于Web服务器和客户端之间。

缓存会根据请求保存输出内容的副本,例如html页面,图片,文件,当下一个请求来到的时候:如果是相同的URL,缓存直接使用副本响应访问请求,而不是向源服务器再次发送请求。

HTTP协议定义了相关的消息头来使WEB缓存尽可能好的工作

9.1 缓存的优点


减少相应延迟:因为请求从缓存服务器(离客户端更近)而不是源服务器被相应,这个过程耗时更少,让web服务器看上去相应更快。

减少网络带宽消耗:当副本被重用时会减低客户端的带宽消耗;客户可以节省带宽费用,控制带宽的需求的增长并更易于管理。

9.2 http报文中跟缓存有关的头部字段


为了对以下能用到的一些头部信息能有个大致了解,介绍以下与缓存有关的头部字段

1. 通用首部字段(就是请求报文和响应报文都能用上的字段)

2. 请求首部字段

3. 响应首部字段

4. 实体首部字段

9.3 缓存方式


缓存实际上就是根据一些策略规则来决定是否使用浏览器中的一些存储的信息,这个缓存信息可以认为是浏览器中有存在的一个缓存数据库(也可以称为本地缓存)

根据是否需要重新向服务器发起请求来分类,可分为两大类(强制缓存、对比缓存

强制类型不需要向服务器发起请求,对比缓存需要向服务器发起请求

9.3.1 强制缓存

已经具有缓存数据的时候,并且缓存时间未过期的话,使用强制缓存

http1.0的强制缓存是有两个字段来进行,Pragma(表示禁用缓存)和Expires(启用缓存和定义缓存时间)。同时使用的话,Pragma优先级会较高,但是响应报文中Expires所定义的缓存时间是相对服务器上的时间而言的,如果客户端上的时间跟服务器上的时间不一致_(特别是用户修改了自己电脑的系统时间)_,那缓存时间可能就没啥意义了,为了解决这个问题,http1.1使用的是新字段:Cache-Control(重点掌握,以此为基准)

注意:为了做http协议的向下兼容,你还是可以看到很多网站依旧会带上这两个字段,实际上是可抛弃的两个字段了

Cache-Control

使用方法: “Cache-Control”:“cache-directive”

作为请求头部的时候,cache-directive的可选值有

作为响应首部时,cache-directive 的可选值有:

实际重点关注五个值private、public、no-cache、max-age,no-store,默认为private

private:客户端可以缓存

public:客户端和代理服务器都可缓存(前端的同学,可以认为public和private是一样的)

max-age=xxx:缓存的内容将在 xxx 秒后失效

no-cache:需要使用对比缓存来验证缓存数据

no-store:所有内容都不会缓存,强制缓存,对比缓存都不会触发

举个例子:

图中Cache-Control仅指定了max-age,所以默认为private,缓存时间为31536000秒(365天)

也就是说,在365天内再次请求这条数据,都会直接获取缓存数据库中的数据,直接使用

9.3.2 对比缓存

对比缓存:即需要进行比较判断是否可以使用缓存。浏览器第一次请求数据时,服务器会将缓存标识与数据一起返回给客户端,客户端将二者备份至缓存数据库中。再次请求数据时,客户端将备份的缓存标识发送给服务器,服务器根据缓存标识进行判断,判断成功后,返回304状态码,通知客户端比较成功,可以使用缓存数据

对比缓存解决的问题:缓存时间过期,但是服务器却没有更新这个资源,此时客户端再次请求服务器把这个资源重新发过来的话,很浪费带宽和时间。对比缓存就是让服务器知道客户端现在存有的缓存文件,其实跟自己所有的文件是一致的,让客户端直接使用自己缓存的即可,提高了缓存的复用率

对比缓存是根据请求头部和响应头部的缓存标识进行判断的

对比缓存使用的缓存标识字段

Last-Modified  /  If-Modified-Since

Last-Modified:

服务器在响应请求时,告诉浏览器资源的最后修改时间。

If-Modified-Since:

再次请求服务器时,通过此字段通知服务器上次请求时,服务器返回的资源最后修改时间。

服务器收到请求后发现有头If-Modified-Since 则与被请求资源的最后修改时间进行比对。

若资源的最后修改时间大于If-Modified-Since,说明资源又被改动过,则响应整片资源内容,返回状态码200;

若资源的最后修改时间小于或等于If-Modified-Since,说明资源无新修改,则响应HTTP 304,告知浏览器继续使用所保存的cache。

Last-Modified 说好却也不是特别好,因为如果在服务器上,一个资源被修改了,但其实际内容根本没发生改变,会因为Last-Modified时间匹配不上而返回了整个实体给客户端(即使客户端缓存里有个一模一样的资源)__

ETag / If-None-Match(优先级高于Last-Modified  /  If-Modified-Since)

为了解决上述Last-Modified可能存在的不准确的问题,Http1.1还推出了 ETag 实体首部字段。

Etag可以理解成一个服务器用加密算法计算出来的唯一标识符,用来标识一个资源的,在客户端第一次请求的时候服务器会随着数据一起传给客户端,客户端会保留该 ETag 字段,并在下一次请求时将其一并带过去给服务器。服务器只需要比较客户端传来的ETag跟自己服务器上该资源的ETag是否一致,就能很好地判断资源相对客户端而言是否被修改过了

Etag:

服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器决定)。

If-None-Match:

再次请求服务器时,通过此字段通知服务器客户段缓存数据的唯一标识。

服务器收到请求后发现有头If-None-Match 则与被请求资源的唯一标识进行比对,

不同,说明资源又被改动过,则响应整片资源内容,返回状态码200;

相同,说明资源无新修改,则响应HTTP 304,告知浏览器继续使用所保存的cache。

注意:如果同时存在两对字段,需要都通过才能使用缓存

总结

对于强制缓存,服务器通知浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行比较缓存策略。

对于比较缓存,将缓存信息中的Etag和Last-Modified通过请求发送给服务器,由服务器校验,返回304状态码时,浏览器直接使用缓存。

浏览器第一次请求:

浏览器再次请求时:

摘抄于:http://www.cnblogs.com/vajoy/p/5341664.html、http://www.cnblogs.com/chenqf/p/6386163.html

十 解决HTTP无状态的问题

==================

1 《大厂前端面试题解析+Web核心总结学习笔记+企业项目实战源码+最新高清讲解视频》无偿开源 徽信搜索公众号【编程进阶路】 0.1 通过cookies保存状态信息


cookies实际上是一个保存在客户端上的,网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密),Cookie就是[服务器](()暂存放在你的电脑里的资料(.txt格式的文本文件),通过在[HTTP](()传输中的状态好让服务器用来辨认你的计算机。当你在浏览网站的时候,[Web](()服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择都记录下来。

通过Cookies,服务器就可以清楚的知道请求2和请求1来自同一个客户端。

10.2 通过session保存状态信息


Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存

Session的实现方式:

1、使用Cookie来实现

服务器给每个Session分配一个唯一的JSESSIONID,并通过Cookie发送给客户端。

当客户端发起新的请求的时候,将在Cookie头中携带这个JSESSIONID。这样服务器能够找到这个客户端对应的Session。

2、使用URL回写来实现

URL回写是指服务器在发送给浏览器页面的所有链接中都携带JSESSIONID的参数,这样客户端点击任何一个链接都会把JSESSIONID带会服务器。如果直接在浏览器输入服务端资源的url来请求该资源,那么Session是匹配不到的。

Tomcat对Session的实现,是一开始同时使用Cookie和URL回写机制,如果发现客户端支持Cookie,就继续使用Cookie,停止使用URL回写。如果发现Cookie被禁用,就一直使用URL回写。jsp开发处理到Session的时候,对页面中的链接记得使用response.encodeURL() 。

10.3、通过表单变量保持状态


除了Cookies之外,还可以使用表单变量来保持状态,比如Asp.net就通过一个叫ViewState的Input=“hidden”的框来保持状态,比如:

这个原理和Cookies大同小异,只是每次请求和响应所附带的信息变成了表单变量。

10.4、通过QueryString保持状态


QueryString通过将信息保存在所请求地址的末尾来向服务器传送信息,通常和表单结合使用,一个典型的QueryString比如:www.xxx.com/xxx.aspx?var1=value&var2=value2

注意:这里说一点自己的见解,保持状态我感觉是服务器对某个状态进行标识,这样子其实是很像session机制的,具体看下面

十一 cookies与session

==================

11.1 含义


cookie机制

Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies 。

具体来说cookie机制采用的是在客户端保持状态的方案。它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持。cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力。

正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript也可以生成cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。

cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。(故也有内存cookie和硬盘cookie之分)

而session机制采用的是一种在服务器端保持状态的解决方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的。而session提供了方便管理全局变量的方式

session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器。

就安全性来说:当你访问一个使用session 的站点,同时在自己机子上建立一个cookie,建议在服务器端的session机制更安全些,因为它不会任意读取客户存储的信息

session机制


session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。

保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。

经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。

11.2 作用


都是可以进行保持状态的一种机制

11.3 区别


11.3.1 存取方式的不同

cookie只能存储ASCII字符串

session可以存储任意类型的数据

11.3.2 隐私策略的不同

Cookie存储在客户端阅读器中,对客户端是可见的,客户端的一些程序可能会窥探、复制以至修正Cookie中的内容。而Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险。

假如选用Cookie,比较好的方法是,敏感的信息如账号密码等尽量不要写到Cookie中。最好是像Google、Baidu那样将Cookie信息加密,提交到服务器后再进行解密,保证Cookie中的信息只要本人能读得懂。而假如选择Session就省事多了,反正是放在服务器上,Session里任何隐私都能够有效的保护

11.3.3 有效期上的不同

使用过Google的人都晓得,假如登录过Google,则Google的登录信息长期有效。用户不用每次访问都重新登录,Google会持久地记载该用户的登录信息。要到达这种效果,运用Cookie会是比较好的选择。只需要设置Cookie的过期时间属性为一个很大很大的数字。

由于Session依赖于名为JSESSIONID的Cookie,而Cookie JSESSIONID的过期时间默许为–1,只需关闭了阅读器该Session就会失效,因而Session不能完成信息永世有效的效果。运用URL地址重写也不能完成。而且假如设置Session的超时时间过长,服务器累计的Session就会越多,越容易招致内存溢出

11.3.4 服务器压力不同

Session是保管在服务器端的,每个用户都会产生一个Session。假如并发访问的用户十分多,会产生十分多的Session,耗费大量的内存。因而像Google、Baidu、Sina这样并发访问量极高的网站,是不太可能运用Session来追踪客户会话的。

而Cookie保管在客户端,不占用服务器资源。假如并发阅读的用户十分多,Cookie是很好的选择。关于Google、Baidu、Sina来说,Cookie或许是唯一的选择。

11.3.5  浏览器支持的不同

Cookie是需要客户端浏览器支持的。假如客户端禁用了Cookie,或者不支持Cookie,则会话跟踪会失效。关于WAP上的应用,常规的Cookie就派不上用场了。

假如客户端浏览器不支持Cookie,需要运用Session以及URL地址重写。需要注意的是一切的用到Session程序的URL都要进行URL地址重写,否则Session会话跟踪还会失效。关于WAP应用来说,Session+URL地址重写或许是它唯一的选择。

假如客户端支持Cookie,则Cookie既能够设为本浏览器窗口以及子窗口内有效(把过期时间设为–1),也能够设为一切阅读器窗口内有效(把过期时间设为某个大于0的整数)。但Session只能在本阅读器窗口以及其子窗口内有效。假如两个浏览器窗口互不相干,它们将运用两个不同的Session。(IE8下不同窗口Session相干)

11.3.6 跨域支持上的不同

Cookie支持跨域名访问,例如将domain属性设置为“.biaodianfu.com”,则以“.biaodianfu.com”为后缀的一切域名均能够访问该Cookie。跨域名Cookie如今被普遍用在网络中,例如Google、Baidu、Sina等。而Session则不会支持跨域名访问。Session仅在他所在的域名内有效。

仅运用Cookie或者仅运用Session可能完成不了理想的效果。这时应该尝试一下同时运用Cookie与Session。Cookie与Session的搭配运用在实践项目中会完成很多意想不到的效果

11.4 联系


客户第一次发送请求给服务器,此时服务器产生一个唯一的sessionID,并返回给客户端(通过cookie),保存于客户端的内存中,并与一个浏览器窗口对应着,由于HTTP协议的特性,这一次连接就断开了。

以后此客户端再发送请求给服务器的时候,就会在请求request中携带cookie,由于cookie中有sessionID,所以服务器就知道这是刚才那个客户端。

也就是说cookie可以存储sessionid的一种标识。

摘抄来自于:http://blog.csdn.net/weixin_37196194/article/details/55806366

web前端之浏览器篇——http协议知识汇总相关推荐

  1. web前端研发工具篇

    web前端研发工具篇 一.常见前端开发IDE 1.Visual Studio Code 2.hbuilder 3.sublime text3 4.WebStorm 5.Atom 6.Dreamweav ...

  2. web前端关于浏览器兼容性

    web前端关于浏览器兼容性 所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况.在大多数情况下,我们的需求是,无论用户用什么浏览器来查看我们的网站或者登 ...

  3. css就近原则_「Web前端开发进阶篇」CSS优先级

    所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序.既然样式有优先级,那么就会有一个规则来约定这个优先级,而这个"规则"就是重点. [引言] 讲解完这篇CSS优先级的文章 ...

  4. 新人学习web前端必须要知道的基础知识,让你轻松入门

    Web前端开发是由网页制作演变而来的,主要由HTML.CSS.JavaScript三大要素组成.专业的Web前端开发入门知识也一定会包含这些内容,今天我就给大家简单介绍一下. HTML 超文本标记语言 ...

  5. web前端基础-HTML篇

    目录 web前端介绍 网站开发的概述 (1)文本 (2)图像 (3)超链接 (4)表单 静态网页 动态网页 HTML的基本概念 超文本传输协议 统一资源定位符 超文本标记语言 HTML基本格式 (1) ...

  6. Web前端主要学什么?这些知识要掌握

    Web前端主要学什么?是很多初学Web前端学员都会问到的问题,毕竟近些年来Web开发变化巨大,从简单网页脚本开发语言到开始染指后端服务器开发各种库插件多如牛毛,几乎无所不能.下面,小千就分享给大家We ...

  7. Web前端进阶之JavaScript模块化编程知识

    JavaScript是前端三要素之一,也是很多初学Web前端的人遭遇的第一条拦路虎.很多同学表示JavaScript涵盖的知识点太多太复杂.应用也是五花八门完全摸不着头脑.但只要我们一点一点由基础到进 ...

  8. web前端开发浏览器兼容性 - 持续更新

    浏览器兼容性问题又被称为网页或网站兼容性问题:不同浏览器内核及所支持的html等网页语言标准不同,不同客户端环境(如分辨率不同)造成实际显示效果未能达到预期理想效果 首先我们来看一下目前市面上常见的一 ...

  9. web前端面试--浏览器兼容性问题

    web前端面试 本人是一个web前端开发工程师,主要是vue框架,整理了一些面试题,今后也会一直更新,有好题目的同学欢迎评论区分享 ;-) web面试题专栏:点击此处 文章目录 web前端面试 前言 ...

最新文章

  1. 内存不够用还要速度快,终于找到可以基于 File 的 Cache 了
  2. C++/C--字符串分割函数 --strtok()
  3. QQ动态头像和动态主页
  4. html table导出到Excel中,走后台保存文件,js并调用另保存
  5. easypr4android,车牌识别系统EasyPR的批量识别功能测试界面
  6. (附源码)springboot电子阅览室app 毕业设计 016514
  7. IAR 设置程序下载地址
  8. LabVIEW编程LabVIEW开发 控制NI USB-6225例程与相关资料
  9. mysql统计出每个姓氏的人数_Python 之 MySql 每日一练 130——同名同性学生名单,并统计人数...
  10. fatal: unable to access ‘https://github.com/xxxxx/xxx.git/‘: OpenSSL SSL_read: Connection was reset,
  11. 阿里天池大数据竞赛(一)用ODPS提取特征
  12. 基础操作案例:ArcGIS PRO基础教程(二)
  13. 什么是动态 SQL
  14. Code_Aster comm命令文件结构与说明(by Yang 2017.3.30)
  15. Java中保留两位小数,和kotlin保留两位小数
  16. 给一个IP地址,如何划分为几个子网?
  17. Android 性能优化五大误区和两大疑点!
  18. matlab循环语句详解
  19. 一场AMA讲透比原链BaaS平台Bystack
  20. abaqus梁模型仿真图文详细步骤

热门文章

  1. c语言期末设计作业答案,C语言程序设计期末考试题(含答案).doc
  2. 分数比较:比较两个分数的大小
  3. bowtie2序列比对
  4. IDEA使用Git很慢的问题
  5. python安装cvxpy的完整方法,以及缺失GLPK_MI的错误解决(windows10)
  6. 该怎么处理废旧手机?
  7. 前端实验六——英汉字典
  8. centos 定时删除文件_Centos定时启动和清除任务
  9. Java实现数组的倒序输出
  10. 003-自定义注解实现数据校验