一次较为完整的请求过程:输入url,回车,到可以看到页面,这期间发生了什么。
1:域名解析:dns服务,将输入的域名和主机ip进行对应
2:浏览器请求基于http请求或者https请求(https就是在http的基础上在会话层加了TSL,SSL等协议),http是应用层协议,它基于传输层的tcp协议。这里就要说到通信系统的互联模型,如tcp/ip五层模型
3:tcp/ip五层模型的协议:应用层(这里是http协议),传输层(这里是tcp协议),网络层(ip协议),数据链路层,物理层,数据链路层和物理层完成比特流转高低电平的协议等。
4:发送方发送一个请求发出后,这个请求的数据经过每一层都会被package一次,最终转换成高低电平,在接收方,由下(物理层)到应用层,一层解开一个package,最后得到请求参数。再根据url和参数返回资源。在这个过程中涉及到tcp的三次握手和四次挥手。http协议是无状态的协议,不会记录你的访问history。
5:在ip层,数据包根据通过路由算法,在路由器之间找寻较为合适的路径来传递数据包。
6:http 协议是无状态协议,这里可以谈一谈post、get的区别以及 RESTFul接口设计,然后可以讲服务器 server模型 epoll、select等。
然后现在流行的nginx的请求分发和过滤(比如ip黑名单)
7:浏览器对.html(使用超文本协议)的渲染,如果是请求一个页面,那么这个请求的页面会带有很多静态的.js,.css资源,浏览器负责利用这些资源和返回的数据渲染页面。有些页面带有ajax类型请求,所以一次访问实际会请求多次服务器。
PS:后台程序的运行是先将程序转换成二进制文件,C,C++会被在运行前被编译成和平台相关的二进制代码(不能跨平台运行),.java文件会被编译成.class的二进制文件,java二进制文件运行在jvm中,jvm屏蔽各平台的差异,实现java语言的跨平台。后台程序运行时从io中获取到输入流,处理后,返回输出流。