1.Http请求
浏览器 www.baidu.com 先看本地电脑是否存在百度服务器的IP,如果存在直接 发送请求报文,如果不存在,则会先请求 DNS服务器,通过映射关系找到 百度 服务器的 IP地址返回给浏览器,浏览器保存IP ,并通过流的方式向 百度服务器 发送 转化为byte[]的请求报文。
2.TTP协议响应码
“200” : OK
“302” : Found 重定向
“400” : Bad Request 错误请求,发出错误的不符合Http协议的请求
“403” : Forbidden 禁止
“404” : Not Found 未找到
“500” : Internal Server Error 服务器内部错误。
“503” : Service U navailable 一般是访问人数过多
- 200段是成功;300段需要对请求做进一步处理;400段表示客户端请求错误;500段是服务器错误。
HTTP 常用ContentType
type/html(默认是这个); image/gif; image/jpeg; text/plain(普通文本)
http其他 (是无状态的)
http不会记得”上个请求是什么”,所以哪怕是同一个页面中的JS/CSS/JPG也都需要重复提交。
网页中如果有图片,CSS,JS等外部文件的话,这些请求都会在一个单独请求中,也就是说并不是页面的所有内容都在一个请求中完成,而是每个资源都是一个单独请求。
3.服务器端
服务器端 分 内核模式 和用户模式 , 内核模式为windows底层的一些东西内核模式(Kernel Model)中的 HTTP.SYS(无法看到,他实现了一个插件的机制,自己不处理程序,只负责接收请求,只负责接收请求,让其他exe等程序处理)监听80端口(监听的socket),识别请求的协议:一般为HTTP,识别请求的端口,把请求发送给具体的应用程序(IIS安装后就在注册表里注册了)。
这时候还会再创建一个新的端口 来负责和请求的客户端通信(称为代理Socket或通信Socket)
- w3svc服务(托管)和 inetInfo.exe进程 和起来就是IIS
请求通过HTTP.SYS 交给 w3svc服务(svchost.exe),来查看INETINFO.exe
访问 IIS进程中的元数据(包含扩展注册信息) 查下请求后缀的文件应如何处理,
如果是静态网页(.htm,.html等)会先通过内核模块再通过通信端口发送回去。
如果是动态网页(.aspx)会交给扩展 aspnet_isapi.dll(非托管的代码写的,非托管和托管代码的桥梁)处理,然后aspnet_isapi会负责启动ApplicationDomain,请求交给(通过windows系统的句柄,句柄是操作系统的一些标识符) ISApiRuntime,在ISapiRuntime内部,通过ecb指针创建了一个HttpWorkRequest对象(就是简单的对报文的一个封装)然后将HttpWorkRequest对象 交给HttpRunTime PR方法,在PR方法内部又将HttpWorkRequest对象封装成了HttpContext(也就是把请求报文封装成了Request对象和Response对象)再通过HttpApplicationFactory创建一个具体的Application实例
然后请求随着 Application管道一次一次的流,在管道里面有19个公开的事件(共23),请求留到Application的PR方法的时候,帮我们一次性的把19个事件都调用了,二者19个事件又允许我们开发人员自己注册响应方法,可以过滤响应报文(对报文的处理)第8个事件时会根据HttpContext中的RequestURL(请求的地址)会创建最终处理当前请求的Handler实例
在11个事件和12个事件之间会调用创建的Handler实例的PR方法
ISAPIRuntime.PR()通过ECB创建HttpWorkRequest对象,将请求报文放到其中
Http.Runtime.PR()创建HttpContext对象(包含HttpRequest对象和HttpResponse对象,分析浏览器的请求报文,然后将请求报文的数据存入HttpContext里的Resquest属性中)
HttpApplicationFactory 获取一个HttpApplication实例
HttpApplication执行管道23个事件,19个事公开给开发人员的(插件机制) ,负责创建和执行页面