前言:Web开发是和Http协议打交道的,所以必须了解http协议。
(1)Http协议版本:Http/0.9、http/1.0、http/1.1。
(2)Http协议分析工具:DebugBar,Http(S)标签的内容。免费的,只能分析当前浏览器中的内容;Httpwatch,收费的,只能分析当前浏览器中的内容,推荐使用;HttpAnalyzer,收费的,能分析计算机上所有的Http请求数据。
(3)Http协议的几个概念:
连接(Connection):浏览器和服务器之间传输数据的通道。一般请求完毕就关闭,不会保持连接。
请求(Request):浏览器向服务器发送的“我要…”的消息,包含请求的类型、请求的数据、浏览器的信息(语言、浏览器版本等)。
响应(Response):服务器对浏览器请求的返回的数据,判断是否成功、错误码等。
用httpwatch查看一个网站的响应情况。敲入一个网址后,浏览器向服务器发出请求。浏览器向服务器请求的时候:图片是放在单独的请求中。主页面一个请求,每一个资源文件都是一个单独的请求(图片、js、css)。
(4)http请求报文:
GET/HTTP/1.1表示向服务器用GET方式请求首页,使用http/1.1协议。
Accept—Encoding gzip、deflate表示浏览器支持gzip、deflate两种压缩算法。
Accetp-Language zh-cn 表示浏览器支持的语言,很多进入后自动就是中文页面的国际网站就是通过读取这个头的值实现的。
Connection Keep-Alive 一般情况下,一旦web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了Connection Keep-Alive,则TCP连接在发送后将仍然保持打开状态,于是,浏览器就可以继续通过相同的连接发送请求,保持连接节省了为每个请求建立新连接所需的时间,还节约了网络宽带。
Cookie是浏览器向服务器发送和当前网站关联的Cookie,这样在服务器端也能读取浏览器端的Cookie。
User—Agent:为浏览器的版本信息,通过这个信息就可以读取浏览器是IE还是FireFox/支持的插件、.Net版本等。
(5)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 一般是访问人数过多。
一般情况下:200段是成功;300段需要对请求做进一步的处理;400段表示客户端请求错误;500段是服务器的错误。
服务器返回的报文:
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(二进制文件)。
Content-Length:19944表示后续数据消息体的长度,报文头只是描述,返回的具体数据(比如HTML文本、图片数据等)在两个回车之后的内容中。
服务端可以读取客户端的所有的Cookie,因为客户端把Cookie都发送给了服务端。
(6)http是无状态的,不会记得上一个请求“……”所以哪怕是同一个页面中的js/scc/jpg也都要重复的提交:Accept_Language、Accept_Econding 、Cookie等。一般情况下,只有浏览器请求服务器端,服务器端才会给浏览器响应数据,不会主动向浏览器推送数据,这样是安全考虑,也是提高服务器的性能考虑,如果要服务器向浏览器推送数据,则需要使用ServerPush等额外的技术。Http是“请求-响应”的工作方式,因此页面会不断地刷新,如果不希望页面刷新则要使用AJAX等技术。