Request成员:
1.Request.UrlReferer 请求的来源,可以根据这个判断从百度搜的哪个关键词,防下载盗链,防图片盗链,可以伪造(比如迅雷)。
2.Request.UserHostAddress获得访问者的IP地址
3.Request.MapPath(virtualPath):将虚拟路径转换为磁盘上的物理路径。
图片防盗链的思想就是将客户端上次请求的URL信息和当前客户请求的URL信息进行比较,如果同在一个域名下或同一个IP地址下,
就说明是自己网站内部的页面 在申请自己网站内部的图片。在一般处理程序中,简单代码如下:
Uri uri1 = context.Request.UrlReferrer;
Uri uri2 = context.Request.Url;
if (Uri.Compare(uri1, uri2, UriComponents.HostAndPort, UriFormat.SafeUnescaped, StringComparison.OrdinalIgnoreCase) != 0)
{
context.Response.Clear();
context.Response.Close();
}
else
{
}
Response对象成员
响应的缓冲输出:为了提高服务器的性能,ASP.Net向浏览器Write的时候默认并不会没Write一次
都会立即输出到浏览器,而是会缓存数据,到合适的时机或是响应结束才能将缓冲区的数据一起发送到浏览器。
Response对象的主要成员:
Response.Buffer,Response,BuffetOutput:这两个其实是一样,用来控制是否采用响应缓存,默认是true;
Response.Flush()将缓冲区中的数据发送给浏览器。这在需要将write出来的内容立即输出到浏览器的场合非常的使用。
例如:我们可以使用一个小例子来模拟Response.Flush()的效果:
在一般处理程序中:
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/html";
for (int i = 0; i < 20; i++)
{
context.Response.Write(i);
context.Response.Flush();
System.Threading.Thread.Sleep(500);
}
}
使用response.flush那么数字是一个一个蹦出来的。
如果不适用,数字一口气会都加载下来。
Response.Clear()清空缓存区中的数据,这样在缓存区中的没有发送到浏览器端的数据被清空,不会被发送到浏览器。
Response.ContentEncoding输出流的编码。
Resoponse.ContentType输出流的内容类型。比如是html(text/html)还是普通文本(text/plain)还是JPEG图片(image/JPEG);
Response.OutputStream输出流,在输出图片。Excel文件等非文本内容的时候也要使用它。
Response.End()终止响应,将之前缓存中的数据发给浏览器,End()之后的代码不会被继续执行,在反编译器内部,End方法调用了Flush()方法,
在终止一些非法请求的时候,可用End()终止请求。
Server属性:
Server属性是HttpServerHtility的一个实例,它对工队服务器上的方法和属性的访问。
Server.MapPath():获取文件的物理路径
Server.Execute和transfer():执行另一个页面的脚本
server.HtmlEncode()和HtmlDecode()方法:将文本编码成可以在浏览器中科正确浏览的格式
server.UrlEncode方法和UrlDecode方法:URL编码和解码
Server.Tranfser()和ResponseRedirect()的区别:
Server.Tranfser()是服务器内部的接管(不可以重定向到外部网站),这个重定向是和浏览器没有任何关系的,索引浏览器的地址栏不会发生变化。
Response.Redirect ()可以重定向到外部网站