原博客:http://blog.sina.com.cn/s/blog_7e60af8b010154qw.html

一、浏览器提交数据的几种方式

a.在地址栏输入url并确定,    eg:  https://hao.360.cn/?a1004;

b.通过js的window.location跳转(暂不了解),eg:  window.location="List.ashx?cid=2";

c.超链接跳转:<a href="login.ashx">

d.通过表单的get/post提交

<form action="List.ashx?cid=2" method="get"></form>

<form action="login.ashx" method="post"></form>

e.使用异步get/post提交数据(暂不了解):  $.post(),$.get()...

二、服务器如何获取浏览器提交的数据?

1.获取POST数据:context.Request.Form[“txtname”]
     2.获取GET参数:context.Request.QueryString[“txtname1”]

三、服务器如何向浏览器输出数据?

1. 服务器向浏览器输出文本内容:

context.Response.ContentType = "text/plain";

context.Response.Write(“我是从服务器输出到浏览器的数据!:)”);
    //Response 允许开发人员对当前页面的输出流进行操作
    //write:直接在页面上输出内容,将内容存在httpwriter中的char数组

2.服务器向浏览器输出js代码:
    context.Response.ContentType = "text/html";
    context.Response.Write("<script>alert('格式错误');</script>");

3.redirect:重定向到另外一个页面,服务其发送命令让浏览器跳转
       原理:服务器向浏览器发送一个包含302状态码和Location的响应报文,浏览器看到302后就会自动请求Location指定的页面。Response.Redirect(location);

4.end:立即输出Response里保存的响应报文数据,并停止当前页面代码的执行。Response.End();

四、关于表单提交数据:

浏览器向服务器提交数据,被提交数据的表单(input、select、textarea等)放到form中,form中通过action属性设定表单被提交给哪个页面,为了在服务取出表单项的值,需要在html中为表单元素设定name属性,注意id是给JS操作Dom用的,name才是提交给服务器用的。在服务器端用context.Request["username"]来根据表单项的name来获得提交的属性值。通过context.Response.Write向浏览器输出处理后的显示HTML内容。

当我们点击“提交”按钮以后是浏览器将用户填写的文本框等控件中的值“提取”出来发送给服务器,而不是服务器来读取用户填写的这个页面。哪些标签的哪些值会被提交给服务器呢?将用户填写的内容提交到服务器有如下几个条件:

1.只能为input、textarea、select三种类型的标签。只有input(文本框、CheckBox等)用户才可能填写值,<label>、<p>、<font>等标签仅供显示用,没有提交到服务器的必要。

2.只有value属性的值才会提交给服务器。以input标签为例,input标签有title、type、disabled等属性,但是这些属性都是供显示用的,用户并不能修改,只有value属性才是用户输入的属性,因此只有value属性的值才会被提交到服务器。

3.标签必须设定name属性。如果要通过JavaScript操作标签,必须为标签设定Id。如果要将标签的value属性值提交到服务器,则必须为标签设定name属性,提交到服务器的时候将会以“name=value”的键值对的方式提交给服务器,多个键值对之间用&分割。name是给服务器用的,id是给Dom用的。

4.除了单选按钮等少数标签之外,大部分标签的name的值不能重复。如果两个Input文本框的name都为“txtN”,那么提交结果为txtN=123&txtN=768,在服务器取时:Request.Form["txtN"]= 123,678。

对于RadioButton,同name的为一组,选中的RadioButton的value被提交到服务器。

5.如果设置了控件的disabled属性或enabled=false的话,浏览器也不会提交该控件的值。如果只读(readonly=true),还是会被提交。

6.只有放到form标签内的标签才可能会被提交到服务器,form之外的input等标签被忽略。

注意:1.易犯错误:string 转 int 时,不能使用(int)强转,必须使用对应的转换方法如
int.Parse,int.TryParse,Conver.ToInt32
      2.服务器不允许使用post方式请求静态页面(因为静态页面不能接收浏览器传递(post)过来的数据)。

五、get和post的区别

get是通过url传递表单值,post通过url看不到表单域的值;

get传递的数据量是有限的,如果要传递大数据量不能用get,比如type=“file”上传文章、type=“password”传递密码或者<textarea>发表大段文章,post则没有这个限制;

post会有浏览器提示重新提交表单的问题,get则没有。

对于Post的表单重新敲地址栏再刷新就不会提示重新提交了,因为重新敲地址就没有偷偷提交的数据了。

Post方式的正确的地址很难直接发给别人。Get方式URL数据格式。服务端文件名后跟着“?”,由于客户端可能向服务器端提交多个键值对,键值对之间用“&”进行分割,如果URL中有汉字、特殊符号等,则需要对URL进行编码。

六、Request其它成员
1、Request.UrlReferrer请求的来源,可以根据这个判断从百度搜的哪个关键词、防下载盗链、防图片盗链,可以伪造。

扩展--图片盗链:

服务器B的输出给浏览器的页面中包含服务器A的图片。这样对于浏览器用户来说,只知道访问了服务器B的页面,但不知道图片是从服务器A输出的。所以服务器A要防止别的服务器访问它的图片等其它资源。

在处理程序映射上增加图片后缀的映射,把它交给对应的动态页面去判断,这样,IIS就不会直接处理图片,而是交由FrameWork处理.在文件通过请求管道时,因为设了Global.asax配置文件把关。

public class Global :System.Web.HttpApplication
    {
/// <summary>
/// 使用事件自动注册机制,此方法会自动注册到 HttpApplication请求管道的第一个事件上
/// </summary>
protected void Application_BeginRequest(object sender, EventArgse)
{
HttpApplication application = sender as HttpApplication;
HttpRequest request = application.Context.Request;
HttpResponse response = application.Context.Response;
//防止盗链
if (request.RawUrl.Contains(".png"))
{
//如果请求的来源 不是 图片所在的网站,则判断为盗链行为
if (request.UrlReferrer.Port!= 19449)
{
response.ContentType = "image/jpeg";
using (Image img = new Bitmap(500, 200))//创建图片
{
using (Graphics g = Graphics.FromImage(img))//在图片上创建画笔
{
g.DrawString("这是图片盗链",new Foont("宋体",22),Brushes.White,2,2);

}

img.Save(response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);//将图片保存在指定的流中
}
response.End();
}

2、Request.UserHostAddress获得访问者的IP地址,通过Socket获得的。

3、Request.MapPath(virtulPath)将虚拟路径转换为磁盘上的物理路径,Request.MapPath("./a/b.aspx")就会得到D:\2008\WebSites\WebSite4\a\b.aspx(Server.MapPath里就是调用的Request.MapPath)

4、 (*)Request.AppRelativeCurrentExecutionFilePath,获取当前执行请求相对于应用根目录的虚拟路径,以~开头,比如“~/Handler.ashx”

5、 (*) Request.PhysicalApplicationPath,获取当前应用的物理路径,比如D:\我的文档\VisualStudio 2008\WebSites\WebSite4\

6、 (*) Request.PhysicalPath,获取当前请求的物理路径,比如D:\我的文档\Visual Studio2008\WebSites\WebSite4\Handler.ashx

7、 (*)Request.RawUrl获得原始请求URL、Request.Url获得请求的URL,区别涉及到URL重写的问题

8、 (*)Request.UserLanguages获得访问者浏览器支持的语言,可以通过这个实现对不同语言的人显示不同语言的页面。

七、Response其它成员
   响应的缓冲输出:为了提高服务器的性能,ASP.Net向浏览器Write的时候默认并不会每Write一次都会立即输出到浏览器,而是会缓存数据,到合适的时机或者响应结束才会将缓冲区中的数据一起发送到浏览器。
   Response对象的主要成员:

1、Response.Buffer、Response.BufferOutput:两个属性一样,Buffer内部就是调用的BufferOutput。这个属性用来控制是否采用响应缓存,默认是true。

2、Response.Flush()将缓冲区中的数据发送给浏览器。这在需要将Write出来的内容立即输出到浏览器的场合非常适用。案例:大批量数据的导入,显示正在导入第*条数据,用Thread.Sleep模拟耗时。

3、Response.Clear()清空缓存区中的数据,这样在缓存区中的没有发送到浏览器端的数据被清空,不会被发送到浏览器。

4、Response.ContentEncoding输出流的编码。

5、Response.ContentType输出流的内容类型,比如是html(text/html)还是普通文本(text/plain)还是JPEG图片(image/JPEG)。

6、Response.OutputStream 输出流,在输出图片、Excel文件等非文本内容的时候要使用它

7、Response.End() 终止响应,将之前缓存中的数据发给浏览器,End()之后的代码不会被继续执行,End方法里调用了Flush()方法。在终止一些非法请求的时候,比如盗链等可以用End()立即终止请求。

八、Server属性
   Server是上下文对象context的一个属性,是HttpServerUtility类的一个对象,它提供对服务器上的方法和属性的访问。

常用方法:
1、MapPath方法:取得文件的物理路径

2、Transfer:第一个页面直接调用第二个页面,执行完第二个页面后不再返回第一个页面,立即响应到客户端浏览器。

Server.Transfer(path)内部重定向请求,Server.Transfer(“JieBanRen.aspx”)将用户的请求重定向给JieBanRen.aspx处理,是服务器内部的接管(不能重定向到外部网站),浏览器是意识不到这个接管的,不是象Response.Redirect那样经历通知浏览器“请重新访问url这个网址”和浏览器接到命令访问新网址的过程,是一次http请求,因此浏览器地址栏不会变化。

因为是内部接管,所以在被重定向到的页面中是可以访问到Request、Cookies等这些来源页面接受的参数的,就像这些参数是传递给他的,而Redirect则不行,因为是让浏览器去访问的。

注意Transfer是内部接管,因此不能像Redirect那样重定向到外部网站。Response.Redirect就可以重定向到外部网站,但不能内部重定向到ashx,否则会报错“执行子请求出错”。

3、Execute:第一个页面直接调用第二个页面,执行完第二个页面后再返回第一个页面执行,最后响应到客户端浏览器。

4、HtmlEncode()&HtmlDecode():将文本编码成可以在浏览器中可正确浏览的格式

5、UrlEncode()&&UrlDecode():URL编码和解码
*HtmlEncode和UrlEncode的区别:UrlEncode是处理超链接中的中文问题,HtmlEncode是处理html代码的

HttpContext(请求上下文对象)相关推荐

  1. [译] ASP.NET 生命周期 – ASP.NET 上下文对象(七)

    使用 HttpRequest 对象 HttpRequest 对象描述的是一个正在被处理的 HTTP 请求.下表列举了 HttpRequest 中的属性,它们提供了当前请求的相关信息(HttpReque ...

  2. Web框架——Flask系列之请求上下文与应用上下文请求钩子Flask-Script扩展命令行(十七)

    一.请求上下文和应用上下文 请求上下文(request context) request和session都属于请求上下文对象. 应用上下文(application context) current_a ...

  3. python Flask 10 Flask请求上下文管理werkzeug

    什么是上下文    上下文相当于一个容器,保存了 Flask 程序运行过程中的一些信息. Flask 中有两种上下文,请求上下文(request 和 session )和应用上下文(current_a ...

  4. flask 核心 之 应用上下文 及 请求上下文

    Werkzeugs 是 Flask 的底层WSGI库. 什么是WSGI? 一段简单的app: def dispath_request(self, request):return Response('H ...

  5. 上下文对象及servletContext接口

    上下文对象是web服务器上基于web应用的一个背景环境对象,上下文对象提供了一个同一web应用内不同资源间共享信息的场所. -------------------------------------- ...

  6. flask中的请求上下文

    2019独角兽企业重金招聘Python工程师标准>>> 根据前一篇应用上下文可知,请求上下文的作用域是发生在请求到来之后. 如有一个应用函数返回用户应该跳转到的URL.想象它总是会跳 ...

  7. 应用上下文请求上下文

    用过 Flask 做 Web 开发的同学应该不会不记得 App Context 和 Request Context 这两个名字--这两个 Context 算是 Flask 中比较特色的设计.[1] 从 ...

  8. imi v0.3 发布,自动管理请求上下文,新增参数过滤器

    百度智能云 云生态狂欢季 热门云产品1折起>>>   亲爱朋友们,我又回来了,想死你们啦! 2个多月没有刷版本号,imi 并没有凉,而是因为我实在太忙啦! 我们公司项目使用 imi ...

  9. Android 创建其它应该程序的上下文对象

    // Context.CONTEXT_IGNORE_SECURITY 忽略安全检测         //getContext().createPackageContext 创建其它应该程序的上下文对象 ...

最新文章

  1. python PIL/Pillow图像扩展、复制、粘贴处理
  2. iOS开发UITableView随笔
  3. COSCon'21 参会指南 你想要的这里都有
  4. Kubernetes包管理器Helm发布3.0版本
  5. 初识virtual memory
  6. 中文邮件营销html模版,怎么制作邮件营销模板?— —邮件格式
  7. 常用正则表达式和shell命令列表
  8. 在静态页面中使用Scss(windows)
  9. 电脑亮度多少对眼睛好_电脑显示器亮度多少合适呢??
  10. python中的优化器有哪些_Python SciPy 优化器(Optimizers)
  11. NODE安装N管理出错
  12. 【机器学习-西瓜书】八、Bagging;随机森林(RF)
  13. 简易呼吸灯c语言程序,呼吸灯 - 单片机教程 - C语言网
  14. 路飞学城Python-Day49
  15. 如何彻底对chrome降级
  16. 【java】求一元二次方程的解
  17. 8086-逻辑运算指令
  18. 闪耀暖暖的3D建模真好吗?
  19. matlab trendsurface,供水管网压力异常工况下的趋势面分析模型及应用_期刊网
  20. FPGA实现ICA算法第一弹:XADC的使用

热门文章

  1. 彰显品质生活的牛皮席!
  2. Proteus仿真汽车氛围灯驱动电路及呼吸效果
  3. 参加2007新经济投融资大会感受
  4. FPS游戏之怪物受到伤害动画
  5. 视频播放器(ArkTS)
  6. vue实现web端飘窗组件
  7. 决策树5:剪枝与sklearn中的决策树
  8. 一、后端:针对用JAVA POI解决已知路径WORD文件增加自定义页眉,灵活设置页眉字体部分样式@2019
  9. 常见集群(Cluster)软件和技术解析
  10. 数据结构课程设计_《旅游景区信息管理系统》