Web Service

传输层:提供进程地址

Port number:

tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路;

0-65535

udp:User Datagram Protocol,无连接的协议;

0-65535


IANA:

0-1023:众所周知,永久的分配给固定的应用使用,特权端口,22/tcp(ssh), 80/tcp(http), 443/tcp(https)

1024-41951:亦为注册端口,但要求并不是特别严格,分配给程序注册为某应用使用,11211/tcp, 11211/udp (memcached), 3306/tcp(mysql)

41952+:客户端程序随机使用的端口;动态端口,或私有端口;其范围的定义:/proc/sys/net/ipv4/ip_local_port_range


Socket: IPC的一种实现,允许位于不同主机(甚至同一主机)上不同进程之间进行通信;数据交换;Socket API, 1983年,4.2 BSD

SOCK_STREAM:tcp套接字

SOCK_DGRAM:udp套接字

SOCK_RAW: 裸套接字


IPv4:

分类:

A:1-127

B:128-191

C:192-223

D:组播,224-239

E:240-254


私有地址:

A:10.0.0.0/8

B:172.16.0.0/16-172.31.0.0/16

C:192.168.0.0/24-192.168.255.0/24


TCP协议的特性:

建立连接:三次握手

将数据打包成段:校验和(CRC-32)

确认、重传以及超时:

排序:逻辑序号

流量控制:滑动窗口算法

拥塞控制:慢启动和拥塞避免算法


Socket Domain(根据其所使用的地址):

AF_INET:Address Family,IPv4

AF_INET6:IPv6

AF_UNIX:同一主机上不同进程之间通信时使用;


每类套接字都至少提供了两种socket:流,数据报

流:可靠地传递、面向连接、无边界;

数据报:不可靠地传递、有边界、无连接;


套接字相关的系统调用:

socket(): 创建一个套接字;

bind():绑定

listen():监听

accept():接收请求

connect():请求连接建立

write():发送

read():接收

send(), recv(), sendto(), recvfrom()


http: hyper text transfer protocol, 80/tcp

html: 编程语言,超文本标记语言;


<html>

<head>

<title>TITLE</title>

</head>

<body>

<h1></h1>

<p> blabla... <a href="http://×××w.zhanx.wang/logo.jpg"> blabal </a> </p> 

<h2></h2>

</body>

</html>


CSS: Cascading Style Sheet

js: javascript


MIME: Multipurpose Internet Mail Extesion


工作机制:

http请求

http响应


Web资源:web resource

静态文件:.jpg, .gif, .html, .txt, .js, .css, .mp3, .avi

动态文件:.php, .jsp, 


媒体:

媒体类型(MIME类型):major/minor

text/html

text/plain

image/jpeg

image/gif


URI: Uniform Resource Identifier

URL: Uniform Resorce Locator,用于描述某服务器某特定资源的位置;

Scheme://Server:Port/path/to/resource

http://×××w.magedu.com/images/logo.jpg

URN: Uniform Resource Naming


http协议版本:

HTTP/0.9:原型版本,功能简陋

HTTP/1.0:第一个广泛使用的版本,支持MIME

HTTP/1.1: 增强了缓存功能

spdy

HTTP/2.0:


rfc


一次完整的http请求处理过程:

(1) 建立或处理连接:接收请求或拒绝请求

(2) 接收请求:

接收来自于网络的请求报文中对某资源的一次请求的过程;


并发访问响应模型(Web I/O):

单进程I/O结构:启动一个进程处理用户请求,而且一次只处理一个;多个请求被串行响应;

多进程I/O结构:并行启动多个进程,每个进程响应一个请求;

复用I/O结构:一个进程响应n个请求;

多线程模型:一个进程生成N个线程,每个线程响应一个用户请求;

事件驱动:event-driven

复用的多进程I/O结构:启动多个(m)进程,每个进程响应n个请求;



(3) 处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息


元数据:请求报文首部

<method> <URL> <VERSION>

Host: ×××w.magedu.com   请求的主机名称

Connection:


(4) 访问资源:获取请求报文中请求的资源


web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源;这些资源放置于本地文件系统某路径下,此路径通常称为DocRoot


/var/×××w/html/

images/1.jpg


http://×××w.magedu.com/images/1.jpg


web服务器资源路径映射方式:

(a) docroot

(b) alias

(c) 虚拟主机docroot

(d) 用户家目录docroot


(5) 构建响应报文


资源的MIME类型:

显式分类

魔法分类

协商分类


URL重定向:

web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径;


(6) 发送响应报文



(7) 记录日志


http服务器程序:

httpd (apache)

nginx 

lighttpd


应用程序服务器:

IIS

tomcat, jetty, jboss, resin

webshpere, weblogic, oc4j


×××w.netcraft.com


httpd的安装配置和使用:

httpd: apache

a  patchy server = apache

ASF: apache software foundation


httpd的特性:

高度模块化:core + modules

DSO: Dynamic Shared Object

MPM:Multipath Processing Modules

prefork:多进程模型,每个进程响应一个请求;

一个主进程:负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求;即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个;

worker:多线程模型,每个线程响应一个请求;

一个主进程:生成多个子进程,每个子进程负责生个多个线程,每个线程响应一个请求;

m进程,n线程:m*n

event:事件驱动模型,每个线程响应n个请求;

一个主进程:生成m个子进程,每个进程直接n个请求;

m*n


httpd-2.2: event为测试使用

httpd-.24:event可生产使用


httpd的功能特性:

虚拟主机

IP、Port、FQDN

CGI:Common Gateway Interface,通用网关接口;

反向代理

负载均衡

路径别名

丰富的用户认证机制

basic

digest

支持第三方模块