短短漫长旅程迎来终点。

  1. 概览。整体结构。
  2. 服务器的协议栈如何接收数据。
  3. 服务器解释request message并respond
  4. browser 接收response message并显示内容。

6.1概览

6.11服务器和客户端的区别

根据用途分:

服务器分为多种,硬件和操作系统和客户端不同。

但网络相关的部分一样,功能规格是同一的。

不过功能相同,用法不同,在连接过程中,客户端发起连接,服务器等待连接,因此Socket库的用法有区别,即调用的程序组件不同。

另外,服务器的程序可以同时和多台客户端进行通信,也是区别。

6.12 结构

每一个客户端连接进来,就启动一个新的服务器程序,1对1状态。

当服务器程序启动并读取配置文件完成初始化操作后,就会运行 等待连接模块(a)。

这个模块会创建套接字,然后进入等待连接的暂停状 态。

接下来,当客户端连发起连接时,这个模块会恢复运行并接受连接, 然后启动客户端通信模块(b),并移交完成连接的套接字。

接下来,客户端通信模块(b)就会使用已连接的套接字与客户端进行通信,通信结束后, 这个模块就退出了

服务器操作系统具有多任务 、多线程  功 能,可以同时运行多个程序 ,服务器程序的设计正是利用了这一功能。

多任务:

实 际上,一个处理器在某一个瞬间只能运行一个任务,但通过短时间内在不同的任务间切换,看起来就好像是同时运行多个任务一样。有些操作系统 称之为“多进程”。

任务是单独的程序,线程是一个程序中的一部分。

6.13服务器端的套接字和端口号

从数据收发的角度来看,客户端与服务器的区别是发起连接的一方是客户端,等待连接的一方是服务器 。

这个区别体现在如何调用 Socket 库上。

首先,客户端的数据收发需要 经过下面 4 个阶段。

(1)创建套接字(创建套接字阶段,本质是分配一个内存空间)

(2)用管道连接服务器端的套接字(连接阶段)

(3)收发数据(收发阶段)

(4)断开管道并删除套接字(断开阶段)

相对地,服务器是将阶段(2)改成了等待连接,具体如下。

(1)创建套接字(创建套接字阶段,本质是分配一个内存空间)

   (2-1)将套接字设置为等待连接状态(等待连接阶段)

   (2-2)接受连接(接受连接阶段)

(3)收发数据(收发阶段)

(4)断开管道并删除套接字(断开阶段)

6.2服务器的接收操作

6.3解释请求,作出响应

6.31 将请求的URI转换为实际的文件名

[ 处理请求消息内容 ];

图 6.7 中只写了一行,但实际上这里应该是一组处理各种工作的程序,或者说这里才是服务器程序的核心部分。

图 6.7 的 read 获取的数据内容就是 HTTP 请求消息。

请求消息包括一个称为“方法”的命 令,以及表示数据源的 URI(文件路径名),服务器程序会根据这些内容向 客户端返回数据,但对于不同的方法和 URI,服务器内部的工作过程会有 所不同。

6.32 允许cgi程序

如果 URI 指定的文件内容为 HTML 文档或图片,那么只要直接将文件内容作为响应消息返回客户端就可以了。

但 URI 指定的文件内容也有可能是一个程序:

如果判断要访问的文件为程序文件,Web 服务器会委托操作系统运行这个程序,然后从请求消息中取出数据并交给运行的程序 。

如果方法为 GET,则将 URI 后面的参数传递给程序;如果方法为 POST,则将消息体中的数据传递给程序。

接下来,运行的程序收到数据后会进行一系列处理,并将输出的数据 返回给 Web 服务器。

6.33访问控制

Web 服务器的访问控制规则主要有以下 3 种。

(1)客户端 IP 地址     (2)客户端域名   (3)用户名和密码

6.4 browser接收response message并显示内容

首先,网卡将信号还原成数字信息,协议栈将拆分的网 络包组装起来并取出响应消息,然后将消息转交给浏览器。

要显示内容,首先需要判断响应消息中的数据属于哪种类型。

Content-Type: text/html

当数据类型为文本时,还需要判断编码方式

Content-Type: text/html; charset=utf-8

中文常用的编码包括 gb2312、gbk、gb18030、big5 等

还需要检查 Content-Encoding 头部字段:

如果消息中存放的内容是通过压缩或编码技术对原始数据进行转换得到的,

那么 Content-Encoding 的值就表示具体的转换方式

我们可以知道如何将消息中经过转换的数据还原成原始数据。

MIME:Multipurpose Internet Mail Extensions,多用途因特网邮件扩充。 

6.42显示内容

HTML 文档通过标签表示文档的布局和字体等样式信息,按照指定的样式显示文档的内容。

Web 服务器可能还会返回其他类型的数据,如文字处理、幻灯片等应用程序的数据。

这些数据无法由浏览器自行显示,这时浏览器会调用相应的程序。这些程序可以是浏览器的 插件,也可以是独立的程序

<<网络是怎样连接的>>笔记第6章 request到达Web server, return response to browser的更多相关文章

  1. <<网络是怎样连接的>>笔记第2章用电信号传输Tcp/ip数据

    创建套接字: 协议栈的内部结构.套接字的实体,以及创建套接字的操作过程 连接服务器: “连接”具体是进行怎样的操作,在这个过程中协议栈到底是如何工作的, 以及客户端和服务器是如何进行交互的. 收发数据 ...

  2. <<网络是怎样连接的>>笔记第5章 防火墙,缓存服务器

    第5章 服务器防火墙,缓存服务器 部署地点 防火墙结构和原理 通过将请求平均分配给多台服务器来平衡负载 利用缓存服务器分担负载(客户端也可以部署缓存服务器, 缓存服务器用法很多) 内容分发服务(从缓存 ...

  3. <<网络是怎样连接的>>笔记第一章browser生成message

    网络:由负责搬运数字信息的机制 + 浏览器和服务器这些网络应用程序. web->协议栈,网卡->交换机,路由器->接入网,网络运营商->(防火墙,缓存服务器)->web服 ...

  4. 《Clojure编程》笔记 第16章 Clojure与web

    目录 背景简述 第16章 Clojure与web 16.1 术语 16.2 Clojure栈 16.3 基石:Ring 16.3.1 请求与应答 16.3.2 适配函数 16.3.3 处理函数 16. ...

  5. 【网络】<网络是怎样连接的>笔记

    [一] 浏览器 http://user:pwd@hosturl:port/dir/of/file 基本思路: 1.1 生成http请求信息 包含“对什么”“进行怎样的操作”两个方法.一般常用操作是GE ...

  6. SPRING IN ACTION 第4版笔记-第五章BUILDING SPRING WEB APPLICATIONS-007-表单验证@Valid、Error

    一. Starting with Spring 3.0, Spring supports the Java Validation API in Spring MVC . No extra config ...

  7. SPRING IN ACTION 第4版笔记-第五章BUILDING SPRING WEB APPLICATIONS-006-处理表单数据(注册、显示用户资料)

    一.显示注册表单 1.访问资源 @Test public void shouldShowRegistration() throws Exception { SpitterRepository mock ...

  8. SPRING IN ACTION 第4版笔记-第五章BUILDING SPRING WEB APPLICATIONS-005-以path parameters的形式给action传参数(value=“{}”、@PathVariable)

    一 1.以path parameters的形式给action传参数 @Test public void testSpittle() throws Exception { Spittle expecte ...

  9. SPRING IN ACTION 第4版笔记-第五章BUILDING SPRING WEB APPLICATIONS-004-以query parameters的形式给action传参数(@RequestParam、defaultValue)

    一. 1.Spring MVC provides several ways that a client can pass data into a controller’s handler method ...

随机推荐

  1. 【ES6】001---module模块------【巷子】

    001.前言 什么是模块化开发?   为了提高代码的复用度,开发人员会按照功能把大量的js代码分成若干文件,这样在多个页面就可以使用同一个文件了.,下面是某个网站的js引用情况 怎么会有这么多js文件 ...

  2. php最全基础,数组,函数,超全局变量,时间,回话,文件,php操作mysql

    共享一份学习php最全基础语法知识的笔记 原文链接:http://www.cnblogs.com/oscn/p/3607757.html:略有修改   http://www.cnblogs.com/l ...

  3. talib 中文文档(十四):Math Transform Functions 数学变换

    Math Transform Functions ACOS - Vector Trigonometric ACos 函数名:ACOS 名称:acos函数是反余弦函数,三角函数 real = ACOS( ...

  4. Python开发【项目】:生产环境下实时统计网站访问日志信息

    日志实时分析系统 生产环境下有需求:要每搁五分钟统计下这段时间内的网站访问量.UV.独立IP等信息,用直观的数据表格表现出来 环境描述: 网站为Nginx服务,系统每日凌晨会对日志进行分割,拷贝到其他 ...

  5. IIS7.5站点配置

    1. 创建站点映射目录: c:\website\release 2. 创建系统用户: a.本地用户和组-->用户-->新用户-->用户名\密码:WebUSR.xxxyyy--> ...

  6. centos 目录文件管理 mkdir,rm,touch,误删文件extundelete,cp,mv,cat,more,less ,head,tail,chown,chmod ,umask 第四节课

    centos 目录文件管理 mkdir,rm,touch,误删文件extundelete,cp,mv,cat,more,less ,head,tail,chown,chmod ,umask  第四节课 ...

  7. [Err]1418 This function has none of DETERMINISTIC,NO SQL,or R

    -----------------------------------------------------------------------------------------------      ...

  8. Linux下编译安装MySQL5.6

    [准备工作] 所有操作需要在root用户下 本机测试案例系统信息:centos7.3 安装路径:/usr/local/mysql [安装MySQL] 先安装如下依赖包: $ yum -y instal ...

  9. Spark中ml和mllib的区别

    转载自:https://vimsky.com/article/3403.html Spark中ml和mllib的主要区别和联系如下: ml和mllib都是Spark中的机器学习库,目前常用的机器学习功 ...

  10. 一个很大的文件,存放了10G个整数的乱序数列,如何用程序找出中位数。

    一.梳理审题 一.看清题目: 注意这个题目的量词,这个文件中有10G个整数,而不是这个文件占了10G的内存空间. 二.一些疑问: 在计算机中我们讲的G.M等都是存储容量的概念,但是一般都会在会面加上B ...