HTTP协议请求
前言:这几天在学习HTTP协议的请求响应等知识点,使我也慢慢地了解了HTTP协议,以前写网站的时候根本不考虑这些,也就是所谓的”托控件”,这几天学习了这些知识点感觉真的是一个提升,由于我比较笨,所以写个笔记记录一下,要是以后忘了可以再研究研究。顺便也共享一下,可能有错误,希望大家能够指出来。
1. 什么是浏览器? 什么是服务器?
(1)我们一直在浏览网页,比如我们去博客园www.cnblogs.com,那么我们知道当我们输入这段网址的时候我们的浏览器以及服务器做了什么吗?下面简单的看一下这张图:
(2)当我们在浏览器中输入:http://127.0.0.1:8080/proscenium/的时候,浏览器请求后台服务器,后台服务器会返回给我们一个网页,那么后台服务器到底干了什么呢?我们可以使用Chrome,IE自带的开发者人员工具,或者DebugBur,Fiddler,和HttpWatch查看,下面就是我查看的网站的访问记录
注解:当我们输入网址回车的时候,浏览器自动的将我们请求的地址封装成了HTTP报文,HTTP报文就是一串字符串,而后通过Socket发送到服务器对应的IP和端口上去,请求的报文格式如下:
GET /proscenium/ HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8 Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3 Cookie: ASP.NET_SessionId=myc2esb4m0io50gf0t52jvtl
将上面的HTTP报文发送给服务器,服务器来解析这些HTTP协议,然后将解析出来的页面封装成一个响应的报文,发送回给浏览器,浏览器将会解析服务器发送回来的这个响应的报文,显示出相应的信息来
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Sat, 27 Oct 2012 11:46:29 GMT
Content-Length: 52728
(3)最后使用图形来说明上面的这个请求响应的过程
(4)解析服务器发回来的数据的HTML页面的时候,浏览器是一行一行的解析的,当遇到添加的Jquery的引入文件的时候,就会在发送一个请求解析JS文件,解析到CSS和图片等都一样的执行格式,所以浏览器是一边解析一边执行的一个过程,当然里面还是有特殊的一些控件(Table)。
(5) 在.NET平台下面我们经常使用的是IIS管理器,我们可以将我们的网站寄宿到IIS中,我们就可以查看我们的网站了。
(6)浏览器和服务器语言
1)浏览器只负责解释执行HTML+CSS+Javascript代码
2)服务器可执行服务器端语言,.net,Java分别由不同的运行环境执行代码(FrameWork,JVM)
(7)静态页面和动态页面的区别?
1) 在服务器就相当于直接读取文件字符串然后返回客户端浏览器;(任何时候访问看到的都是一样的界面)。
2) 在服务器是先交给某语言环境虚拟机编译运行,按照语法生成代码返回客户端浏览器。(不同条件和时候访问看到的都界面也不同)。
2. HTTP协议
(1) Web开发是和Http协议打交道的,必须了解HTTP协议,HTTP协议版本:HTTP/0.9,HTTP/1.0,HTTP/1.1。
(2) HTTP协议的几个概念
1)连接(Connection),浏览器和服务器之间传输数据的通道,一般请求完毕就关闭,HTTP不保持连接,不保持连接会降低处理速度(因为建立连接速度很慢),保持连接的话就会降低服务器的处理的客户端请求数,而不保持连接服务器可以处理更多的请求
2)请求(Request),浏览器向服务器发送”什么什么”的消息,包含请求的类型,请求的数据,浏览器的信息(语言,浏览器版本等信息)。
3)响应(Response),服务器对浏览器的请求返回数据,包含是否成功,状态码等信息。
(3) HTTP协议消息结构图
(4 HTTP协议-请求报文格式
(5)HTTP协议-请求报文详解
1) 用httpwatch查看访问一个网站的响应情况。敲入一个网址后,浏览器向服务器发出请求。页面中的图片、js、css在单独的请求中
2) Host:请求的发送给那一个服务器
3) Accept-Encoding gzip,deflate表示浏览器支持gzip,deflate两种压缩算法
4) Accept-Language zh-cn表示浏览器支持的语言,很多进入后自动就是中文界面的国际网站就是通过读取这个头的值实现的。
5) Connection Keep-Alive。一般情况下,一旦web服务器向浏览器发送了请求数据,他就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了Connection:keep-alive,则TCP连接在发送后仍将保持打开状态,于是,浏览器可以继续通过相同的连接发送请求,保持连接节省了为每个请求建立新连接所需要的时间,还节约了网络带宽。
6) Cookie是浏览器相服务器发送和当前网站关联的Cookie,这样在服务器端也能读取到浏览器端的Cookie了。
7) User-Agent为浏览器的版本信息,通过这个信息可以读取浏览器是IE还是FireFox,支持的插件和.net版本等信息
8)Referer:表示请求的地址,也就是从那个页面来的。
9)Content-Length:表示下面的请求体的长度
(6) HTTP协议-相应报文格式
(7) HTTP协议-相应报文详解
1) 浏览器相服务器发出请求,服务器处理可能成功,可能是失败,可能没有权限访问等原因,服务器会通过相应吗来告诉浏览器处理结果
1)"200":表示执行成功,返回OK。
2)"302":Found重定向。
3)"400":Bad Rquest错误请求,发出错误的不符合HTTP协议的请求。
4)"403":Forbidden禁止。
5)"404":Not Found未找到,演示访问一个不存在的页面看报文。
6)"500":Internal Server Error服务器内部错误,演示页面抛出异常
7)"503":Service Unavailable。一般是访问人数过多,可以用12306网站实验一样,可能会得到这个结果。
2) 200段是成功,300段需要对请求做进一步的处理,400段表示客户端请求错误,500段是服务器的错误。
3) Server:Cassini/3.5.0.5表示服务器的类型
4) Content-Type:text/html;charset=utf-8表示返回数据的类型
5) 服务器通过Content-Type告诉客户端响应的数据的类型,这样浏览器就根据返回数据的类型来进行不同的处理,如果是图片类型的显示,如果是文本类型就直接显示内容,如果用HTML类型就用浏览器显示内容,如果是下载类型就弹出下载工具等。
6)常用Content-Type:text/HTML、image/GIF、image/JPEG、text/plain、text/javascript、application/x-excel 、application/octet-stream(二进制文件)
7) Content-Length: 19944表示响应报文体的字节长度,报文头只是描述,返回的具体数据(比如HTML文本、图片数据等)在两个回车之后的内容中。
8) HTTP协议的其他的一些介绍
1)HTTP是无状态的,不会记得“上一个请求是什么”,所以哪怕是同一个页面中的JS,CSS,JPG也都要重复的提交Accept-Language,Accept-Encoding,Cookie等。
2)网页中如果有图片,CSS,JS等外部文件的话,图片、CSS、JS都在单独的请求中,也就是并不是页面的使所有内容都在一个请求中完成,而是每个资源一个请求。
3)一般情况下,只有浏览器请求服务器端,服务器端才会给浏览器响应数据,服务器不会主动向浏览器推送数据,这样是安全考虑,也是提高服务器的性能考虑,如果要服务器向浏览器推送数据,这需要使用ServerPush(Ajax隔一段时间到服务器请求最新的数据)等额外的技术。
4)HTTP是“请求-响应”的工作模式
(9)模拟HTTP协议的过程。
1)这个小项目实现的功能是:图形展示
2)实现的效果是:
3)代码下载地址是:https://files.cnblogs.com/hanyinglong/AnalogIISDemo.zip