449状态码相关及应用示例
鬼仔注:前两天最早在sobiny那里看到的,后来在lcx那里看到相关代码,现在7j又写个php版本的
总结下
一、谈449
作者:sobiny[b.c.t]
来源:http://sobiny.cn
HTTP的状态码
大家经常见到的大概就是200,404,500等。
那449这个状态码是什么呢?
MSDN上的解释:
Retry after doing the appropriate action
GOOGLE在线翻译上说的是:
再审后,做适当的行动
呵呵,经过测试,IE浏览器接收到449这个HTTP状态码后的反应是:
先和普通的HTML的执行一样,先执行了449的返回的信息。
然后再自动浏览当前提交的页面。
其他浏览器没测试,估计也一样,不然就是浏览器的BUG了,因为这是正常的HTTP状态头呢。
在各种动态脚本中,这个状态码的作用似乎还是挺大的
可以在执行页面前,用JS做收集COOKIES等一些事情。。
或者验证用户的一些信息等。
不准想到挂马那方面去了。
在ASP里面有简单的实现的方法。
PHP也只需要设置HTTP状态头就行。
但是这里就不给出示例代码了。
http://sobiny.cn/6.asp
测试页面,呵呵
二、449状态码应用示例
lcx的版本
来源:vbs小铺
<%
If session("test")="" then
session("test")="a"
%>
<html>
<script language=jscript>
alert(1);
</script>
</html>
<%
Response.Status = "449"
else
session("test")=""
%>
<html>
</html>
<%
end if
%>
=================cookies版本
<%
dim Num
Num=Request.Cookies("Visit_num")
If num="" Then
num=1
Response.Cookies("Visit_num")=num
%>
<html>
<script language=jscript>
alert(1);
</script>
</html>
<%
Response.Status = "449"
else
num=num+1
Response.Cookies("Visit_num")=num
end if
If num>1 Then
Response.Status = "200"
Response.Cookies("Visit_num")=""
End if
%>
============
=====================另一个IE BUG
<script type="text/jscript">
function init() {
document.write("The time is: " + Date() );
}
window.onload = init;
</script>
————————————————————————
7j的PHP版本
来源:7jdg's Blog
<?
$thepass='helloword';
if (!isset($_COOKIE['webserver'])) {
setcookie ("webserver",$thepass,time()+(1*24*3600));
header("HTTP/1.1 449 Retry with");
echo "<script language=jscript>alert(1);</script>";
}
echo "<html>
</html>";
?>