手写WEB服务器-04-并行请求
1.引言
在前面的例子中,为了便于理解,我们建立了一个极其简单的静态页面,整个http请求中只涉及一个index.html文件。
然而真实的网页可能包含很多信息,比如文本、图片、js文件、css文件等:
在这种场景下,web服务器是怎么处理的呢?
2.客户端请求
首先我们看到,浏览器的地址只需要我们敲一次,敲进去之后,浏览器首先会请求我们指定的页面:
然后服务器会查找相关页面对应的文件,把这个文件发给浏览器:
浏览器收到这个文件中,发现文件里面包含了一些其他资源的链接:
然后他会自动地再发起TCP连接,再把这些链接请求给web服务器(在本例中共发起了11个TCP连接):
浏览器请求的文件类型也是多种多样:
那我们的服务器是如何处理这些请求的呢?
3. 服务器处理
首先,我们的代码并没有限定请求浏览器请求的文件是不是html文件,任何文件都是可以的:
唯一的区别是,我们要在http应答中,告诉浏览器我们给他发的文件是个什么类型的文件:
默认情况下,我们会填这个:
但其实我们还支持这些:
具体返回哪个文件类型,是根据浏览器所请求的文件类型的扩展名决定的。
比如客户端请求xxx.css,我们就会返回text/css,如果客户端请求xxx.js,我们就会返回application/x-javascript。
客户端浏览器接收到我们的应答后,根据相应的Content-Type渲染页面即可。是图片就展示图片,是文本就展示文本,是css就修改样式。