-
HTTP POST GET 本质区别详解
2010-10-31 21:22:05
一 原理区别
一般在浏览器中输入网址访问资源都是通过GET方式;在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE
URL全称是资源描述符,我们可以这样认 为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查 ,改 ,增 ,删 4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查 询 资源信息,而POST一般用于更新 资源信息(个人认为这是GET和POST的本质区别,也是 协议设计者的本意,其它区别都是具体表现形式的差异 )。
根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等 的 。
1.所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查 询一样,不会修改,增加数据,不会影响资源的状态。
* 注意:这里安全的含义仅仅是指是非修改信息。
2.幂等的意味着对同一URL的多个请求应该返回同样的结果。这里我再解释一下幂等 这个概念:
幂等 (idempotent、idempotence)是一个数学或计算机学概念,常见于抽象代数中。
幂等有以下几种定义:
对于单目运算,如果一个运算对于在范围内的所有的一个数多次进行该运算所得的结果和进行一次该运算所得的结果是一样的,那么我们就称该运算是幂等的。 比如绝对值运算就是一个例子,在实数集中,有abs(a) = abs(abs(a)) 。
对于双目运算,则要求当参与运算的两个值是等值的情况下,如果满足运算结果与参与运算的两个值相等,则称该运算幂等,如求两个数的最大值的函数,有在 在实数集中幂等,即max(x,x) = x 。
看完上述解释后,应该可以理解GET幂等 的含义了。
但在实际应用中,以上2条规定并没有这么严格。引用别人文章的例子:比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操 作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。从根本上说,如果目标是当用户打开一个链接时,他可以确信从自身的角度来看没有改变资源即可。
根据HTTP规范,POST表示可能修改变服务器上的资源的请求 。继续引用上面的例子:还是新闻以网站为例,读者对新闻发表自己的评论应该通过POST实现,因为在评论提交后站点的资源已经不同了,或者说资源被修改 了。
上面大概说了一下HTTP规范中,GET和POST的一些原理性的问题。但在实际的做的时候,很多人却没有按照HTTP规范去做,导致这个问题 的原因有很多,比如说:
1.很多人贪方便,更新资源时用了GET,因为用POST必须要到FORM(表单),这样会麻烦一点。
2.对资源的增,删,改,查操作,其实都可以通过GET/POST完成,不需要用到PUT和DELETE。
3.另外一个是,早期的但是Web MVC框架设计者们并没 有有意识地将URL当作抽象的资源来看待和设计 。还有一个较为严重的问题是传统的Web MVC框架基本上都只支持GET和POST两种HTTP方法,而不支持PUT和DELETE方法。
* 简单解释一下MVC:MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V的实现代码 分离,从而使同一个程序可以使用不同的表现形式。
以上3点典型地描述了老一套的风格(没有严格遵守HTTP规范),随着架构的发展,现在出现REST(Representational State Transfer),一套支持HTTP规范的新风格,这里不多说了,可以参考《RESTful Web Services》。
二 表现形式区别
搞清了两者的原理区别,我们再来看一下他们实际应用中的区别:
为了理解两者在传输过程中的不同,我们先看一下HTTP协议的格式:
HTTP请求:
<request line>
<headers>
<blank line>
<request-body>]
在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之 后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)]。
GET与POST方法实例:
GET /books/?sex=man&name=Professional HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive
POST / HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
(----此处空一行----)
name=Professional%20Ajax&publisher=Wiley
有了以上对HTTP请求的了解和示例,我们再来看两种提交方式的区别:
(1)GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,多个参数用&连接;例 如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。
POST提交:把提交的数据放置在是HTTP包的包体中。上文示例中红色字体标明的就是实际的传输数据
因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变
(2)传输数据的大小:首先声明:HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。
而在实际开发中存在的限制主要有:
GET:特定浏览器和服务器对URL长度有限制,例如 IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系 统的支持。
因此对于GET提交时,传输数据就会受到URL长度的 限制。
POST:由于不是通过URL传值,理论上数据不受 限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。
(3)安全性:
.POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修 改,而这 里安全的含义是真正的Security的含义,比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存, (2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击
(4)Http get,post,soap协议都是在http上运行的
1)get:请求参数是作为一个key/value对的序列(查询字符串)附加到URL上的
查询字符串的长度受到web浏览器和web服务器的限制(如IE最多支持2048个字符),不适合传输大型数据集同时,它很不安全
2)post:请求参数是在http标题的一个不同部分(名为entity body)传输的,这一部分用来传输表单信息,因此必须将Content-type设置为:application/x-www-form- urlencoded。post设计用来支持web窗体上的用户字段,其参数也是作为key/value对传输。
但是:它不支持复杂数据类型,因为post没有定义传输数据结构的语义和规则。
3)soap:是http post的一个专用版本,遵循一种特殊的xml消息格式
Content-type设置为: text/xml 任何数据都可以xml化
三 HTTP响应
1.HTTP响应格式:
<status line>
<headers>
<blank line>
[<response-body>]
在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。
HTTP响应实例:
HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122
<html>
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>
2.最常用的状态码有:
◆200 (OK): 找到了该资源,并且一切正常。
◆304 (NOT MODIFIED): 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。
◆401 (UNAUTHORIZED): 客户端无权访问该资源。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。
◆403 (FORBIDDEN): 客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。
◆404 (NOT FOUND): 在指定的位置不存在所申请的资源。
四 完整示例:
例子:
HTTP GET
发送
GET /DEMOWebServices2.8/Service.asmx/CancelOrder?UserID=string&PWD=string&OrderConfirmation=string HTTP/1.1
Host: api.efxnow.com
回复
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<objPlaceOrderResponse xmlns="https://api.efxnow.com/webservices2.3">
<Success>boolean</Success>
<ErrorDescription>string</ErrorDescription>
<ErrorNumber>int</ErrorNumber>
<CustomerOrderReference>long</CustomerOrderReference>
<OrderConfirmation>string</OrderConfirmation>
<CustomerDealRef>string</CustomerDealRef>
</objPlaceOrderResponse>
HTTP POST
发送
POST /DEMOWebServices2.8/Service.asmx/CancelOrder HTTP/1.1
Host: api.efxnow.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length
UserID=string&PWD=string&OrderConfirmation=string
回复
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<objPlaceOrderResponse xmlns="https://api.efxnow.com/webservices2.3">
<Success>boolean</Success>
<ErrorDescription>string</ErrorDescription>
<ErrorNumber>int</ErrorNumber>
<CustomerOrderReference>long</CustomerOrderReference>
<OrderConfirmation>string</OrderConfirmation>
<CustomerDealRef>string</CustomerDealRef>
</objPlaceOrderResponse>
SOAP 1.2
发送
POST /DEMOWebServices2.8/Service.asmx HTTP/1.1
Host: api.efxnow.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<CancelOrder xmlns="https://api.efxnow.com/webservices2.3">
<UserID>string</UserID>
<PWD>string</PWD>
<OrderConfirmation>string</OrderConfirmation>
</CancelOrder>
</soap12:Body>
</soap12:Envelope>
回复
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<CancelOrderResponse xmlns="https://api.efxnow.com/webservices2.3">
<CancelOrderResult>
<Success>boolean</Success>
<ErrorDescription>string</ErrorDescription>
<ErrorNumber>int</ErrorNumber>
<CustomerOrderReference>long</CustomerOrderReference>
<OrderConfirmation>string</OrderConfirmation>
<CustomerDealRef>string</CustomerDealRef>
</CancelOrderResult>
</CancelOrderResponse>
</soap12:Body>
</soap12:Envelope> -
软件测试修炼之道
2010-10-12 13:28:09
-
人生如棋,每一步都是转折......
2010-08-30 17:16:31
人生如棋,每一步都是转折........
自己的人生自己把握.............
-
全面剖析E-mail收发失败的原因(zhuan)
2010-08-20 18:06:57
电子邮件是Internet上最重要的应用之一,它提供了一种极为方便、快速的通讯方式。但是,很多网民都有过收发电子邮件失败的经历。下面笔者通过对E -mail收发失败的原因作详细的论述,来谈谈如何提高E-mail收发的成功率。
一、E-mail收发的一般过程。
图1:E-mail收发过程示意图
一般来说,E-mail的发信方式分为两种:一种是通过ISP或免费邮箱服务商提供的SMTP发信服务器中转的发信方式;另一种则是通过本机建立S MTP发信服务器直接发送电子邮件的方式。
1、通过邮件发信服务器发信的收发过程。
如图1所示,在这一发信过程中,首先由发信人通过电脑将电子邮件发送到SMTP发信服务器上,如果发信服务器收到的邮件合法,发信服务器通过一种“存储转发”技术,将该电子邮件在服务器上排队,当轮到该邮件发送顺序时,再由发信服务器将邮件发送到对方的收信服务器(M X邮件交换服务器)上,再由收信服务器转发到POP3服务器上(很多服务器系统的收信服务器和POP3服务器是同一服务器),最后由收件人通过电脑上的客户端软件将电子邮件从P OP3服务器上取走。
2、通过本机直接发送电子邮件的过程。
与上述发送过程不同的是,一些软件提供本机直接发送电子邮件到收信服务器上的功能,其实就是利用本机电脑建立一个SMTP发信服务器,由本机充当发信服务器的功能,绕过I SP或免费邮箱提供的SMTP发信服务器。因此本机既充当发信人电脑,又充当发信服务器,其发信过程与上述过程类似,但减少了发信人与发信服务器之间的网络传输过程和邮件的排队等待时间。
二、电子邮件收发失败的原因。
在上述发信过程中,只要有一个环节出现问题,都会引起E-mail收发失败,因此,电子邮件收发失败主要有以下一些因素:
1、没有正确地配置客户端软件的帐号、服务器属性等。
正确配置客户端软件的邮箱帐号、收发邮件的服务器属性是成功收发E-mail的关键。在这里需要配置的主要是两个服务器,即SMTP服务器和P OP3服务器以及帐号及密码。
SMTP服务器:即你用来发送邮件的服务器的地址,您的邮件将通过此服务器发送出去。如: xf.hb.cninfo.net。也可写成IP地址格式,如:61.136.152.3。
POP3服务器:保存了外界发给您的邮件。您通过邮件客户端软件,例如:Outlook Express将这些邮件下载到您的PC上,再处理这些邮件。如果SMTP和POP3是同一个主机,则两者相同,如均为:xf.hb.cninfo.net。同样一些免费邮箱的服务器一般要在前面加上“p op.",如:pop.163.com。
POP3和SMTP服务器一般有以下几种填写方式:
1) SMTP.xxxx.xxx pop.xxxx.xxx
2) xxxx.xxx xxxx.xxx
3) SMTP.xxxx.xxx pop3.xxxx.xxx
帐号:实际上是POP3服务器的帐号。您通过此帐号和相应的口令从POP3服务器上收取您的邮件。如:您的邮箱是t010405@xf.hb.cninfo .net,那么您的帐号就是@前的“t010405”。一些免费邮箱的帐号需要填写邮箱全称,而不仅仅是@前面的部分,如果你确认自己的密码正确无误,却不能通过密码验证,一般就是这个原因。
密码:您的帐号密码。
只有正确填写了这些信息,才能正确地发送电子邮件。初级用户最容易犯上述错误。
2、收件人的邮箱地址填写有错误。
要保证电子邮件能被正确地发送并被收信人收到,准确地填写收信人的邮箱地址是非常重要的。邮件不能被正常发送或收信人收不到邮件,往往是收信人邮箱地址填写不正确。目前由于大家在注册邮箱时,往往不容易注册到好的帐号名,因此大家不得不混合使用字母和数字以及一些特殊字符,而这往往容易造成抄写对方收件人邮箱地址时发生错误。例如:英文小写字母“l ”和阿拉伯数字“1”、英文小写字母“o”和阿拉伯数字“0”、下划线“_”和连字符“-”这些字符极为相似,在抄写收件人邮箱地址时尤其应注意。收件人邮箱地址填写错误,也分为两种情况:
1) 邮箱地址帐号错误:即收件人邮箱@前面的部分填写错误。 在这里又分为两种情况,第一种情况是地址帐号误填写成了其他存在的邮箱地址,如:发信人xiangkai68@sina.com希望将信件发送到zxk 71@21cn.com,地址却误填成了zxk717@21cn.com(该邮箱地址存在) ,则邮件没有被发送到希望的邮箱中,当然收件人收不到邮件了。另一种情况是地址帐号填写成了其他不存在的邮箱地址,如:收件人地址为:z xk712871@21cn.com(该邮箱地址不存在) ,则在采用邮件服务器方式发信过程中,一般并不提示发送错误,而是提示发送成功(一般在域名相同的邮箱之间发送电子邮件,发信服务器会判断邮箱地址是否正确并给出错误提示)。因为只要邮件能够正确地传送到发信服务器上,O utlook Express、Foxmail等邮件客户软件就会给出发送成功的提示。而随后几分钟,你会发现你的发信箱里会退回你发送的电子邮件,并通知你收件人邮箱地址非法或不存在。因此你若不及时检查你的收件箱,还以为对方已经收到电子邮件了呢?还有一种情况,收信服务器上若不存在相应的邮箱地址,有些收信服务器会“智能”地作出判断,将他们发送到可能正确的邮箱地址中,如:发送给j ohn@myorg.com的邮件被发送到了 johm@myorg.com中,不过一般会通知给发信人该信息。而采用本机直接发送电子邮件的客户端软件发送电子邮件时,由于它采用直接与收信服务器相联系的方式,因此在发送过程中,一般即会被告知收件人邮箱地址不存在。不过,当M X邮件交换服务器与POP3服务器不是同一服务器时,只要将邮件发送到MX邮件交换服务器上,也会被通知发送成功,但很快你能收到退信通知。
2) 主机地址域名错误:即收件人邮箱@后面的部分填写错误。 对于这种情况,在发送过程中,由于通过域名解析后无法找到相应的主机(服务器),所以邮件根本就发送不出去。
因此,在填写收件人邮箱地址时,应非常仔细,对于经常联系的朋友,可将他们加入到地址薄中,在发送信件时直接选用。对于收到的邮件最好采用回复的方式,以避免邮箱地址抄写错误。对于不能确定的邮箱地址,最好采用校验邮箱地址类软件先校验后再发送。
3、发信服务器出现故障.
对于发信服务器来说,出现故障是不可避免的。因为网络繁忙、黑客入侵等许多原因都可能使其发信服务器暂时出现故障而不能被访问,在这种情况下使用该邮件服务器发送电子邮件当然不能成功发送,我们只有等待发信服务器恢复正常后再发。而邮件服务器系统升级也可导致发信服务器I P地址等发生变化而导致原来的发信服务器不能被访问(有些用户在填写客户端软件的发信服务器时填写成IP地址形式)。你若拥有多个邮箱帐号,也可以换一个发信服务器发送。最好的办法当然是采用能够提供本机直接发送电子邮件的软件(例如:A dvanced Direct Remailer2.17,以下简称ADR,下载地址:http://www.mailutilities.com/adr/adr.zip)来发送,这样可绕过发信服务器而直接发送电子邮件到收信服务器上。另外,发信服务器最好填写成域名形式,不要填写I P地址形式,因为这样可避免邮件系统升级等原因而引起的发信服务器IP地址变化,从而不能正常发送电子邮件。4、收信服务器出现故障.
同样,不仅发信服务器容易出现故障,收信服务器、POP3服务器也同样会出现故障。一般说来,当收信服务器临时出现故障时,在一些情况邮件并不会丢失,因为当收信服务器出现故障时,发信服务器由于不能将邮件发送到指定的收信服务器上,发信服务器会在指定的时间间隔重新发送,例如:隔3 0分钟后再发送一次,若仍然不能发送成功,则间隔60分钟后再发送一次,以此类推,直到发送成功。一般而言,当收信服务器出现故障时,系统管理员会在较短的时间内使其他恢复正常。若在指定的时间内不能成功发送,例如:4 8小时内,则会将邮件退还给发信人,并说明邮件不能被成功发送的原因。其实在此期间,你并不能立即知道收信服务器出现了问题。因此对于重要信件,你若采用本机直接发送电子邮件的软件发送,则在发送过程中,就可知道收信服务器是否正常,这样就可以采取其他通讯方式,例如:传真等方式来联系你朋友了。
收信服务器出现问题,对于发信人是没有办法解决的,我们只有祈祷收信服务器尽快恢复正常。
5、域名解析服务器出现故障。
一般用户在用邮件服务器方式发送电子邮件时,需要解析发信服务器的域名地址,而在收信时需要解析收信服务器的域名地址。因此,当域名解析服务器出现故障时,由于不能正常解析服务器的域名地址,用户当然不能连接到发、收邮件的服务器上,自然不能正常收发电子邮件了。如果用户将收发邮件的服务器地址填写成I P地址形式,就可以避免域名解析服务器出现故障时而不能正常收发电子邮件了。同样采用本机直接发送电子邮件方式发送电子邮件,如果域名解服务器出现故障,或邮件地址的后缀域名与域名服务器的解析范围有冲突,则同样无法解析出对方收信服务器的域名地址,这时我们只有更换另一个域名解析服务器。因此,我们在W indows的网络TCP/IP设置中,必须正确填写好主控DNS和辅控DNS,这样当一个域名解析服务器出现问题时,可调用另一个辅控DNS。
另外还有一点,中国电信169网在国际上是不合法的,那么169网的域名采用163国际网上的域名解析服务器来解析便会发生域名不能解析或解析错误而导致发送失败或发送到不正确的邮箱中。
一些域名解析服务器可能存在解析范围的问题,不能解析出极个别特殊的地址,因此邮件无法发送到一些特殊邮箱中。
6、网络连接不稳定。
发送电子邮件的过程中,稳定快速的网络连接也是保证邮件被正常发送的重要因素。若在发送电子邮件过程中,出现断线、较强的线路电磁干扰等情况往往会导致发送失败或邮件异常改变而受损,自然收件人不能收到正常的邮件。这时我们只有重新发送该邮件了。特别是发送大邮件过程中,对于网络连接的质量要求更高。因此建议大家在发送电子邮件前,应先建立稳定快速的I nternet连接,并从本地的ISP(163、169、263、167等)中选择速度快且稳定的连接后再发送。发送前最好先压缩附件,以减小邮件的大小,当然猫也要选择好一点的,另外在发送电子邮件的过程中,最好不要进行其他浏览操作,以免占用带宽,延长发送时间,增大产生错误的概率。
7、邮件属性超过发信服务器的限制。
为了充分利用网络资源,提高邮件发送用户的响应速度和效率。SMTP发信服务器对用户邮件的大小、连接数量等进行限制,当超出SMTP服务器的限制时,服务器将拒绝发送。一般来说,发信服务器对邮件有以下几种限制:
限制邮件大小:不管是免费邮箱还是ISP提供的SMTP服务器,对发送邮件的大小都有限制,一般应小于2M(包括附件),而实际上我们只能发送1 .5M左右的邮件,因为在发送电子邮件前还需要对邮件进行编码,会导致邮件大小增加5%~20%之间。而具体能发送多大的邮件,请查阅相关S MTP服务器的资料。当客户端邮件程序试图发送一个大于此限制的邮件给SMTP服务器时,将收到一条未发送报告或发送错误报告,随后将邮件退回客户端。
限制每个连接的邮件数:限制邮件客户在一次连接中最多可以发送的邮件数目,超出这一限制的邮件将被拒绝发送。
限制每个邮件的收件人数:限制每封邮件的收件人数上限,超出该上限的邮件将退回发信人。
当电子邮件超出上述限制时,我们可以将电子邮件分几次来发送,或将较大的邮件分成几个部分,通过多份电子邮件来发送,这样每封信的长度较短,每次发送的数量也较少,也可大大减少出错的概率。当然,若我们采用本机直接发送电子邮件的软件,例如:A DR来发送邮件,一般都会突破这些限制,可轻松安全地发送大邮件。
8、收信服务器上收件人邮箱空间满;邮件大小超出收信服务器的限制。
若收件人邮件比较多,而收件人在一段时间内由于某种原因长期不收信,以及垃圾邮件的干扰,往往会导致邮箱空间占满,当然就不能正常收取新邮件了。有些收信服务器邮箱缺省收信方式为收信后在服务器上仍保留备份,常常会导致邮箱空间慢慢被占满,也是引起不能收取新邮件的原因。因此,大家要养成定期访问邮箱和清理邮箱的习惯,并设置好邮箱的垃圾过滤功能,来减少垃圾邮件的干扰。另外,接收的邮件过大,超出收信服务器的限制,也是不能正常接收邮件的重要原因。对于这种情况,大家只有申请大容量的邮箱空间,例如:5 0~100M的邮箱,而大容量的邮箱对大邮件的接收和发送的限制较宽。同样,收信服务器对接收邮件的大小也有限制,例如:一个5M的邮箱允许接收的最大单个邮件为2 M,当超出其限制时,也不能正常接收邮件。
9、收信服务器设置有“黑名单”,防止Spammer发送垃圾邮件,限制来至一些邮箱和一定IP地址范围的邮件。
一些收信服务器对发送垃圾邮件的主机(spammer)有非常强的保护作用,所以许多合法的电子邮件不能被发送到收件人邮箱中,这些spa mmer主机的地址被收信服务器登记为“黑名单”,收信服务器将拒绝收取和发送来至该地址或域名的电子邮件。
所以你应该确信,你的E-mail地址或域名地址不被标记为spammer,否则,许多收信服务器将拒绝你的连接。这种情况下,你可以更换其他邮箱的S MTP发信服务器发送电子邮件,也可通过本机直接发送电子邮件,绕过列为黑名单的邮箱或SMTP发信服务器,就有可能避开黑名单而提高发送电子邮件的成功率。
10、收件人邮箱被收件人主动设置有垃圾过滤功能,防止一些不合法的和来至一些邮箱和一定IP地址范围内的电子邮件。
注意:与上一原因不同的是,这是收件人对自己邮箱主动设置的邮件过滤功能。若发信人邮箱是被禁止接收的用户,那么在多数情况下,发信人可以将邮件发送到收信服务器上,发送过程中也不提示任何错误,但邮件随即被转移到其他文件夹,例如:直接被送到垃圾邮箱中或被删除,不再进入收件箱。因此在收件箱中不存在该邮件,邮件收取过程中,就不可能收取到。现在很多免费邮箱,都提供有垃圾邮件过滤功能,例如:对h otmail.com邮箱,我们可以通过WEB页面方式登录该邮箱后,将邮箱的垃圾邮件过滤级别设置为“高”后,将不能通过抄送的方式给hotma il.com邮箱发邮件,否则会被当作垃圾邮件过滤掉。如果被收件人列为拒收的对象,通过该邮箱就不能成功地发送到收件箱中。
11、收信服务器对发送电子邮件的软件(主要是群发软件)设置有拒发功能。
很多收信服务器为了防止垃圾邮件的传播,对市面上流行的群发软件设置有监控功能,当发现这些邮件是采用这些邮件群发工具发送的,则拒绝发送到指定的邮箱中。这主要是通过对邮件头的分析或其他相关信息来判断的,一般来说,邮件发送工具在对邮件进行编码时,会对邮件头放置一些信息, 例如邮件头中的X-mailer信息,主要是说明邮件发送时采用的邮件软件的。收信服务器会通过这些信息来判断邮件是通过什么工具发送的。如果收信服务器发现是用这些群发工具发送的,将拒绝接收或直接过滤掉,而且并不返回任何提示信息给发信人。
12、收信服务器对邮件的主题和内容设置有拒发功能。
发送电子邮件时,一定要注意邮件主题和邮件内容的字词书写,很多网站的邮件服务器为过滤垃圾邮件设置了常用垃圾字词过滤,如果邮件主题和邮件内容中包含有如:大量、宣传、钱、群发等字词,服务器将会过滤掉该邮件,致使邮件不能发送成功。
因此在书写邮件主题和内容时应尽量避开你心目中认为的有垃圾字词嫌疑的文字和词语,才能顺利发送电子邮件。
13、有些发信服务器为了减轻负担和抵制垃圾邮件的发送,拒绝发送发信人地址非本服务器的邮件。
现在绝大多数免费邮箱为了减轻SMTP服务器的负担,同时也为了防止垃圾邮件散布者利用本服务器发送垃圾邮件,都采用SMTP服务器认证和拒绝发送发信人地址非本服务器的邮件。例如:如果你在2 1CN上有一电子邮箱zxk@21cn.com ,在新浪上有另一电子邮箱xiangkai68@sina.com ,你用邮箱zxk@21cn.com 发送电子邮件,而在SMTP发信服务器上填写新浪的SMTP服务器,即SMTP.sina.com.cn,并填写好正确的用户名和口令,你却不能正常发送电子邮件,就是因为这个原因。
14、一些发信服务器增加了SMTP服务器认证功能,只有本服务器注册用户提供正确的用户名和口令才能正常地发送电子邮件。
如果你不是本服务器注册的合法用户,不能提供正确的用户名和口令,将不能利用其服务器发送电子邮件,这主要是为了避免了非法用户利用本服务器发送大量的垃圾邮件,减少对用户邮箱的干扰。现在许多早期版本的电子邮件客户端软件,如F oxmail3.0均不支持该功能,因此首先你应升级你的客户端邮件软件。
15、发信服务器或收信服务器拒绝收发匿名电子邮件或不合法邮件头的电子邮件。
一般来说,不管是发信服务器还是收信服务器,为了充分利用网络资源和防止黑客的入侵,都设置有一定的垃圾邮件过滤和防火墙功能,一般是不允许匿名发送电子邮件的,S MTP服务器一但发现邮件头中的From中的字段为空或不合法,则拒绝发送。另一方面,也无法在邮件发送失败后,返回出错信息给发信人。所以在发送前,客户端软件和服务器会首先确定这些信息,只有当这些邮件头信息正确后,才能正确发送。所以现在大多数邮件客户端软件在系统设置或建立新邮件时,都必须正确填写发信人邮箱地址,一般系统会自动取当前帐号邮箱。若不填写,一般不能发送。不过现在也有许多支持匿名发送电子邮件的软件,多数为在本机直接建立S MTP服务器实现本机直接发送电子邮件,对于收信服务器而言,对这一点要求并不严格,收信服务器多数情况下,可接收匿名邮件,当然在给一些安全性级别要求较高的收信服务器发送电子邮件时,收信服务器往往会因为同样的原因拒绝发送到给定的邮箱中。
因此,要想正确地发送电子邮件,正确完整地填写邮件头信息是很重要的。
16、一些收信服务器对于本域名邮箱发送的给本域名邮箱上的另一邮箱的电子邮件只接收它们自己的SMTP服务器发送的邮件。
例如:如果你用163.com邮箱发送一封邮件给163.com上的另一邮箱用户,你可以使用SMTP.163.com来发送,而如果采用其他SMTP服务器来发送,例如:一些当地I SP提供的无需认证的SMTP服务器来发送,则会提示发送失败。同样,你用特快专递也不能发送成功,就是这个原因。Sina.com邮箱也存在这种限制,不过发送过程并不提示发送失败,但第二天,就会收到拒收的退信。
17、收信服务器对一次连接中来至同一邮箱地址的电子邮件的数量和发送的时间间隔进行了限制。
对于这种情况,美国在线(American On-Line),域名AOL.COM,在这一点上声誉就不太好,如果当你在一个很短的时间间隔内,例如一分钟,发送几十封信给AOL.COM的用户, 就有可能会出现问题。这时,AOL的过滤器会打开,认为你是在发送垃圾邮件,而把你的电子邮件踢出去,而且并不返回任何错误提示。A OL也不通知你,而你全然不知,你的IP地址将被锁定为黑名单,而从你的电子邮箱中发出的信件以后将再也不能收到。AOL接收所有发送给他的电子邮件,不发任何错误提示,然后剔除他们。
对于这种情况,我们可以在发送每封信之间间隔一段时间,也可以利用ADR来发送,用ADR可以创建发送邮件的延时列表,例如,若发送三十封信给A OL.COM用户,可设定每间隔三分钟发送一封电子邮件。
18、计算机病毒或黑客木马程序修改或占用了客户端软件收、发邮件的服务器的端口地址。
通常情况下,SMTP发信服务器的端口地址为25,收信服务器的端口地址为110。若遭到病毒或黑客木马程序的袭击,则有可能改变或被其他软件占用这两个端口地址,使收发电子邮件失败,所以当原先正常工作的系统突然不能正常收发电子邮件时,不防从这方面找找原因。
19、客户端邮件软件中的“收件人”或“抄写”的格式填写不对。
在Outlook Express中,在将同一封信发送给多个收信人时,各收件人邮箱间需要用分号或逗号隔开,而在Foxmail中却只能用逗号隔开,不能用分号隔开,否则不能正常发送电子邮件,这一点请大家一定要明确。因此,大家在填写收件人邮箱地址时应首先阅读软件的相关文档,仔细检查填写的格式是否正确。
20、客户端邮件软件本身存在不足或未注册。
现在发送电子邮件的客户端软件非常之多,而且各有特色,但它们或多或少地存在一些问题。因此,大家在选择这些邮件软件时,应尽量选择大公司的成熟产品, 并且还应经常升级更新,因为邮件服务器系统总是在不断升级更新的,因此软件也要相应地适应。例如:邮件超级快mailexpress1.5(下载地址:h ttp://jiaohuan.51.net/files/mailexpress.zip )
未注册版,不能成功地发往21cn.com邮箱和sina.com邮箱。在发送过程中提示“发送成功”,但收件箱并未接收到该邮件。而对该软件的注册版进行测试,可成功发送所有测试邮箱。原来,未注册版本中含有广告和相应的网站链接,2 1cn和sina.com等邮箱对相应的网站链接进行了过滤,拒绝接收。 -
转组
2010-08-09 11:24:50
因工作需要转到另外一个组了,又往上搬了3层,电脑也跟着搬了,感谢同事S、H、I以及J,默默记在心里了........
开始新的工作了,和换工作没什么不同,现在所有的同事都是新的,即将接触的工作也是新的........
或许对我来说,既是机遇又是挑战.......
-
用动态的眼光看测试(转)
2010-08-09 10:22:05
软件测试工程师到底是做什么的?很多书籍都会这样告诉你:黑盒测试工程师测试程序,白盒测试工程师测试代码。这样说的确没错,初学者可以这样理解,如果作为资深的软件测试工程师还是这样想的话,只能说是这几年的时间里你并没有任何进步。简单点说资深软件测试工程师仅需要掌握测试技术和行业技术就足够了。但细品起来好像也不完全像上面说得那样简单,怎样做才能掌握高超的测试技术,怎样做又才能成为行业技术专家,怎样做才能将这两者结合在一起呢?
举个例子要求测试报表的工程师去检测一次性水杯,针对这个题目写出可行的测试用例。看了这个题目,很多测试工程师都会感觉头疼,这样的测试用例怎么写啊?先别急,让我们来考虑一个小问题“什么叫测试,测试应该从什么地方开始着手?”如果能将这个问题想明白,测试水杯的思路也就逐渐清晰了。比如,首先要考虑杯子是用来盛水的,那就要求它不会漏水。如果有人喜欢喝热开水,作为盛水的工具它应该满足沸点水温的要求,如果有人喜欢喝冰水,零度以下的要求也应该能够实现。然后再考虑一下杯子的软硬程度,如果太软拿不住,持杯子的人还会喝到水吗?如果杯子太硬是不是造价又会太高呢?接着再考虑在多长时间内杯子不会被水泡开,如果一个装了水的杯子,在两分钟后就被泡开了,那肯定是不合格的产品了,消费者是不会为如此短命的水杯买单的。沿着这个思路走下去,你会发现需要检测的内容太多了,杯子是不是会散发异味,是否满足食用器皿的卫生标准,杯壁上是否有异物,装满一杯水后杯子是否会损坏,杯子表面的图案会不会掉色,花样是否美观,装一些固体物体时杯子的可用性等等,基本功能测试、稳定性测试、压力测试、关联性测试就这样逐一而出。很神奇是吗?继续这个题目完成它,测试用例也就出来了。
上面的小例子是灵活运用测试理念的一个典型,从这个例子中不难看出测试的广博,一个好的测试工程师能够像万金油那样,运用到方方面面的测试中,对事物的认知都可以从测试的角度来分析。尝试从身边的一些小事物开始,培养测试的兴趣和眼光,慢慢的就能从中体会到测试的意义了。比如对钢笔、桌椅板凳等做做测试,你会不会发现自己正逐渐的像质检员那样专业?在测试取得成功的同时,想想测试的过程,对测试对象高度认知不就是测试成功的基础吗?也就是说在测试之前你已经掌握了测试对象的特征,并且这些信息以不可察觉的速度在头脑中建立了测试的方向,所以才会得心应手。这个对特性认知并建立起测试方向的过程就是测试理念日趋成熟的过程。
再举个例子,让手机软件的测试工程师来测试网络软件,结果通常是以失败而告终。有些人就不明白了,为什么测试桌椅都能成功,同样也是测试软件却失败了呢?那是因为在进行这个题目的时候我们忽略了非常重要的一点“行业技术”,桌椅等日常用品因为太过熟悉所以很容易掌握其特性,但是网络软件却因为其高度的领域性不被普遍认知。测试手机软件的工程师也许对各类型的手机操作系统非常熟悉,但是对网络知识的了解却很少。所以这种盲目的使用软件的过程,并不能构成系统的测试过程,最终导致题目执行的失败。
解决这种问题最好的方法就是培养广泛的兴趣,学习一些行业知识,从当前项目所需要的行业技术开始,适当的增加对其他领域的了解,比如游戏软件、杀毒软件、文字编辑软件等等。艺多不压身,如果哪天你所在的项目组改变了业务方向,你还会紧张吗?
不要将眼光局限在一小块地方,从另一种角度用动态的眼光去看待软件测试,当你发现测试无处不在的时候,才能说是真正深入到了这个领域。
-
《唐山大地震》电影随想
2010-08-01 09:59:43
昨天和朋友一块去看了《唐山大地震》,很感人,中途忍不住被感动的哭了,自然灾害太无情了,应该珍惜身边的亲人和朋友。突然很想念学校,想念唐山,总感觉自己不是个善于怀旧的人,可看完电影后,真的很想念逝去的大学生活,想念唐山生活的四年,时间过的好快,转眼间大学毕业都两年多了,同学们都逐渐有了自己的幸福,有的甚至当了妈妈,身上都肩负起了一种责任。。。。。。时间就是这样,默默的从指缝间溜走。。。。。。。。。 -
沟通很重要,恍然大悟,问题在我
2010-07-30 21:05:23
-
Web 测试总结(2)
2010-07-29 16:22:31
3、添加、修改功能
(1)是否支持tab键
(2)是否支持enter键
(3)不符合要求的地方是否有错误提示
(4)保存后,是否也插入到数据库中?
(5)字段唯一的,是否可以重复添加
(6)对编辑页列表中的每个编辑项进行修改,点击保存,是否保存成功?
(7)对于必填项,修改为空、空格或其他特殊符号,是否可以编辑成功
(8)在输入框中,直接回车
(9)是否能够连续添加
(10)在编辑的时候,要注意编辑项的长度限制,有时,添加时有长度限制,但编辑时却没有(添加和修改规则是否一致)
(11)添加时,字段是唯一的,不允许重复,但有时,编辑时,却可以修改为相同字段(相同字段包括是否区分大小写以及在输入内容的前后输入空格)
(12)添加含有特殊符号或空格的内容
(13)对于有图片上传功能的编辑框,对于没有上传的图片,查看编辑页面时,是否显示默认图片,如果上传了图片,是否显示为上传图片?
4、删除功能
(1)输入正确数据前加空格,看是否能正确删除?
(2)是否支持enter键
(3)是否能连续删除多个产品?当只有一条数据时,能否成功删除?
(4)删除一条数据后,能否再添加相同的数据?
(5)当提供能一次删除多条信息的功能时,注意,删除的数据是否正确?
(6)不选择任何信息,直接点击删除按钮,看有什么错误提示?
(7)删除某条信息时,应该有错误提示信息
5、注册、登录模块
(1)注册成功,但登录失败:注册时,密码设置为一些特殊符号,但登录时,失败
(2)注册时,连续点击提交按钮
(3)注册成功后,页面应该以登录状态跳转到首页
(3)登录时,没区分大小写,注册时,是小写字母,但登录时,用大写字母也能登录进去
(4)登录时,当页面刷新或重新输入新数据时,验证码是否也随之更新
(5)对密码的修改,当把密码修改为很长,或含有特殊符号时,能够修改成功,但却不能成功登录。
6、上传图片测试
(1)文件类型正确,文件大小合适
(2)文件类型正确,文件大小不合适
(3)文件类型错误,文件大小合适
(4)文件类型和大小都合适,上传一个正在使用中的图片
(5)文件类型和大小合适,手动输入一个存在的图片地址来上传
(6)文件类型和大小合适,手动输入一个不存在的图片地址上传
(7)文件类型和大小都合适,手动输入图片名称来上传
7、返回键检查
(1)一条已经成功提交的记录,返回后再提交,看系统是否做了处理
(2)检查多次使用返回键的情况,在有返回键的地方,返回到原来页面重复多次,看是否会出错
8、回车键检查
在输入结束后,直接按回车键,看系统处理如何,是否会报错
9、刷新键检查
在web系统中,使用浏览器的刷新键,看系统处理如何,是否会报错
10、直接URL链接检查
在web系统中,直接输入各功能页面的URL地址,看系统如何处理
11、其他
(1)在测试时,有与网络有关的步骤必须考虑到断网的情况
(2)每个页面都有相应的页面title
(3)在测试的时候要尽量考虑在页面出现滚动条时(滚动条上下滚动下),页面显示是否正常
(4)URL不区分大小写
12、测试中,并发情况的考虑
总结了以下两种情况:
(1)某个字段是唯一的,当多个用户并发点击产生该字段时,检查系统是怎么处理的
(2)对于电子商务网站,当两个或多个用户并发购买量总和大于产品库存量时,能否购买成功
二、界面和易用性测试
1、界面测试,主要测试网站的界面是否和设计一致,是否有错别字,页面布局是否合理,格式是否正确,是否有相应的错误提示信息等。
2、易用性测试,主要是考察所开发出的功能是否人性化,是否易用,是否符合大多数用户的使用习惯等。
3、对Tab和Enter键的测试。
三、兼容性测试
兼容性测试不只是指界面在不同操作系统或浏览器下的兼容,有些功能方面的测试,也要考虑到兼容性,比如涉及到ajax 、jquery、javascript等技术的,都要考虑到不同浏览器下的兼容性问题。
四、链接测试
主要是保证链接的可用性和正确性,它也是网站测试中比较重要的一个方面。
五、业务流程测试
业务流程,一般会涉及到多个模块的数据,所以在对业务流程测试时,首先要保证单个模块功能的正确性,其次就要对各个模块间传递的数据进行测试,这往往是容易出现问题的地方,测试时一定要设计不同的数据进行测试。
六、安全性测试
(1)SQL注入
(2)XSS 跨网站脚本攻击:程序或数据库没有对一些特殊字符进行过滤或处理,导致用户
所输入的一些破坏性的脚本语句能够直接写进数据库中,浏览器会直接执行这些脚本语句,破坏网站的正常显示,或网站用户的信息被盗,构造脚本语句时,要保证脚本的完整性。
document.write("abc")
<script>alter("abc")</script>
(3)URL地址后面随便输入一些符号
(4) 验证码更新问题
以上就是对Web测试的一个总结,相信一定还存在某些的遗漏,欢迎大家指正、补充。
-
Web 测试总结(1)
2010-07-29 16:17:41
测试是一种思维,包括情感思维和智力思维,情感思维主要体现在一句俗语:思想决定行动上(要怀疑一切),智力思维主要体现在测试用例的设计上。具有了这样的思想,就会找出更多的bug。(^_^个人认为,不代表官方立场)
对于一个web网站来说,主要从这么几个大的方面来进行测试:
1、 功能测试;2、 界面测试;3、 易用性测试;4、兼容性测试;5、 链接测试;6、 业务流程测试;7、 安全性测试
下面主要从以上七个方面进行叙述:
测试用例是测试的核心,测试用例的设计是一种思维方式的体现,在用例的设计中,用的比较多的方法是边界值分析法和等价类划分法,下面主要从输入框,搜索功能,添加、修改功能,删除功能,注册、登录功能以及上传图片功能等11个方面进行总结说明。
1、输入框
输入框是测试中最容易出现bug的地方,所以在测试时,一定要多加注意。
控件类型
大分类
小分类
检查内容
输入框
字符型输入框
字符种类
英文全角字符
英文半角字符
数字
汉字
空或空格
特殊字符“~!@#$%^&*()_+-={}[]|\:;”’<>,./?;”等可能导致系统错误的字符,特别要注意单引号和&符号。
禁止直接输入特殊字符时,使用“粘贴”、“拷贝”功能尝试输入,并测试能否正常提交保存。
长度检查
最小长度-1
最小长度
最大长度
最大长度+1
输入超长字符:比如把整篇word文档copy过去
空格检查
输入的字符间有空格
字符前有空格
字符后有空格
字符前后都有空格
多行文本框输入
允许回车换行
保存后再显示能够保持输入时的格式
仅输入回车换行,检查能否正确保存;若能,查看保存结果。若不能,查看是否有正确提示
安全性检查
输入特殊字符串:null、NULL、 、javascript、<script>、</script>、<title>、<html>、<td>等
输入脚本函数:<script>alter("abc")</script>、document.write("abc")、<b>hello</b>
数值型输入框
边界值
最小值-1
最小值
最大值
最大值+1
位数
最小位数+1
最小位数
最大位数
最大位数+1
输入超长值
异常值、特殊值
输入[空白(NULL)]、空格或‘“~!@#$%^&*()_+-={}[]|\:;”’<>,./?;”等可能导致系统错误的字符
禁止直接输入特殊字符时,使用“粘贴”、“拷贝”功能尝试输入,并测试能否正常提交保存。
word 中的特殊功能,通过剪贴板拷贝到输入框:分页符,分节符,类似公式的上下标等
输入负整数、负小数、分数
输入字母或汉字
带符号的数值:带正号的正数,带负号的负数
小数:小数点前零舍去的情况,如 .12;多个小数点的情况;0值:0.0,0.,.0
首位为零的数值:如01、02
科学技术法是否支持:如 1.0E2
全角数字和半角数字的情况
数字与字母的混合:16进制数值,8进制数值
货币型输入项:允许小数点后几位
安全性检查同上
不能直接输入,就copy
日期型
合法性检查
日输入[0日]
日输入[1日]
日输入[32日]
月输入[1、3、5、7、8、10、12月]、日输入[31日]
月输入[4、6、9、11月]、日输入[30日]
月输入[4、6、9、11月]、日输入[31日]
输入非闰年,月输入[2月]、日输入[28日]
输入非闰年,月输入[2月]、日输入[29日]
(闰年)月输入[2月]、日输入[29日]
(闰年)月输入[2月]、日输入[30日]
月输入[0月]
月输入[1月]
月输入[12月]
月输入[13月]
异常值、特殊值
输入[空白(NULL)]或“~!@#$%^&*()_+-={}[]|\:;”’<>,./?;”等可能导致系统错误的字符
安全性检查同上
2、搜索功能
(1)比较长的名称是否能查到?
(2)空格 或空
(3)名称中含有特殊字符,如:' $ % & *以及空格等
(4)关键词前面或后面有空格
(5)如果支持模糊查询,搜索名称中任意一个字符是否能搜索到
(6)输入系统中不存在与之匹配的条件
(7)两个查询条件是否为2选1,来回选择是否出现页面错误
(8)输入脚本语言,如:<script>alter(“abc”)</script>等
3、添加、修改功能
(1)是否支持tab键
As a man, you should have to be in faith----Echoes Of The Rainbow(岁月神偷)
2010-07-25 16:35:01
Yesterday, I went to visit my cousin and looked around her new floor by the way. Her new house cost about more than one million. Looking at the new house, I thought of myself.
I don't know what's like of my future. And I don't know whether I can own a floor in BJ. In a word, I am very confused at present. Every day, my life is rule, three point in a line. Sometimes I am very enjoyed this kind of life. But sometimes I feel that life is so boring........
Life is going on. And as a man, we should have to be in faith. This word comes from the famouse film--Echoes of The Rainbow.
I like this word very much. It is right that we should believe in ourselves. In another word, we should give ourselves some expection in our life.
As a normal man, We impossibly predict the future. The only thing we should do is do the present thing better.
Several things needing to be memoried
2010-07-22 21:46:20
This month,my family has two things to be glad. One thing is that my brother has bought a car; and another thing is that my sister-in-law changed a job and his salary exceeds 1w.
I am very glad for them. I hope their life is better and better.
And for myself, I have entered into GC for my work. In fact, my goal is not it, I am looking forward to getting the year award. What i should do is to improve my work efficiency.安全测试(转)
2010-07-20 17:07:44
前段时间接手了对网站进行安全测试的任务。
刚接到的时候心里非常紧张,因为什么都不懂的,以前也没有接触过这个方面的。虽然小组有人共享过一点东西,那毕竟是理论,大家对于实际操作都是是懂非懂的。
后来找了很多有关这方面的东西,于是概括一下,主要就是测试下面那些内容了(一些文绉绉的理论就不讲啦,我只是总结测试动作):
一、没有进行xss过滤的情况:
a、url中的所有参数值用 '"></script><script>alert("hello,my girl!")</script> 代替测试:
现象:跳出“hello,my girl!”提示框;
b、text框输入 '"></script><script>alert("hello,my girl!")</script>,点击提交:
现象:没有正常写入数据库;或查看阅览页面或者从数据库显示时,没有被转义;
c、副文本编辑器输入<img nerror = "alert(123)" src=http://xxx.com>;
现象:没有正常写入数据库;查看阅览页面或从数据库显示时,出现js错误或者排版出现问题;
d、在数据库字段中写入'"></script><script>alert("hello,my girl!")</script>,查看页面显示:
现象:跳出alert;或者页面出现js问题等;查看源代码时,没有进行转义;
注意点:
1、很多时候,html代码的<title >和<meta >中的参数会显示数据库的产品名呀,或者其他有可能显示乱码的参数,所以这种地方也需要注意,以'"/></script><script>alert("hello,my girl!")</script>为例,就会跳出alert值,或者显示</script><script>alert("hello,my girl!")</script>不应该显示的值,因为被",或者/>拦截了。
2、有些html链接,如果url是×××.产品名.html的时候,如果产品名或者其他参数有可能会是乱码的时候,它会把前面的一些单引号或者双引号先优先使用了,以'"/></script><script>alert("hello,my girl!")</script>为例,url = "×××.'"/></script><script>alert("hello,my girl!")</script>",这样的情况的话,页面就会显示/></script><script>alert("hello,my girl!")</script>"这样的不应该显示的值。
3、如果你的网站有搜索框,那就用包含这样的值的产品名进行搜索,有可能搜索不出来,有可能是页面跳出alert值,或者页面出现了不该出现的代码行等。
4、主要点就是输入框,显示,链接,url输入,搜索等。
二、关于crsf:
1、搜索在所有我数据提交的地方,是否都加了token值;
2、修改数据提交出的crsf,再提交,是否能正常提交,是否提示数据超时;
3、每个不同的用户登录后,token值是否都是新值。
注意点:
a、虽然加token貌似看起来不难,看到有什么提交按钮就加上token就好了,所以很多时候开发会忘记软更新的时候加上token。比如说,删除这个动作是每条数据产生的时候,跟在数据后面的url链接。我在测试这个的时候,对应的开发就忘记了所有软更新的token添加。所以这个地方需要特别注意;
b、还有一点是,每个用户登录后的token是不一致的。比如说a用户这一次登录后token值是1111,b用户这一次登录后2222.但登录后,不管什么操作,token值就是一致了。意思是比如a用户产生的token值是1111,那这个值将伴随他直到他下一次重新登录。
这次我测试的部分只有这两个部分,关于sql注入等,还没有涉及,下次有机会整理。
XSS 简单攻击
2010-07-20 11:34:27
在输入框中输入 >'><script>alert(“XSS”)</script>后,竟然能执行,记录下来.......Java 学习(1)
2010-06-16 21:33:59
学习了java基本的语法方面的知识,现总结如下:Java程序并不是在本机操作系统上直接运行,而是通过JVM向本机操作系统进行解释来运行。JVM运行时的数据结构:类加载器:方法区、堆、栈、寄存器、运行时常量池。字符类型:char,必须包含在单引号内,且单引号内只能含有一个字符。常量:声明常量时,在类型前加上一个关键字“final”。e.g.: final int MAX_SPEED对+运算符来说,当两个操作数是原始数据类型时,其结果是至少有一个被提升为int,这可能导致溢出或精度丢失。条件表达式:&&, op1&&op2: 如果op1和op2都是true,则返回true,如果op1是false,则不执行op2。||, op1||op2:如果op1或op2中的一个是true,则返回true,如果op1是true,则不执行op2。&,op1&op2:如果这两个同时是true,则返回true|, op1|op2:如果这两个有一个味true,则返回结果是true英语:1. I don't know how to put it.(put:表达, 不知道该怎么说)2. let me pay for the lunch.(午餐我请客)3. take a big jump forward(向前迈进了一大步)4. His business ventures are said to have struck out(strike out:失败)5. His suggestion seems not to be able to get to first base.(get to first base:获得初步成功)学习计划
2010-06-14 18:08:32
最近很长一段时间都没静下心来学习了,如果继续这样下去,就会养成一种习惯,后果不堪设想,今天有充足的时间可以想想自己以后半年的学习计划。我想今年这半年,我要提高的地方是:英语口语、java开发语言以及loadrunner,还是那句话,每天都要让自己进步,都要学点东西。1、英语口语:李阳的《发音突破》每天都要读一篇,一些典型的口语也要记下来。2、java开发语言:学习这个语言,主要是为自动化做准备的,在现在这个公司,一定要把Selenium这个自动化工具掌握了,这是提升自己职业素质的很重要的一部分, 对于这个的学习,每天都要学点,哪怕是一个程序,都要学会,并记录下来。3、LR: 对于这个的学习不要求每天,每两天搜集一点资料,进行学习。4、每周写一篇英语日志。每天都要抽出大约半个小时的时间,回忆下工作情况,另外,要把每天的学习情况记录到这里。该计划,明天正式实施。性能优化小结(转)
2010-05-02 21:44:32
性能测试过程中最重要也是最有挑战的就是性能测试结果分析,测试结果的分析是需要很多经验的积累的,不断的实践不断总结,下面是我做过的几个项目整理下来的一些常用东东
1、性能测试执行过程中经常遇到的问题
在测试执行的过程中,有时一个性能测试点,相同的测试场景是需要经过多次的执行的,有时会遇到 后面几次运行的结果与前面运行的测试结果大相径庭,遇到这种情况时 ,我们可以先从以下几点来查
首先查看linux的内存利用情况。
命令:free -m 通常可用内存占10%是可接受范围的
如果可用内存很小的话
1)一种是程序有问题
2)另一种可能是磁盘空间不足, 当磁盘空间不足就会去写内存,就会导致可用内存减少
第一种情况一时半会很难确定,所以我们可以先从第二种情况着手,看看是否是磁盘空间不足了
命令 tf -m
结果有两种:
1)如果可用为0, 那就是磁盘空间满了, 可以先进入当前目录查看这个目录下的磁盘空间占了多少 , 有可能是log日志写满了,
2)如果磁盘空间没占满的话 在查看下哪些进程占用了这么多
命令:top
我所遇到的项目中,很多都是由于项目log日志级别设置错误,几次运行下来,导致磁盘空间占满,接着导致内存减少,性能测试结果下降趋势
2、性能测试常用命令
free -m,ps -aux,df -h,pwd,du -sh,tail -n 文件名,cd,ll,:q 是退出命令,cd ~
ctrl+c是终止
ctrl+d向下翻页
ctrl+f 向上翻页
/perf 查询命令
tail-f (实时查询)
grep ‘关键词’ -c 查询这个“关键词”出现的次数
grep ‘关键词’ 查看这个关键词出现的地方都显示出来
grep这个命令用的情况比较多,比如查询某处超时出现的次数,以便判断超时是否严重
3、性能测试执行中要注意fgc情况
如何查看fgc情况,首先要知道java进程id 命令 ps -ef | grep java
admin 18949 18938 99 13:43 pts/2 00:00:31 /opt/taobao/java1/bin/java -Dprogram。name=run。sh -server -Xms1536m -Xmx1536m -XX:NewSize=320m -XX:MaxNewSize=320m -XX:PermSize=96m -XX:MaxPermSize=256m -Xmn500m -XX:MaxTenuringThreshold=5 -Djava。awt。headless=true
运行结果中的 18949是java进程id号
然后运行 [admin@capatest059a ~]$ /opt/taobao/java1/bin/jstat -gcutil 18949 1000(1000是显示多少行)
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 0.00 79.97 4.13 40.51 2657 12.652 4 1.349 14.000
针对这几个区的理解:
s0 和 s1 是交换区 当新生区达到一定百分比,这时交换区负责把e区里的对象搬到old 区(o)里,s0和s1不会同时占用的。
OLD 区 是老区 会检查这个区是不是设置的太小了,当E区放满了就会启用YGC,YGCT 是处理YGC的时间,当YGC达到一定值, 就会启用FGC ,而FGC很消耗内存,p区是存放java的类文件,一些静态文件的,这个区基本不变。
运行之前记录下fgc情况,运行之后看下fgc情况,看下这段时间内处理一次fgc所用的时间,判断的参考值 是几百ms是比较多的,一般情况下是几十ms。
针对fgc这块 了解的还是很少,在以后的项目实践中在不断学习深入。
Like the project, like the team, Fighting
2010-03-15 12:45:47
Like the project, like the team.
What i should do is to try my best to do it well and improve myself.
Fighting!
手机接入点设置(转)
2010-03-14 14:23:26
注:本教程的方法目前只是针对中国移动的SIM卡,中国联通和中国电信的以后再说。现在中国移动已经不区分cmwap和cmnet接入点,以前是分开收费的,呵呵,当然cmnet接入点速度快啦,所以修改接入点,尽情冲浪吧 O(∩_∩)O~
一、针对NOKIA手机的设置方法(其他品牌手机大同小异,大家灵活运用):
1,进入功能表—设置—配置设置—这里要分类讨论了:
①找到首选接入点,里面应该有一个或多个默认的接入点,按左选择键(就是接听键上面的按键,屏幕左下角的那个键),选择“操作”,点“详情”,即可查看是什么接入点,应该是cmwap或cmnet接入点(字母大小写是一样的)。如果有cmnet或CMNET接入点,就选择它就行了。如果没有,看方法②
②既然没有cmnet接入点,我们就自己添加一个吧,在“配置设置”中,找到“个人配置”,,选“操作”—“新增”—“接入点”,然后出现了接入点的设置,接入点名称,就输cmnet吧,接入点设置中的传输方式改为cmnet或CMNET,别的不用改,一直返回到配置设置中,到首选接入点,选择你刚刚设置的cmnet接入点就行啦。
PS:终于写好了,不知道大家能理解我的意思不,感觉表达起来比较困难,最好要设置的直接把手机给我,几秒帮你搞定,呵呵,不清楚地话,大家留言啊。
注:
①有些手机软件不支持cmnet接入点,所以你要用的话要改回cmwap,方法一样。目前已知支持cmnet的接入点的手机软件有:QQ,UC浏览器,人人2009。当然有些手机软件的设置中可以选择接入点的,比如人人2009,自己灵活运用吧。
②还要注意,对于可以设置接入点的软件,选择接入点时要和你手机中选择的接入点一样,比如你用人人2009时,选择cmwap,但在手机本身的接入点选择的是cmnet,那肯定上不了网啊,就不要怨天尤人咯,呵呵。
③有些手机网站也不支持cmnet接入点,访问这些网站要改回cmwap
WLAN 无线上网设置方法
无线上网设置方法
手机设置(按WEP加密方式设置)
1)进入设置-->连接设置-->打开接入点-->选择-->新增接入点-->使用默认设置-->
(2)连接名称(这里可以随便起名如:HOME)-->数据承载方式-->选择"无线局域网"-->WLAN接入点名称(选择自动搜索)-->网络状态(公开)- ->WLAN网络模式(基础网络)-->WLAN安全模式(如果之前路由器已经设置了密码,这里就选择"WEP",,如果没有设置密码的这里就是"开放式网络 -->WLAN安全设置(使用的WEP密钥"#1"-->鉴定类型"打开"-->WEP加密"64位"-->WEP密钥格式"十六进制"-->WEP密钥 再输入主页,,就完成......然后打开网络...应该就可以上网了web 测试点总结(转)
2010-02-25 12:31:27
1. 页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确。可以使用一些工具,如LinkBotPro、File-AIDCS、HTML Link Validater、Xenu等工具。LinkBotPro不支持中文,中文字符显示为乱码;HTML Link Validater只能测试以Html或者htm结尾的网页链接;Xenu无需安装,支持asp、do、jsp等结尾的网页,xenu测试链接包括内部链接和外部链接,在使用的时候应该注意,同时能够生成html格式的测试报告。如果系统用QTP进行自动化测试,也可以使用QTP的页面检查点检查链接。2. 相关性检查:
* 功能相关性:删除/增加一项会不会对其他项产生影响,如果产生影响,这些影响是否都正确,常见的情况是,增加某个数据记录以后,如果该数据记录某个字段内容较长,可能会在查询的时候让数据列表变形。
* 数据相关性:下来列表默认值检查,下来列表值检查,如果某个列表的数据项依赖于其他模块中的数据,同样需要检查,比如,某个数据如果被禁用了,可能在引用该数据项的列表中不可见。
3. 检查按钮的功能是否正确:如新建、编辑、删除、关闭、返回、保存、导入,上一页,下一页,页面跳转,重置等功能是否正确。常见的错误会出现在重置按钮上,表现为功能失效。
4. 字符串长度检查: 输入超出需求所说明的字符串长度的内容, 看系统是否检查字符串长度。还要检查需求规定的字符串长度是否是正确的,有时候会出现,需求规定的字符串长度太短而无法输入业务数据。
5. 字符类型检查: 在应该输入指定类型的内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字符类型),看系统是否检查字符类型。
6. 标点符号检查: 输入内容包括各种标点符号,特别是空格,各种引号,回车键。看系统处理是否正确。常见的错误是系统对空格的处理,可能添加的时候,将空格当作一个字符,而在查询的时候空格被屏蔽,导致无法查询到添加的内容。
7.特殊字符检查:输入特殊符号,如@、#、$、%、!等,看系统处理是否正确。常见的错误是出现在% ‘ \ 这几个特殊字符
8. 中文字符处理: 在可以输入中、英文的系统输入中文,看会否出现乱码或出错。
9. 检查信息的完整性: 在查看信息和更新信息时,查看所填写的信息是不是全部更新,更新信息和添加信息是否一致。要注意检查的时候每个字段都应该检查,有时候,会出现部分字段更新了而个别字段没有更新的情况。
10. 信息重复: 在一些需要命名,且名字应该唯一的信息输入重复的名字或ID,看系统有没有处理,会否报错,重名包括是否区分大小写,以及在输入内容的前后输入空格,系统是否作出正确处理。
11. 检查删除功能:在一些可以一次删除多个信息的地方,不选择任何信息,按“delete”,看系统如何处理,会否出错;然后选择一个和多个信息,进行删除,看是否正确处理。如果有多页,翻页选,看系统是否都正确删除,并且要注意,删除的时候是否有提示,让用户能够更正错误,不误删除。
12. 检查添加和修改是否一致: 检查添加和修改信息的要求是否一致,例如添加要求必填的项,修改也应该必填;添加规定为整型的项,修改也必须为整型.
13. 检查修改重名:修改时把不能重名的项改为已存在的内容,看会否处理,报错.同时,也要注意,会不会报和自己重名的错.
14. 重复提交表单:一条已经成功提交的纪录,返回后再提交,看看系统是否做了处理。对于Web系统来说,可以通过浏览器返回键或者系统提供的返回功能。
15. 检查多次使用返回键的情况: 在有返回键的地方,返回到原来页面,重复多次,看会否出错。
16. 搜索检查: 有搜索功能的地方输入系统存在和不存在的内容,看搜索结果是否正确.如果可以输入多个搜索条件,可以同时添加合理和不合理的条件,看系统处理是否正确,搜索的时候同样要注意特殊字符,某些系统会在输入特殊字符的时候,将系统中所有的信息都搜索到。
17. 输入信息位置: 注意在光标停留的地方输入信息时,光标和所输入的信息会否跳到别的地方。
18. 上传下载文件检查:上传下载文件的功能是否实现,上传文件是否能打开。对上传文件的格式有何规定,系统是否有解释信息,并检查系统是否能够做到。下载文件能否打开或者保存,下载的文件是否有格式要求,如需要特殊工具才可以打开等。上传文件测试同时应该测试,如果将不能上传的文件后缀名修改为可以上传文件的后缀名,看是否能够上传成功,并且,上传文件后,重新修改,看上传的文件是否存在。
19. 必填项检查:应该填写的项没有填写时系统是否都做了处理,对必填项是否有提示信息,如在必填项前加“*”;对必填项提示返回后,焦点是否会自动定位到必填项。
20. 快捷键检查:是否支持常用快捷键,如Ctrl+C、 Ctrl+V、 Backspace等,对一些不允许输入信息的字段,如选人,选日期对快捷方式是否也做了限制。
21. 回车键检查: 在输入结束后直接按回车键,看系统处理如何,会否报错。这个地方很有可能会出现错误。
22.刷新键检查:在Web系统中,使用浏览器的刷新键,看系统处理如何,会否报错。
23.回退键检查:在Web系统中,使用浏览器的回退键,看系统处理如何,会否报错。对于需要用户验证的系统,在退出登录后,使用回退键,看系统处理如何;多次使用回退键,多次使用前进键,看系统如何处理。
24.直接URL链接检查:在Web系统中,直接输入各功能页面的URL地址,看系统如何处理,对于需要用户验证的系统更为重要。如果系统安全性设计的不好,直接输入各功能页面的URL地址,很有可能会正常打开页面。
25.空格检查:在输入信息项中,输入一个或连串空格,查看系统如何处理。如对于要求输入整型、符点型变量的项中,输入空格,既不是空值,又不是标准输入。
26.输入法半角全角检查:在输入信息项中,输入半角或全角的信息,查看系统如何处理。如对于要求输入符点型数据的项中,输入全角的小数点(“。”或“.”,如4.5);输入全角的空格等。
27.密码检查:一些系统的加密方法采用对字符Ascii码移位的方式,处理密码加密相对较为简单,且安全性较高,对于局域网系统来说,此种方式完全可以起到加密的作用,但同时,会造成一些问题,即大于128的Ascii对应的字符在解密时无法解析,尝试使用“uvwxyz”等一些码值较大的字符作为密码,同时,密码尽可能的长,如17位密码等,造成加密后的密码出现无法解析的字符。
28.用户检查:任何一个系统,都有各类不同的用户,同样具有一个或多个管理员用户,检查各个管理员之间是否可以相互管理,编辑、删除管理员用户。同时,对于一般用户,尝试删除,并重建同名的用户,检查该用户其它信息是否重现。同样,提供注销功能的系统,此用户再次注册时,是否作为一个新的用户。而且还要检查该用户的有效日期,过了有效日期的用户是不能登录系统的。容易出现错误的情况是,可能有用户管理权限的非超级管理员,能够修改超级管理员的权限。
29.系统数据检查:这是功能测试最重要的,如果系统数据计算不正确,那么功能测试肯定是通不过的。数据检查根据不同的系统,方法不同。对于业务管理平台,数据随业务过程、状态的变化保持正确,不能因为某个过程出现垃圾数据,也不能因为某个过程而丢失数据。
30.系统可恢复性检查:以各种方式把系统搞瘫,测试系统是否可正常迅速恢复。
31.确认提示检查:系统中的更新、删除操作,是否提示用户确认更新或删除,操作是否可以回退(即是否可以选择取消操作),提示信息是否准确。事前或事后提示,对于Update或Delete操作,要求进行事前提示。
32.数据注入检查:数据注入主要是对数据库的注入,通过输入一些特殊的字符,如“’”,“/”,“-”等或字符组合,完成对SQL语句的破坏,造成系统查询、插入、删除操作的SQL因为这些字符而改变原来的意图。如select * from table where id = ‘ ’ and name = ‘ ’,通过在id输入框中输入“12’-”,会造成查询语句把name条件注释掉,而只查询id=12的记录。同样,对于update和delete的操作,可能会造成误删除数据。当然还有其它一些SQL注入方法,具体可以参考《SQL应用高级SQL注入.doc》,很多程序都是基于页面对输入字符进行控制的,可以尝试跳过界面直接向数据库中插入数据,比如用Jmeter,来完成数据注入检查。
33.刷新检查:web系统中的WebForm控件实时刷新功能,在系统应用中有利有弊,给系统的性能带来较大的影响。测试过程中检测刷新功能对系统或应用造成的影响(白屏),检查控件是否回归默认初始值,检查是否对系统的性能产生较大影响(如每次刷新都连接数据库查询等)。
34.事务检查:对于事务性操作,断开网络或关闭程序来中断操作,事务是否回滚。
35.时间日期检查:时间、日期验证是每个系统都必须的,如2006-2-29、2006-6-31等错误日期,同时,对于管理、财务类系统,每年的1月与前一年的12月(同理,每年的第1季度与前一年的第4季度)。另外,对于日期、时间格式的验证,如2006年2月28日、2006-2-28、20060228等。日期检查还要检查日期范围是否符合实际的业务,对于不符合时间业务的日期,系统是否会有提示或者有限制
36.多浏览器验证:越来越多的各类浏览器的出现,用户访问Web程序不再单单依赖于Microsoft Internet Explorer,而是有了更多的选择:Maxthon、Firefox、Tencent Traveler等,考虑使用多种浏览器访问系统,验证效果。
37.安装测试:对于C/S架构的系统,安装程序的测试是一个重要方面,安装程序自动化程度、安装选项和设置(验证各种方案是否都能正常安装)、安装过程中断测试、安装顺序测试(分布式系统)、修复安装及卸载测试。
38.文档测试:主要是对用户使用手册、产品手册进行测试,校验是否描述正确、完整,是否与当前系统版本对照,是否易理解,是否二义性等。
39.测试数据检查:事实告诉我们,测试数据比代码更有可能是错的,因此,当测试结果显示有错误发生的时候,怀疑代码错误前要先对测试数据检查一遍。
40.请让我的机器来运行:在某些项目中,出现一个病态的问题:系统没有问题呀,它在我的机器上是能够通过的。这就说明了其中存在着和环境相关的BUG。“是否所有的一切都受到了版本控制工具的管理?”、“本机的开发环境和服务器的环境是否一样?”、“这里是否存在一个真正的BUG,只不过是在其他的机器里偶然出现?”。所有的测试必须在所有系统要求的机器上运行通过,否则的话,代码就可能存在问题。
41.Ajax技术的应用:Ajax有很多优点,但也有很多缺点,如果利用优点、避免缺点,是我们对新的Web2.0应用的一个挑战。而Ajax的应用最直接的问题就是用户体验,用户体验的效果直接关系到是否使用Ajax技术。“会做,并不意味着应该做、必须做”,这就是对Ajax技术的很重要的注解。
42.Ajax技术的应用:Ajax采用异步调用的机制实现页面的部分刷新功能,异步调用存在异常中断的可能,尝试各种方法异常中断异步的数据调用,查看是否出现问题。在这里遇到的一个问题就是对日期控件的操作,已经如果页面数据较多的时候的刷新。
43.脚本错误:随着Ajax、IFrame等异步调用技术的发展,Javascrīpt技术也越来越受到开发人员的重视,但Javascrīpt存在调试困难、各浏览器存在可能不兼容等问题,因此在Web系统中,可能会出现脚本错误。同时,脚本错误造成的后果可大、可小,不能忽视。
凡是远见的人,都是在做好本职工作的同时,有更远的追寻的梦。梦的能量是可大可小的,大的时候能改变世界,小的时候能诱发激情。
我的栏目
标题搜索
我的存档
数据统计
- 访问量: 69056
- 日志数: 150
- 建立时间: 2008-04-20
- 更新时间: 2018-09-02