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

   我们每天都会浏览各种网站,打开不同的链接,这一切都是web在为我们提供服务。通俗的讲,web服务就是运行在服务器端的web应用程序响应客户端的请求(主要是我们的客户端浏览器)。今天我们简单介绍下web服务的基本概念,在一个整体的框架下来看web服务。

   本文的主要内容包括:

   简单概念

   http的相关概念

   http报文简析

   web服务的简单I/O结构

   web请求过程

一、简单概念

   web服务是运行在服务器端的web应用程序提供服务,客户端浏览器请求响应交互的一个过程。双方通信是通过套接字socket来进行的,在通信双方都会有一个套接字文件产生,客户端使用本机IP地址加随机端口号,服务器端使用服务器IP加监听的IP地址。双方通过TCP套接字进行通信。

   web服务基于传输层的TCP协议,因此需要建立安全的连接。如下图

   

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

左侧为客户端浏览器,右侧为服务器端。客户端浏览器发出请求,生成套接字文件,并缓存到本地,然后交给网络进行通信。通信子网经过三次握手,同服务器建立连接,服务器端收到请求后,内核获取到相关请求。用户进程(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: Value Content-type: images/gif
<entity-body> 主体部分 请求报文一般为空


   <method>是客户端对服务器端发起请求使用的方法,主要使用的方法有如下表


GET 请求获取一个资源,需要服务器发送数据
HEAD 跟GET相似,但其不需要服务发送资源而仅传回响应首部
POST 支持HTML表单提交,表单中有用户填入的数据,这些数据会发送到服务器端,由服务器存储至某位置
PUT 与GET相反,向服务写入文档
DELETE 请求删除URL指向的资源
OPTIONS 探测服务器端对某资源所支持的请求方法
TRACE 跟踪请求要经过的防火墙、代理或网关等
扩展的方法
LOCK、MKCOL、COPY、MOVE

请求首部,包含了丰富的信息,可以有多个同时存在,如下图

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

常见的请求首部信息如下


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 客户端发送给服务器端身份标识
Cookie2 cookie的升级版

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 缓存指示
Pragma http/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进程只能响应一个请求

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

   2、多线程I/O结构

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

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

3、复用的I/O结构

   一个进程响应多个请求,在这种情况下,一个进程崩溃也不至于影响其他进程的工作。

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

4、服用的多进程I/O结构

   在此结构下,服务器发起多个进程,每个进程可处理多个请求

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

五、web请求过程

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

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

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

1、我们客户端从浏览器发起请求,经过TCP/IP协议栈的工作,三次握手,同服务器间建立起连接,客户端将请求发送给了服务器

2、服务器端通过监听在内核中的端口等信息接收到客户端请求

3、服务器端的web服务器调用模块等处理客户端的请求

4、web服务器程序根据需求通过I/O获取资源

5、web服务处理资源,构建响应

6、服务器发送响应信息给客户端

7、在构建响应时,服务器端会在磁盘中写入处理事务的过程,这里可以理解为日志信息

六、小结

   这里简单的描述了一些web服务器的简单内容,由于刚刚接触,还没有完全形成体系架构,可能有会疏漏与凌乱的地方,请读者批评指正。下一篇,将以httpd为具体实例来进行介绍。




2014-3-18   V1.0  初始版本

Linux入门之web服务(一)---web服务基础概念,布布扣,bubuko.com

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

上一篇:jQuery easyui——消息框(message)


下一篇:AS与.net的交互——详解UrlRequest