在使用计算机的过程中,最容易让人想起的就是浏览网页的经历,只需要用户输入网址,搜索及可以获得想要的资源,那么这个过程计算机是如何完成的?
web服务是C/S架构:用户使用的浏览器成为客户端代理,用户访问的资源其实是存储在服务器端。client通过网址(经过dns解析)能够定位自己想要访问的资源位于互联网的哪台服务器,server如何知道客户端请求的是什么内容,那就是http协议
URI:统一资源标识符,用于在全球范围唯一的标识某资源
URL:统一资源定位符,是URI的一个子集,用户唯一标识互联网上的某一资源
所以用户输入的网址就是一个URL,唯一的标识了自己想要访问的资源
web资源,也可以成为web对象,例如一个html文件,一张图片等等,但是我们访问的一个网页一般都是有若干个资源组成的。
client要获取server上的资源,那么首先就必须要和server建立连接,http协议简单的理解就是client告诉server自己要访问什么资源,并没有承担建立连接的任务,所以client在发送http请求报文之前,必须要和server端建立tcp/ip连接,通过tcp协议中的port来决定自己的请求报文到达server端的tcp/ip协议栈的时候,内核应该将其交给哪个进程处理。
在http协议的报文格式中,首先应该注意的就是
http-method:
GET 从服务器向客户端发送命名资源
PUT 将来自客户端的数据存储到一个命名的服务器资源中去
DELETE 从服务器中删除命名资源
POST 将客户端数据发送到一个服务器网关应用程序
HEAD 仅发送命名资源响应中的 HTTP 首部
在server响应报文首部的状态码,大致分类是:
1xx:纯信息
2xx:成功类的信息
3xx:重定向类的信息
4xx:客户端错误类的信息
5xx:服务器端错误类的信息
那么一个web服务器应该完成哪些基本工作:
1.建立连接
2.接受请求
3.处理请求
4,访问客户端请求的资源
5,构建响应报文
6.向客户端发送响应报文
7.记录日志
在互联网上,一台web服务器可能面临若干个请求,那么web服务器处理请求的方式有哪些:
1.使用单进程,一个进程响应一个请求(在此种工作模式下,服务器只能处理一个请求,那么后续的请求就需要排队等待响应)
2,使用多进程,一个进程响应一个请求(首先有一个主导进程,该进程不负责响应用户请求,而是在把用户请求接进来之后,生成一个子进程去处理请求,那么服务器就达到了并发连接的目的,但是由于每一个进程都需要加载需要的配置信息且是相互独立的,所以相当消耗内存资源,但是每一个进程独立,那么进程间的影响也就很小,一个进程的崩溃不会影响到其他进程。在这种情况下,进程在向内核发起IO请求之后,由于内核可能要处理多个IO请求,所以进程需要以轮训的方式不断的查看自己提交的IO操作是否完成)
3.使用一个进程响应多个请求(一个进程响应多个请求,由于只有一个进程,那么对系统资源的消耗是比较小的,那么在向内核发起多个IO请求后,进程如何获悉哪个HTTP请求的IO请求已经准备完毕?此处使用的是事件触发的机制,哪个HTTP请求的IO准备好之后,内核会通过相当于能够标识HTTP请求的机制去通知进程,哪个请求已经准备完毕)
4.使用多个进程,一个进程处理多个请求(此种方式就是方式2和方式3的结合)