ASP.NET是一种动态网页技术,在服务器端运行.NET代码,动态生成HTML。
Web Application和Web Site的区别:
WebSite是为了兼容从ASP转过来的开发人员的习惯而存在的,用起来简单,比如不需要船桨命名空间、CS代码修改后不需要重启就能换看到变化(WebApp和WebSite修改aspx都不需要重启),但是不利于工程化开发,例如代码出错不容易发现,代码不分命名空间(开发技术上面没任何区别,只是开发、调试习惯不同而已)。
请求----处理-----响应模型
Get与Post
设定form的method属性指定表单提交方式,get(默认值)是通过URL传递表单值,post传递的表单值是隐藏在http报文中,url中看不到。
get与post的区别:get是通过url传递表单值,post通过url看不到表单域的值;get传递的数据量是有限的,如果要传递大数据量不能用get,比如type=‘file'上传文章、type='password'传递密码或者<textarea>发表大段文章,post则没有这个限制;post会有浏览器提示重新提交表单的问题,get则没有。对于post方式的表单重新敲地址栏就不会提示重新提交了,因为重新敲地址栏没有‘偷偷’提交表单。
get方式url数据格式。服务器文件名后跟着"?",多个健值用"&"分割,url中有汉字、特殊符号等,要对url进行编码。
表单域只有设定了name的才会被提交给服务器(用get方式看的清楚)。submit按钮设定name,那么按钮的value也会被提交给服务器。
非表单元素无法将客户端的元素值传递给服务器,即使是表单元素也只能传递value至,对于其他属性(背景颜色、大小等)也是无法传递的,因此对于这些值都要存在隐藏字段中。这就是ASP.NET中ViewState的实现原理。
用ViewStateDecode这个工具查看ViewState内容,发现确实将非表单域、非value值放到ViewState中。
无状态Http
http协议是无状态的,它不会记得上次和网页发生了什么。
服务器不记得上次给了浏览器什么,浏览器需要记住这些值(input就是记到value中,对于其他的值就要放到隐藏字段中,比如ViewState),下次再提交给服务器的时候就要把上次的值提交给服务器,让它“想”起来。
状态信息保存在隐藏字段中的缺点:
加大网站的流量、降低访问速度、机密数据放到表单中会有数据欺骗等安全性问题。
Cookie
有时候希望在服务器端任意的地方存取一些和访问者相关的信息,这时候就不方便将这些信息保存在表单中了,因为这样的话必须随时注意在所有页面表单中都保存这些信息。
Cookie是和站点相关的,每次向服务器请求的时候除了发送表单参数外,还会将和站点相关的所有Cookie都提交给服务器,是强制性的。
Session原理
每次请求都会new一个新的实现了IHttpHandler接口的类的实例进行处理,用完就GC掉,所以不会保持上次的值。
Cookie不能存储过多的信息。如果想保存大量的数据,可以保存一个guid到Cookie中,然后在服务器中建立一个一guid为Key,复杂数据为Value的全局Dictionary。静态(static)字段对于不同用户都一样,可以用static实现多用户共享数据。
不要放太多的对象到Session,Session会有超市销毁机制(好像20个 记不太清楚了)。
Cookie是存在客户端,Session是存在服务器端, 目的是一样的:保存和当前客户端相关的数据(当前网站的任何一个页面都能渠道Session、Cookie)。不能放太多的数据,数据类型为Object。
Http协议简介
Web开发是与http协议打交道,所以必须了解http协议。
http协议工具:DebugBar(标签)、httpwatch、httpAnalyzer(报文)
http协议的几个概念:
1.连接(Connection):浏览器和服务器之间传输数据的通道。一般请求完毕就关闭,不会保持连接。
2.请求(Request):浏览器想服务器发送的请求信息,包含请求的类型、数据、浏览器的信息(语言、浏览器版本等)。
3.响应(Response):服务器对浏览器请求的返回的数据,包含是否成功、错误码等。
http请求报文
用httpwatch查看响应情况。发现页面中的图片、js、css在单独的请求中。
Accept-Encoding gzip,deflate表示浏览器支持gzip,deflate两种压缩算法。
Accept-Language zh-cn表示浏览器支持的语言,很多进入后自动是中文的国际网站就是通过读取头信息的这个值实现的。
Connection Keep-Alive。一般情况下,一旦Web服务器向浏览器发送了请求数据,它就关闭TCP连接,然后如果浏览器或者服务器在其头信息中加入了Connection:Keep-alive,则TCP连接在发送后将仍然保持打开状态,于是,浏览器就可以继续通过相同的连接发送请求。
保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
Cookie是浏览器想服务器发送和当前网站关联的Coolie,这样在服务器端也能读取浏览器的Cookie。
User-Agent为浏览器版本信息。通过这个信息可以读取浏览器是IE、FF、支持的插件、.NET版本等。
http相应码
200:OK
301:永久重定向,302:暂时转移,307:Temporaty Redirect
400:请求错误,不符合http协议的请求。401:Unauthorized 未认证。一般需要用户名。密码才能登录。403:Forbidden禁止。404:Not Found
500:Internal Server Error。503:Service Unavailable。一般是访问人数过多。
请求响应模型例子
Button、HyperLink两种删除方式:按钮是将id通过表单提交到服务器的,超链接的方式是通过超链接的url通过get方式提交给出来页面。
超链接因为没有向服务器提交ViewState等隐藏字段,所以出来是IsPostBack是false,而按钮则是提交了表单,所以IsPostBack是true。(可以在超链接的href中写表单提交的JS,这就是WebFrom中的LinkButton的原理)