.Net培训个人总结笔记33

学习交流,欢迎转载。转载请注明文章来源:http://www.cnblogs.com/lgjspace/archive/2011/01/12/2214013.html

 

细节:
之所以服务器端可以修改客户端的 Cookie 信息,是因为客户端在提交表单时,还会同时强制性地提交与该网页相关的 Cookie 信息数据给服务器。

 

注意:
aspx 文件中封装的 IsPostBack 属性也是通过使用 ViewState 来实现的,如果一旦禁用了 ViewState,则 IsPostBack 返回的永远为 false。

 

技巧:
通过在请求时传入无意义的且参数的值每次都不一样的参数来使每次提交页面都能得到刷新,防止缓存效果。
eg:<img src = "验证码.ashx" onclick = "this.src = '验证码.ashx?aaa = ' + new Date();" />,这里的“new Date()”每次都产生出不一样(一秒以内来不及更新的除外)的日期字符串,从而实现“上传的 aaa 参数值每次都不一样”的效果。

 

细节:
现在大多数用的 http 协议一般都是 http/1.1

 

细节:
Http 协议中的连接一般都是请求完毕就关闭,不会保持连接。

 

细节:
客户端提交页面请求时,浏览器为每一个文件都发出单独的一个请求,例如:在一个同时含有 css 文件、js 文件、图片文件的页面请求中,浏览器为每个文件单独地发出一个请求,而不会各种文件共享一个请求。

 

细节:
http 报文中的 Connection:Keep-Alive 只是一个建议,建议服务器端“把连接保持打开”,但并不代表服务器一定会听从报文中的“建议”把连接保持,服务器仍然可以把链接断开。

 

细节:
Http 是无状态的,不会记得上个请求的信息数据,所以哪怕是同一个页面中的 js、css、jpg 也都要重复的提交 Accept-Language、Accept-Encoding、Cookie 等报文信息。

 

常识:
IE页面代码:
200:处理成功;
301(不肯定是301还是361):重定向;
400:
404:页面找不到;
500:内部服务器错误;
以下是0910的ppt中关于响应码的描述:
浏览器向服务器发出请求,服务器处理可能是成功、可能是失败、可能没有权限访问等原因,服务器会通过响应码来告诉浏览器处理结果。
"200" : OK
"301" : Moved Permanently  永久转移
"302" : Found 暂时转移
"307" : Temporary Redirect 临时重定向
"400" : Bad Request 错误请求,发出错误的不符合Http协议的请求
"401" : Unauthorized 未认证。一般需要用户名、密码才能登陆。
"403" : Forbidden 禁止
"404" : Not Found 未找到。演示访问一个不存在的页面看报文
"500" : Internal Server Error 服务器内部错误。演示页面抛出异常。
"503" : Service Unavailable。一般是访问人数过多。
200 段是成功;300 段需要对请求做进一步的处理;400 段表示客户端请求错误;500 段是服务器的错误。

 

细节:
网页中的用来选择要上传的文件的“文件选择按钮”(如:“浏览”按钮)的对应 html 标签是“<input type = "file"/>”。

 

区别:
“按钮提交方式”和“超链接方式”的区别:
1. “超链接方式”和表单的提交没有任何关系,刷新时不会提示重试;
2. “按钮方式”则是以提交表单的方式提交的,首先必须要求有被提交的表单。而且还有一点要注意,如果被提交的表单的提交方式是 post 的话,点击按钮时会提示重试。
3. “超链”接方式用右键单击也可以打开,而按钮提交方式则不被允许。
4. “超链接方式”是直接打开,没有提交表单,这有可能导致“在提交给带有“IsPostBack”判断的处理程序时,由于是直接打开,不属于 IsPostBack,以致响应回来的页面内容可能会和预想的不一样”。
5. “按钮方式”会向服务器提交整个表单,而“超链接方式”则只是直接打开一个页面。
关于这区别的当时上课时自己的总结:
通过 link 的形式和通过 button 的形式来跳转页面的区别:前者是通过超链接的方式来跳转,参数是通过在超链接的链接地址 href 中写明来传递;后者是通过提交表单的方式来跳转,参数是通过表单中元素的 name,value 来传递,而且由于触发了表单的提交动作,因此是属于 IsPostBack ,跳转后如果手动刷新页面的话会出现提示重新提交的弹窗,而这种情况不会发生在link形式的跳转方式上。

 

细节:
运行在客户端的表单(即“没有标明 runat = "server" 的 form 表单”)的默认提交方式是“method = "get"”,而运行在服务器端的表单(即“有标明 runat = "server" 的 form 表单”)的默认提交方式则是“method = "post"”。

 

细节:
1. 浏览器接收的(无论是什么类型的)所有数据或文件都是服务器端的处理程序(*.ashx、*.aspx 等)返回回来的响应结果。
2. 除非服务器有漏洞,否则客户端浏览者无法查看服务端的 aspx、ashx、cs 或者是用来作为模板使用的 html 页面等文件的源代码,即使是“目标另存为”下载下来的文件也是服务端的处理程序(*.ashx、*.aspx 等)执行后的处理结果。

 

细节:
一个字符串类型的值加上一个非字符串类型的值后的新结果还是字符串类型的值。

 

细节:
ASP.NET 中,Button 按钮的 OnClientClick 属性表示的是:点击该 Button 按钮时所触发的在客户端浏览器中执行的 javascript 代码。在该属性中添加 javascript 代码即可让页面里的该按钮标签中自动生成在客户端运行的 javascript 代码。

 

细节:
对于服务器端的代码来说,生成的一堆 Html 代码仅仅是普通的一堆字符串,没有任何意义,只有到了浏览器端执行才有意义。

 

细节:
1.  127.0.0.1:回环地址(LoopBack),就是表示通过回环地址访问本机,数据不经过网卡,哪怕是本机外网地址也访问不了。localhost就是回环地址(127.0.0.1)的别名,这种回环地址的方式无法从外部访问,只能通过本机来访问。
2.  0.0.0.0:任意IP(AnyIP),通过任何一块网卡都可以访问网络程序。
3.  VisualStudio 中自带的服务器监听的是“回环地址”localhost,此时如果用本机对应的外网的 IP 地址来打开是不行的,必须得以“回环地址”来连接。例如:假设有一个页面“http://211.68.43.38:2209/WebSite/Text.aspx”(其中“211.68.43.38”是外网的 IP 地址,“2209”是端口号),如果要在本机中通过 VS 自带的服务器来打开该页面(客户端和服务器端都是这台机器),这地址是不行的,因为这地址走的是外网的路线,而 VS 的服务器监听的则是不经网卡的回环地址,此时必须把页面地址改成“http://127.0.0.1:2209/WebSite/Text.aspx”,才能成功连接。

 

细节:
VS 自带的服务器只支持回环地址(localhost,127.0.0.1),而它的开源版本则支持 AnyIP(0.0.0.0)。

 

方法:
在 IE 浏览器中禁用 JavaScript 的方法:
1. 按快捷键 F12 ,或手动在菜单中选择打开“开发人员工具”,在该“开发人员工具”中禁用 JavaScript;
2. 打开 IE 的“Internet 选项”对话框,选中“安全”标签,点击“自定义级别”,在里面的选项中禁用 JavaScript。

 

经验:
关于安全方面的数据校验,无论是客户端还是服务器端,都要编写校验代码,一个都不能少,客户端的校验是为了有良好的用户体验以及减少网络带宽及服务器端的负担,而服务器端的校验则是最后的把关防线,如果客户端禁止了 JS,则服务器端还可以进行最后的检验。

 

细节:
对于服务器端的控件 <asp:Button 来讲,onclick 是服务端事件,OnClientClick 最终也是生成到客户端浏览器中的普通 onclick 事件代码。而对于客户端的 html 页面的标签来讲,则只有 html 协议承认的 onclick 事件,没有什么 OnClientClick 之类的其它奇形怪状的代码。

 

细节:
服务器端的 TextBox1.Visible = false 并不等同于客户端的“getElementById('TextBox1').style.display = 'none'”,虽然两者的功能都是把 Name(或 ID)的值为 TextBox1 的控件“隐藏”,但前者是真正的“没把该控件标签画到客户端的 html 页面中”,而后者则仅仅是“把该控件标签写到页面中,但把它设置成不显示在浏览器页面上”而已,在浏览器上右键单击“查看源代码”后依然能看到该标签及其内部的内容。

 

细节:
在 *.aspx 页面中的 Response.Redirect("") 方法的作用是重定向到另外一个页面,方法参数中的字符串填的是要重新连接到的目标页面地址,而且如果参数中的地址带有需要 URLEncode 的字符的话,该方法还会自动为这些字符进行 URLEncode 操作。如:“Response.Redirect("ShowMsg.aspx?Msg=不能为空");”

 

细节:
ASP.NET 默认会拦截客户端的非法数据的提交,如:客户端把一些 js 代码提交给服务器时,会被 VS 拦截。
如果要强制关掉 VS 的这一默认的检验功能,可以在 *.aspx 页面最顶一行中加上“ValidateRequest = "false"”即可(但该操作在 VS2010 行不通,在 VS2010 中还要按照报错信息修改 Web.config)。

 

小细节:
表单标签 <form></form> 不能嵌套使用。

 

细节:
1.  使用“HtmlUtility.HtmlEncode("")”就可以将字符串中的特殊字符(如:“<”、“/”等)转换为让 Html 直接显示出来(而不是对其进行执行操作)的字符,例如:不是把 <script> 当成定义脚本的标签,而是当成“&lt;script&gt;”这样可以在页面上直接显示出来的内容。
2.  要是如果想反方向地操作,则可以用“HttpUtility.HtmlDecode("已经被“Encode”过的内容")”来操作。

 

细节:
除了 HttpUtility.HtmlEncode("") 之外,还可以使用 Literal 控件来显示。Literal 控件也可以通过把 Mode 属性的值设为 Encode 来对控件里的内容自动进行 HtmlEncode 操作。

 

细节:
之所以有 XSS 漏洞,本质上是因为 服务器端把客户端提交回来的内容原封不动不加筛选地直接“写回”到响应回去的 html 页面上。

posted @ 2011-10-13 00:22  梁国锦  阅读(207)  评论(0编辑  收藏  举报