浏览器窗口输入网络地址,服务区会返回给我们相关的信息,具体的响应流程
1 用户在浏览器窗口输入网络请求地址
2浏览器会对用户输入的网络请求地址进行解析,得到请求协议类型 域名 端口号 以及请求路径
3 此时浏览器会先查看自己的本地缓存(浏览器的缓存),如果有这个域名就会得到该域名对应的IP,如果没有浏览器会发起一个DNS系统调用,告诉操作系统要请求的网络地址,操作系统会先检查自己的缓存中有没有这个域名对应的IP.
4 DNS系统调用
如果操作系统中没有此域名对应的缓存,那么操作系统会检查自己的hosts文件中有没有自己的域名,如果hosts文件中也没有此域名,那么系统会对DNS服务器发起一个系统调用.DNS服务器是宽带运营商分配的一个IP地址.
5 DNS服务器
DNS服务器的工作流程(以GitHub.com网络请求为例):DNS服务器会告诉系统com域的IP,然后系统去com域中查询GitHub.com的IP.域用的越深,那么查询的次数也就越多,时间也就越久(纳秒级别的差距,因为DNS查询特别快).
6 DNS系统调用结束
DNS系统调用结束,浏览器得到对应的IP,此时浏览器中有(协议类型 IP 端口号 路径)
7 浏览器会通过一个本地的随机端口,建立一个与服务器指定端口之间的连接通道.
8 浏览器将需要发送到服务器的信息打上一个"包"(请求报文),将这个"包"通过连接通道发送到服务端.浏览器调试时,Request Headers 里面的view parsed就是发送的包信息.
9 web服务器(以Apache为例)
监听服务器端指定端口的服务器,会接收到浏览器发送过来的"包".服务器将浏览器发送过来的"包"打开,得到"包"里的请求路径.此时服务器会根据网络请求的路径中对应的文件扩展名找到文件的类型(MIME Type application/JavaScript等 ),然后判断文件类型是否为静态文件,如果是静态文件就直接读取文件中内容,并将文件返回,如果不是静态文件,就交给相应的模块进行处理(Apache配置文件中PHP文件有PHP模块进行处理),PHP会读取自己能处理的动态文件中的代码,并且执行代码,然后将结果返回给Apache.
10 服务器拿到要返回给浏览器的数据
服务器会把将要发送给客户端的数据打上一个"包"(响应报文),然后通过之前已经建立的连接通道将数据发送给客户端.
11浏览器拿到服务器返回的'包'
浏览器调试窗口 network 中response Headers中的view source就是浏览器拿到的'包',但是具体的返回信息(用户可以看到的信息/浏览器需要渲染东西)是在response中,是一个html文件.
浏览器打开服务器返回的'包',找到Content-Type,然后根据Content-Type决定如何处理响应的内容(按照Content-Type指定的方式进行渲染).
以上就是浏览器输入网址后,整个的网络请求流程,不足之处,请多多指教!