HTTP 协议解析:
(1) HTTP 协议的几个概念
1)连接(Connection), 浏览器和服务器之间传输数据的通道, 一般请求完毕就关闭, HTTP 不保持连接, 不保持连接会降低处理速度(因为建立连接速度很慢), 保持连接的话就会降低服务器的处理的客户端请求数, 而不保持连接服务器可以处理更多的请求
2)请求(Request), 浏览器向服务器发送 "什么什么" 的消息, 包含请求的类型, 请求的数据, 浏览器的信息(语言, 浏览器版本等信息).
3)响应(Response), 服务器对浏览器的请求返回数据, 包含是否成功, 状态码等信息.
(2) HTTP 协议消息结构图
(3) HTTP 协议 - 请求报文格式
(4)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: 表示下面的请求体的长度
(5) HTTP 协议 - 相应报文格式
(6) 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 文本, 图片数据等) 在两个回车之后的内容中.
(7) HTTP 协议的其他的一些介绍
1)HTTP 是无状态的, 不会记得 "上一个请求是什么", 所以哪怕是同一个页面中的 JS,CSS,JPG 也都要重复的提交 Accept-Language,Accept-Encoding,Cookie 等.
2)网页中如果有图片, CSS,JS 等外部文件的话, 图片, CSS,JS 都在单独的请求中, 也就是并不是页面的使所有内容都在一个请求中完成, 而是每个资源一个请求.
3)一般情况下, 只有浏览器请求服务器端, 服务器端才会给浏览器响应数据, 服务器不会主动向浏览器推送数据, 这样是安全考虑, 也是提高服务器的性能考虑, 如果要服务器向浏览器推送数据, 这需要使用 ServerPush(Ajax 隔一段时间到服务器请求最新的数据)等额外的技术.
4)HTTP 是 "请求 - 响应" 的工作模式
(8)模拟 HTTP 协议的过程.
1)这个小项目实现的功能是: 图形展示
HTTP1.1 协议 - RFC2616 - 中文版
来源: http://www.bubuko.com/infodetail-2968828.html