什么是HTTP协议
一个基于应用层的通信规范。
Web开发是和Http协议打交道的,必须了解Http协议。Http协议版本:Http/0.9、Http/1.0、Http/1.1,现在主流的是Http/1.1版本。
Http协议分析工具:
- DebugBar,Http(S)标签的内容。免费的。只能分析当前浏览器中的内容。
- httpwatch,收费的,只能分析当前浏览器中的内容。推荐使用
- HttpAnalyzer,收费的,能分析计算机上所有的Http请求数据。
- WFetch_1.4,免费,小型分析工具
Http协议的几个概念:
- 连接(Connection):浏览器和服务器之间传输数据的通道。 一般请求完毕就关闭,http不保持连接。不保持连接会降低处理速度(因为建立连接速度很慢),保持连接的话就会降低服务器的处理的客户端请求数,而不保持连接服务器可以处理更多的请求。
- 请求(Request):浏览器向服务器发送的“我要***”的消息,包含请求的类型、请求的数据、浏览器的信息(语言、浏览器版本等)。
- 响应(Response):服务器对浏览器请求的返回的数据,包含是否成功、状态码等。
HTTP协议消息结构图
HTTP协议-请求报文格式
HTTP协议-请求报文
- 用httpwatch查看访问一个网站的响应情况。敲入一个网址后,浏览器向服务器发出请求。页面中的图片、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协议-响应报文格式
HTTP协议-响应码
浏览器向服务器发出请求,服务器处理可能是成功、可能是失败、可能没有权限访问等原因,服务器会通过响应码来告诉浏览器处理结果。
- “200” : OK
- “302” : Found 重定向.
- “400” : Bad Request 错误请求,发出错误的不符合Http协议的请求
- “403” : Forbidden 禁止
- “404” : Not Found 未找到。演示访问一个不存在的页面看报文
- “500” : Internal Server Error 服务器内部错误。演示页面抛出异常。
- “503” : Service Unavailable。一般是访问人数过多。
200段是成功;300段需要对请求做进一步的处理;400段表示客户端请求错误;500段是服务器的错误。
HTTP协议-服务器返回的报文
- 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文本、图片数据等)在两个回车之后的内容中。
Http协议-其他
- http是无状态的,不会记得“上个请求***”,所以哪怕是同一个页面中的js、css、jpg也都要重复的提交Accept-Language、Accept-Encoding、Cookie等。
- 网页中如果有图片、css、js等外部文件的话图片、css、js都在单独的请求中,也就是并不是页面的所有内容都在一个请求中完成,而是每个资源一个请求。
- 一般情况下,只有浏览器请求服务器端,服务器端才有给浏览器响应数据,服务器不会主动向浏览器推送数据,这样是安全考虑,也是提高服务器的性能考虑。如果要服务器向浏览器推送数据,则需要使用ServerPush(ajax隔一段时间到服务器请求最新的数据)等额外的技术。
- Http是“请求—响应”的工作方式。