课程地址:https://www.bilibili.com/video/av14503912 (P298)
IIS
1,浏览器首先访问的是服务器的IIS,然后在访问网站程序
2,应用程序池的作用:将不同应用程序之间隔离开,不至于以这个网站挂了,其他的都挂了
3,物理路径对应着网站程序
Http
1,超文本传输协议:
1 请求响应模式:请求报文,响应报文
2 无状态
3 应用层的协议:基于TCP连接
4 Chrome可以分析每一个请求和响应的报文格式,包括:请求头,请求体,响应头,响应体
(1) Http在请求关闭后,一般不保持长连接状态:
缺点:不保持连接会降低处理速度(因为建立连接速度很慢)
优点:保持连接会占用服务器的资源,会降低浏览器的请求书数,而不保持连接服务器可以处理更多的请求
图:请求报文的格式:

图:响应码

图:IIS处理过程

Get&Post
1,表单以Get方式Submit则数据会在地址栏中显示;若以post请求则数据全部都放在请求报文的请求体中;在表单submit时,建议使用post,安全
2,浏览器中输入地址是Get,超链接是Get
3,只有将表单中的method改为post,才会出现post的请求方式
图:Get和Post两者的区别


1,Http请求的无状态性:第二次请求无法获取第一次的请求的处理结果(后续请求无法获得之前的请求计算的结果)(并没有get点)
2,context.Request.Form["textName"]:获取相应的模板中的值
3,context.Request.Write(xx);返回给浏览器渲染的东西
4,表单在submit时,只能提交表单元素的value属性,div则不可以submit,可以采用属性进行间接处理
~p309
1 brose访问html时,直接将html返回给brose渲染执行
2 brose访问.ashx时,会执行ashx后,找到html路径,并替换占位符,返回给brose渲染执行
3 在传递数据时,需要借助hidden属性来接受数据。
场景:A表格信息页面中点击某一行的信息中的“修改”功能,跳转至“修改”页面B,在“修改”页面修改后进行保存。
A中点击添加,在访问B时传递某信息行的ID,B中设置了hideen来接受,不把id显示出来;B修改完之后保存,再把B中的表单信息(包含隐藏的ID值)传给xxx.ashx进行数据库保存等后续操作。
4 当我们需要跳转一个页面时,比如“添加”页面,页面的呈现不需要从数据处理后替换模板占位符,则直接访问.html就行,不需要访问.ashx
重定向,请求的发起触发




上传文件
上传文件属于文件流,和数据流要区别对待


以上传图片文件为例:

上面针对图片文在ashx中的处理,有些处理不当的地方,下面进行补充

GDI+

图片添加水印:
服务器接受图片,将图片保存至文件夹,然后将图片路径地址保存在数据库某个字段下
context.Request.MapPath(path):将相对路径转换成绝对路径

验证码和缩略图
图变缩略:
请不要通过 height 和 width 属性来缩放图像。
如果通过 height 和 width 属性来缩小图像,那么用户就必须下载大容量的图像(即使图像在页面上看上去很小)。
http://www.w3school.com.cn/tags/att_img_height-width.asp
正确的做法是,在网页上使用图像之前,应该通过软件把图像处理为合适的尺寸。
简单的办法:将new BitMap(X,X)的参数减小;
但上述方法会使图片变形,若需要更好处理图片需要进行专业处理,下面是网上处理图片的类,可供参考
(https://www.cnblogs.com/mynameltg/p/4043501.html)
验证码生成:
验证码作用:增加网站暴力破解的难度
同样也是有相关的dll或者类文件专业的处理验证码问题

aspx:
-
html+ashx(一般处理程序) :ashx替换html中的占位符,将html返回给browser,开发效率比较低;
-
在复杂页面中开发中选择aspx(html+c#)+aspx.cs(c#)(类似于wpf)
-
当向服务器发送请求不需要返回html时,则直接访问ashx就ok,不需要aspx;
-
aspx和aspx.cs会单独生成两个类
-
aspx类 继承自 aspx.cs类:aspx中使用<%= xxx %>使用从继承过来的xxx属性
-
当请求到来后,框架会先执行aspx.cs中的Page_Load(),框架会帮助将html中的xxx属性都填好,最终将aspx中的html文件返回给浏览器处理
-
aspx中有服务端控件(<asp:Button runat = “serve”>),在返回给浏览器时会转换成浏览器可以处理的标签;
-
当使用服务端表单控件,框架会添加一些隐藏域(__VIEWSTATE),隐藏域会影响传输效率,影响浏览器渲染效率,则虽然提高了我们的开发效率,也降低了运行效率;但是这个服务端表单控件具有状态保持功能;(服务端控件一般不用)
-
利用表单内的值是否为null来判断是以get还是post请求进入aspx.cs,从而进行区分处理;如果使用服务端控件,则可以使用IsPostBack这个属性进行post、get区分
Request & Response
public HttpRequest Request { get; }
public HttpResponse Response { get; }
public HttpServerUtility Server { get; }
Response.Write(Request.Url.ToString());//当前Url
Response.Write(Request.UrlReferrer.ToString());//请求来源的Url
Response.Write(Request.UserHostAddress);//请求来源IP
//缓冲区
Response.Buffer = true;//true 整体代码运行后,返回给browser,否则每执行Response会返回
Response.Flush();//将缓冲区立即返回给browser
<iframe src = "child.aspx" ></iframe>//iframe不利于 SEO;
ViewState状态保持

cookie



Session

- Cookie信息存于浏览器端,可存于内存中,可存于硬盘中;Session存于服务器内存中
- Cookie一般用来设计自动登录;Session处理图片验证码,判断用户是否已经登录
asp.net 入口源码分析
HttpContext,HttpReponse,HttpRequest












AJAX
http://www.w3school.com.cn/ajax/ajax_xmlhttprequest_send.asp
在没有ajax时,向服务器发送数据时只能通过表单submit,超链接两种方式,并且是同步的,服务器的数据返回会阻塞主线程。
最原始的ajax请求代码:
AJAX-GET请求:
AJAX-POST请求 :

服务端接受:

jquery库实现ajax请求(对XMLHttpRequest进行封装):
jquery提供多种ajax实现的api:


ajax 实现用户名检查


-
在CURD后,例如在进行add操作后,应该重新在数据库拿一遍数据,而不是在客户端直接加一列的信息。防止在add过程中,数据库被别人修改;
-
服务端控件就是对Html进行了封装,了解就行;
-
母版页把占位符空出来,aspx进行填占位符;
-
缓存:为了缓解数据库的压力,对经常访问&不经常改动的数据进行设置缓存Cache,缓存位于服务端内存中;若缓存较大可以设计分布式缓存。
-
错误页面需要在web.config中进行配置,不然会将异常信息包括:后端的逻辑逻辑代码暴露给用户
-
网站发布之前需要选择Release版本。
HttpModule



Global :放在网站文件根目录

本文围绕IIS、Http和Get&Post展开。介绍了IIS的访问流程、应用程序池作用等;阐述了Http的请求响应模式、无状态性等特点;对比了Get和Post请求方式的区别及使用场景。还涉及上传文件、验证码、aspx开发、状态保持、AJAX请求等信息技术相关内容。
4509

被折叠的 条评论
为什么被折叠?



