<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> </div> </form> </body> </html> using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; /* http协议简介 * web开发是和Http协议打交道的,必须了解http协议,Http协议版本: * Http/0.9 Http/1.0 Http/1.1 现在主流的是Http/1.1版本 * * Http协议分析工具 * 1 DebugBar, http(s)标签的内容,免费的,只能分析当前浏览器中的内容 * 2 httpwatch 收费的,只能分析当前浏览器中的内容,推荐使用 * 3 HttpAnalyzer, 收费的,能分析计算机上所有的http请求数据 * * Http协议的几个概念: * 1 连接(Connection): 浏览器与服务器之传输数据的通道 * 2 请求(Request): 浏览器向服务器发送的"我要.."的消息,包含请求的类型,请求的数据,浏览器的信息(语言,浏览器版本等) * 3 响应(Response): 服务器对浏览器请求的返回的数据,包含是否成功,错误码等 * * http请求报文 * 用httpwatch查看访问一个网站(用DiscuzNT测试环境)的响应情况,敲入一个网址后,浏览会向服务器发出请求(页面中的图片,js,css在单独的请求中) * * GET/Http/1.1表示向服务器用GET方式请求首页,使用Http/1.1协议 * Accept-Encoding gzip, deflate表示浏览器支持gzip,deflate两种压缩算法 * Accept-Language zh-cn 表示浏览器支持的语言,很多进入自动就是中文界面的国际网站主通过读取这个头的值实现的 * * Connection Keep-Alive 一般情况下,一旦web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览或者服务器在其头信息加入了Connection: keep-Alive, * 则TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求,保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽 * * Cookie是浏览器向服务器发送和当前网站关联的COOKIE,这样在服务器端也能读取浏览器端的cookie了 * * User-Agent为浏览器的版本信息,通过这个信息可取浏览器是IE还是FireFox,支持的插件,Net版本等 * * * * Http响应码 * 浏览器向服务器发出请求,服务器处理可能是成功,可能是失败,可能没有权限访问等原因,服务器会通过向应码来告诉浏览器处理结果 * * "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 一般是访问人数过多 * * * * 服务器返回的报文 * Server: Cassini/3.5.0.5表示服务器的类型 * Content-Type: text/html; charset=utf-8表示返回数据的类型 * 服务器通过Content-Type告诉客户端响应的数据的类型,这样浏览器就根据返回数据的类型来进行不同的处理 * 如果是图片类型显示,如果文本类型就直接显示内容,如果用html类型就用浏览器显示内容,如果下载类型就弹出下载工具 * * 常用Content-Type: text/HTML image/GIF image/JPEG text/plain text/javascript application/x-excel * application/octet-stream(二进制文件) * * Conent-Length: 19944表示后续数据消息体的长度,报文头只是描述,返回的具体数据(比如HTML文件,图片数据等) 在两个回车之后的内容中 * * * * Http其它 * 网页中的如果有图片 css js等外部文件的话图片,css js都在单独的请求中,也就是并不是页面所有内容都在一个请求中完成,而是每个资源一个请求 * * 一般情况下,只有浏览器请求服务器端,服务器端才有给浏览器响应数据,不会主动向浏览器推送数据,这样是安全考虑 * 也是提高服务器的性能考虑,如果要服务器向浏览器推送数据,则需要使用ServerPush等额外的技术 * * Http是"请求-响应"的工作方式,因此页面会不断刷新,如果不希望而面刷新则要使用AJAX等技术 * * 断点续传原理 * * * * 请求响应模型的例子 * 按钮实现表格行删除效果:使用超链接进行删除,代码见备注 * 这就是asp.net中数据绑定控件中行按钮和行超链接实现方式的不同,ListView中Button,HyperLink两种删除方式 * 按钮方式不将行的id通过表单提交到服务器,行超链接的方式由于没有提交所有的表单信息,因此很多服务端控件的高级用庋不了 * * 服务端判断客户端哪些个按钮被按下了, * 这就是asp.net事件驱动的实现原理 * 客户端,服务端由于在两台计算机中,所以无法做到两边变量的互相读取或者两边函数的互相调用,所以如果想看真情为好像做到,那么必须通过提交的方式来将客户端变量值做为一个表单字段提交到服务器 * 或者服务端将服徊端变量打印到客户端代码中 * */ public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } }