六、WEB服务基础

简介:

  Web、服务器和相关的Web应用程序都是通过HTTP相互通信的。HTTP(HyperText Transfer Protocol,超文本传输协议)是现代全球因特网中使用的公共语言。Web内容都是存储在Web服务器上的,Web服务器所使用的是HTTP协议,因此经常会被称为HTTP服务器。这些HTTP服务器存储了因特网中的数据,如果HTTP客户端发出请求,它们会提供数据。客户端向服务器发送HTTP请求,服务器会在HTTP响应中回送所请求的数据。

wKiom1krtqei6giAAAFFv463Aac680.png-wh_50

  • 资源与资源的类型

 Web服务器就是Web资源的宿主,Web资源就是Web内容的源头。最简单的Web资源就是Web服务器文件系统中的静态文件。这些文件可以包含任意内容:文本文件、HTML文件、word文件、AVI电影文件等。但是资源并不一定是静态文件,资源还可以是根据需要生成内容的软件程序,这些程序可以根据用户身份、所请求的信息来产生不同的内容。

  因特网上有数千种不同类型的数据类型,HTTP给每种要通过Web传输的对象都打上了MIME类型的数据格式标签。Web服务器会为所有的HTTP对象数据附加MIME(Multipurpose Internet Mail Extension,多用途因特网邮件扩展)类型。当Web浏览器从服务器中取回一个对象时,会查看相关的MIME类型,看看能否知道该如何处理该对象,大多数浏览器都可以处理数百种常见的对象类型。

wKioL1kruSCzHyoOAAE1l2IDWXc410.png-wh_50

  MIME类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间用斜杠分隔。

HTML格式的文本文档由text/html类型来标记

普通ASCII文本文档由text/plain类型来标记

JPEG版本图片为image/jpeg类型

GIF版本图片为image/gif类型

...

  • URI与URL

   每个Web服务器资源都有一个名字,这样客户端可以通过该名字找到所需要的资源。服务器资源名被称为统一资源标识符(Uniform Resource Indentifier,URI)。URI就像英特网上的邮政地址一样,在世界范围内唯一标示并定位信息资源。

例如:  http://www.joes-hardware.com/specials/saw-blade.gif

  统一资源定位符(Uniform Resource Locator,URL)是资源标识符最常见的形式,URL描述了一台特定服务器上某资源的特定位置。它们可以明确说明如何从哟个精确、固定的位置获取资源。如图显示了URL如何精确的说明某自愿的位置以及如何访问。

wKiom1krvZOgwR0pAAIgZCYayI8153.png-wh_50

  • 事务

   下图展示了客户端如何通过HTTP与Web服务器及其资源进行事务处理。一个HTTP事务由一条(客户端发往服务器端)请求和一个响应(服务器端发回客户端)组成。这种通信通过HTTP报文的格式画数据块进行。

wKioL1krvtDDjDEjAAJZFYSbwf8052.png-wh_50

    HTTP支持几种不同的请求命令,这些命令被称为HTTP方法(HTTP mothod)。每种HTTP请求报文都包含一个方法。这些方法告诉服务器要执行什么动作,常见的HTTP方法有:

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

  每条HTTP响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码,告知客户端请求是否成功,或者是否需要采取其他动作,常见的状态码有:

1xx 纯信息性状态码
2xx
“成功”类的信息 (200, 201, 202)
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,服务器此时无法提供服务,但将来可能可用;

  504:Gateway Timeout,网关代理请求后端服务时,后端服务没有及时响应。

  • 报文

   HTTP报文是由一行一行的简单字符串组成.HTTP报文都是纯文本,而不是二进制代码,所以可以方便地对其进行读写。下图展示了一个简单事务所使用的HTTP报文。

wKioL1krwcixlIyWAAFJ5sxWiHo843.png-wh_50

  

  HTTTP报文主要分为三个部分:起始行、首部字段、主体。

请求报文语法:

<method> <request-URL> <version>

<headers>(name:value)

(必须空一行)

<entity-body> 报文主体

响应报文语法:

<version> <status> <reason-phrase>

<headers>

(必须空一行)

<entity-body>

<method>: 请求方法, 希望服务器端执行的动作,如GET、HEAD、POST等

<request-url>: 请求的资源,可以是相对路径,也是完整的URL

<version>:协议版本,格式HTTP/<major>.<minor>,如http/1.0

<headers>:HTTP首部

<status>: 状态码

<reason-phrase>:原因短语,数字状态码易读信息

<entity-body>: 主体部分

  • HTTTP协议版本

http/0.9:仅纯文本(超链接), ASCII

http/1.0:支持多媒体数据的处理。支持保持连接。

http/1.1:支持持久连接。更精细的缓存控制

HTTP-NG(又称HTTP/2.0),重点是性能的大幅优化,以及更强大的服务逻辑远程执行框架,但没有要取代http/1.1的计划。

  • HTTP首部

  HTTP首部和方法配合工作,共同决定了客户端和服务器能做什么。首部通常可以分为五种类型:

通用首部:请求报文和响应报文都可以使用的

wKioL1krxcHguOsQAAKFOXFFq14838.png-wh_50

  

  HTTP/1.0引入允许HTTP应用程序缓存对象本地副本的首部,这样就不需要总是直接从服务器段获取。

wKiom1krxeKxOpXUAACwo1jE52Y169.png-wh_50

请求首部:只在请求报文中有意义

  请求的信息性首部:

wKioL1kryKvzo7ApAAKf8SIuqnc571.png

  Accept首部:

wKiom1kryVmSjkskAAFT5R5gifY740.png

  条件请求首部:

wKioL1kryVqQ9_6dAAJwOsm1uEk738.png

  安全请求首部:

wKioL1kryVqyud01AAEEp0iP5YE453.png

  代理请求首部:

wKiom1kryVuwzBinAAFxNAglOZc546.png

响应首部:只在请求报文中有意义

  响应的信息性首部

wKiom1kryjnz9MccAAGXz1d7c3s220.png

  协商首部

wKiom1kryjrjzXeLAAFJKDnZZNs613.png

  安全响应首部

wKioL1kryjvRKbhuAAD3aHlp9DQ053.png

实体首部:用于指定实体属性

  实体的信息性首部

wKioL1kryx7SJtfSAADcpqLLSe8413.png

  内容首部

wKiom1kryx6SBlNuAAHmwofZhXk582.png

  实体缓存首部

wKioL1kryx-zPfZ8AADzf2Vc4n4055.png

扩展首部:非标准首部,可能是由程序开发者创建的,例如X-Forward-For

  • HTTTP的实现软件

客户端:

  GUI:IE、Firefox、Safari、chrome、Opera

  CLI:elinks, curl

服务端:

  Server: httpd(ASF基金会)、nginx、lighttpd

  App Server: IIS、tomcat、jetty、resin

6.2、Web服务器处理连接请求的架构方式

1、单线程web服务器(Single-threaded web servers)

  此种架构方式中,web服务器一次处理一个请求,结束后读取并处理下一个请求。在某请求处理过程中,其它所有的请求将被忽略,因此,在并发请求较多的场景中将会出现严重的必能问题。

2、多进程/多线程web服务器

  此种架构方式中,web服务器生成多个进程或线程并行处理多个用户请求,进程或线程可以按需或事先生成。有的web服务器应用程序为每个用户请求生成一个单独的进程或线程来进行响应,不过,一旦并发请求数量达到成千上万时,多个同时运行的进程或线程将会消耗大量的系统资源。

3、I/O多路复用web服务器

  为了能够支持更多的并发用户请求,越来越多的web服务器正在采用多种复用的架构——同步监控所有的连接请求的活动状态,当一个连接的状态发生改变时(如数据准备完毕或发生某错误),将为其执行一系列特定操作;在操作完成后,此连接将重新变回暂时的稳定态并返回至打开的连接列表中,直到下一次的状态改变。由于其多路复用的特性,进程或线程不会被空闲的连接所占用,因而可以提供高效的工作模式。

4、多路复用多线程web服务器

  将多进程和多路复用的功能结合起来形成的web服务器架构,其避免了让一个进程服务于过多的用户请求,并能充分利用多CPU主机所提供的计算能力。

  • 一次web请求响应的过程

1、建立连接——接受或拒绝客户端连接请求;

2、接收请求——通过网络读取HTTP请求报文;

3、处理请求——解析请求报文并做出相应的动作;

4、访问资源——访问请求报文中相关的资源;

5、构建响应——使用正确的首部生成HTTP响应报文;

6、发送响应——向客户端发送生成的响应报文;

7、记录日志——当已经完成的HTTP事务记录进日志文件;

wKiom1krzWTg72mSAAKHseW8bqw194.png-wh_50




本文转自 梦想成大牛 51CTO博客,原文链接:http://blog.51cto.com/yinsuifeng/1930580,如需转载请自行联系原作者

相关文章
|
12天前
|
开发框架 监控 .NET
Visual Basic的Web服务和REST API开发指南
【4月更文挑战第27天】本文探讨了使用Visual Basic(VB.NET)构建Web服务和RESTful API的方法。首先介绍了Web服务的基础和REST API的概念,然后阐述了.NET Framework与.NET Core/.NET 5+对VB.NET的支持,以及ASP.NET Core在Web开发中的作用。接着,详细讲解了创建RESTful API的步骤,包括控制器与路由设置、模型绑定与验证,以及返回响应。此外,还讨论了安全措施、测试方法、部署选项和监控策略。最后强调,VB.NET开发者可以通过ASP.NET Core涉足现代Web服务开发,拓宽技术领域。
|
14天前
|
应用服务中间件 网络安全 nginx
快速上手!使用Docker和Nginx部署Web服务的完美指南
快速上手!使用Docker和Nginx部署Web服务的完美指南
|
2月前
|
网络协议 Java Nacos
nacos常见问题之在web界面 上下线服务时报错 400如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
37 0
|
2月前
|
监控 Serverless 测试技术
Serverless 应用引擎常见问题之做的web服务计费如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
410 3
|
2月前
|
负载均衡 Java 中间件
使用Go语言构建高性能Web服务
Go语言作为一种快速、高效的编程语言,其在构建高性能Web服务方面具有独特优势。本文将探讨如何利用Go语言开发和优化Web服务,以实现更高的性能和可伸缩性。
|
3月前
|
Arthas 监控 NoSQL
web服务性能监控方案
web服务性能监控方案
|
3天前
|
开发框架 JavaScript 安全
WIndows Server 2016 部署 Web服务(简单篇)
WIndows Server 2016 部署 Web服务(简单篇)
|
9天前
|
缓存 监控 测试技术
【Go语言专栏】使用Go语言构建高性能Web服务
【4月更文挑战第30天】本文探讨了使用Go语言构建高性能Web服务的策略,包括Go语言在并发处理和内存管理上的优势、基本原则(如保持简单、缓存和并发控制)、标准库与第三方框架的选择、编写高效的HTTP处理器、数据库优化以及性能测试和监控。通过遵循最佳实践,开发者可以充分利用Go语言的特性,构建出高性能的Web服务。
|
16天前
|
监控 Shell
Shell脚本监控WEB服务是否正常
Shell脚本监控WEB服务是否正常
|
21天前
|
JSON API 数据库
解释如何在 Python 中实现 Web 服务(RESTful API)。
在Python中实现Web服务(RESTful API)涉及选择框架(如Flask、Django、FastAPI),定义路由及处理函数(对应HTTP请求方法),处理请求,构建响应和启动服务器。以下是一个使用Flask的简单示例:定义用户列表,通过`@app.route`装饰器设置GET和POST请求处理函数,返回JSON响应,并用`app.run()`启动服务器。实际API会包含更复杂的逻辑和错误处理。
16 1