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>";
?>

相关日志

发表评论