您的位置:首页 > 运维架构 > Linux

Linux入门之web服务(一)---web服务基础概念

2014-03-18 22:07 369 查看
我们每天都会浏览各种网站,打开不同的链接,这一切都是web在为我们提供服务。通俗的讲,web服务就是运行在服务器端的web应用程序响应客户端的请求(主要是我们的客户端浏览器)。今天我们简单介绍下web服务的基本概念,在一个整体的框架下来看web服务。
本文的主要内容包括:
简单概念
http的相关概念
http报文简析
web服务的简单I/O结构
web请求过程
一、简单概念
web服务是运行在服务器端的web应用程序提供服务,客户端浏览器请求响应交互的一个过程。双方通信是通过套接字socket来进行的,在通信双方都会有一个套接字文件产生,客户端使用本机IP地址加随机端口号,服务器端使用服务器IP加监听的IP地址。双方通过TCP套接字进行通信。
web服务基于传输层的TCP协议,因此需要建立安全的连接。如下图


左侧为客户端浏览器,右侧为服务器端。客户端浏览器发出请求,生成套接字文件,并缓存到本地,然后交给网络进行通信。通信子网经过三次握手,同服务器建立连接,服务器端收到请求后,内核获取到相关请求。用户进程(web服务进程)实现在内核中注册了自己监听的端口,生成套接字文件。内核根据注册的信息,将数据分配给不同的服务。当数据接收完成之后,tcp连接断开。web连接是一种无状态的连接。二、http的相关概念 http协议是web服务运行在应用程序的具体实现。http:hypertext transport protocol,超文本传输协议,在早期,仅能传输文本文件,随着版本的更新,加入了MIME功能,才实现传输图片、视频等非文本信心。http版本及功能对照如下:
http0.9最早的版本,仅能传输文本文档
http1.0引入了MIME,支持多媒体的数据传输,并且支持持久连接keep-alive,有一定的缓存功能
http1.1提供了更多的请求方法,更精细的缓存控制,更加完善的持久连接
MIME:Multipurpose Internet Mail Extension,最早是用于改善邮件传输的,使得邮件能够传输多媒体信息,他使用base64的编码方式,将二进制的数据编写成文本进行发送,并能放接受放还原为原来的格式。三、http报文简析 http每次的请求和服务器端的响应组成了一次http事务。客户端发出请求,服务器端回馈应答。这里简单分析下http的请求和应到报文。 1、请求报文
请求报文的简单格式 <method> <request-URL> <version> <headers>

<entity-body>
<method>请求方法,请求服务器做的动作GET HOST HEAD PUT 等
<request-URL>请求的资源可以是相对路径,也可以是完整的url
<version>协议版本,格式HTTP/<major>.<minor>http/1.0 http/1.1
<headers>HTTP首部,格式Name: ValueContent-type: images/gif
<entity-body>主体部分请求报文一般为空
<method>是客户端对服务器端发起请求使用的方法,主要使用的方法有如下表
GET请求获取一个资源,需要服务器发送数据
HEAD跟GET相似,但其不需要服务发送资源而仅传回响应首部
POST支持HTML表单提交,表单中有用户填入的数据,这些数据会发送到服务器端,由服务器存储至某位置
PUT与GET相反,向服务写入文档
DELETE请求删除URL指向的资源
OPTIONS探测服务器端对某资源所支持的请求方法
TRACE跟踪请求要经过的防火墙、代理或网关等
扩展的方法
LOCK、MKCOL、COPY、MOVE
请求首部,包含了丰富的信息,可以有多个同时存在,如下图

常见的请求首部信息如下
Client-IP源地址IP
Host请求的主机名和端口号,虚拟主机环境下用于不同的虚拟主机
Referer当前请求资源的url的原始资源,比如说我们从www.baidu.com跳转过来,那么referer就是http://www.baidu.com
User-Agent用户代理,通常是浏览器信息
Accept首部用户标明客户自己更倾向于支持的能力Accept指明服务器能发送的媒体类型
Accept-Charset支持使用的字符集
Accept-Encoding支持使用的编码方式
Accept-Language支持使用语言
条件请求首部Expect
If-Modified-Since是否在指定时间以来修改过此资源
If-None-Match判断请求的文件是否被修改
跟安全相关的请求首部Authorization客户端提交给服务端的认证数据
Cookie客户端发送给服务器端身份标识
Cookie2cookie的升级版
2、响应报文
响应报文格式

<version> <status> <reason-phrase>
<headers>

<entity-body>
version协议版本
status状态码
reason-phrase原因短语,数字状态码的易读信息
headers首部信息
entity-body主题部分,一般为网页信息
status是服务器对客户端的请求报文的回应状态码,主要有以下
1xx信息性状态码
2xx
成功状态码
200: OK
201: Created
3xx
重定向状态码
301:Moved Permanently, 在响应报文中使用首部“Location: URL”指定资源现在所处的位置;
302:Found, 在响应报文中使用首部“Location: URL”指定临时资源位置;
304:Not Modified, 条件式请求中使用;
4xx
客户端类的错误
403:Forbidden,请求被服务器拒绝
404:Not Found,服务器无法找到请求的URL
405:Method Not Allowed,不允许使用此方法请求相应的URL
5xx
服务器类的错误
500:Internal Server Error,服务器内部错误;
502:Bad Gateway,代理服务器从上游收到了一条伪响应;
503:Service Unavailable,服务器此时无法提供服务,但将来可能可用;
同样的响应首部也可以同时出现多个,一般较常见的如下

Age期限
Server向客户端标明服务器程序名称和版本
协商首部Accept-Ranges:对当前资源来讲,服务器所能够接受的范围类型
Vary: 首部列表,服务器会根据列表中的内容挑选出最适合的版本发送给客户端
跟安全相关的响应首部Set-Cookie: 服务器端在某客户端第一次请求时发给令牌
Set-Cookie2:
WWW-Authentication: 质询,即要求客户提供帐号和密码
除了请求首部和响应首部外,还有通用首部、实体首部、扩展首部
通用首部顾名思义,是请求和响应都可以使用的首部信息,主要包括
Connection定义C/S之间关于请求/响应的有关选项,对于http/1.0, Connection: keep-alive
Via显示了报文经过的中间节点
Cache-Control缓存指示
Pragmahttp/1.0
实体首部常见的有
Location资源的新位置
Allow允许对此资源使用的请求方法
内容首部Content-Encoding
Content-Language
Content-Length
Content-Location
Content-Range
Content-Type
缓存首部ETag: 实体标签
Expires: 过期期限
Last-Modified: 上一次的修改时间
四、web服务的简单I/O结构
在服务器端,页面存放在物理磁盘上,因此,I/O经常会成为整体性能的瓶颈。这里简单介绍下,web服务下的简单I/O模型

1、单线程I/O结构,这种结构下,一个web进程只能响应一个请求




2、多线程I/O结构

web服务器同时发起多个进程,每个进程都响应一个请求




3、复用的I/O结构
一个进程响应多个请求,在这种情况下,一个进程崩溃也不至于影响其他进程的工作。




4、服用的多进程I/O结构
在此结构下,服务器发起多个进程,每个进程可处理多个请求




五、web请求过程
接下来简单描述下一次web事务的基本过程

借鉴一张图来描述,所有权归画图人所有




1、我们客户端从浏览器发起请求,经过TCP/IP协议栈的工作,三次握手,同服务器间建立起连接,客户端将请求发送给了服务器
2、服务器端通过监听在内核中的端口等信息接收到客户端请求
3、服务器端的web服务器调用模块等处理客户端的请求
4、web服务器程序根据需求通过I/O获取资源
5、web服务处理资源,构建响应
6、服务器发送响应信息给客户端
7、在构建响应时,服务器端会在磁盘中写入处理事务的过程,这里可以理解为日志信息
六、小结
这里简单的描述了一些web服务器的简单内容,由于刚刚接触,还没有完全形成体系架构,可能有会疏漏与凌乱的地方,请读者批评指正。下一篇,将以httpd为具体实例来进行介绍。

2014-3-18 V1.0 初始版本
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: