World Wide Web
inventor:Tim Berners-Lee
time of invention:1990
Web的构成:
- 网页(基本要素)
- 网页互相链接(从而形成一个庞大的信息网络/内容网络/服务网络)
网页(Web Page)包含多个对象(objects):
- 对象:HTML文件、JPEG图片、视频文件、动态脚本等
- 基本HTML文件:包含对其他对象引用的链接
对象的寻址(addressing)
- URL(uniform resource locator):统一资源定位器 RFC1378
- URL格式:Scheme://host:port/path Scheme(协议,比如HTTP)
Web遵循的协议之HTTP协议概述(1)
- Web应用遵循什么协议?
HTTP 超文本传输协议 HyperText Transfer Protocol - HTTP协议采用的是C/S网络结构
客户:Brower 请求,接收,展示Web对象
服务器:Web Server 响应客户端的请求,生成响应消息,发送对象。最典型的webserver软件是Apache,它是事实上的标准。 - HTTP版本:
1.0 RFC1945
1.1 RFC2068
Web遵循的协议之HTTP协议概述(2)
HTTP协议使用的传输层协议是什么?
使用的是TCP传输服务,大致过程如下:
- 服务器在80端口等待客户的请求
- 浏览器发起到服务器的TCP连接(创建套接字socket)
- 服务器接受来自浏览器的TCP连接
- 浏览器(HTTP客户端)与服务器(HTTP服务端)交换HTTP消息
- 关闭TCP连接
HTTP协议是无状态协议
- 服务器不维护(记录等)任何有关客户端过去行为(所发请求)的信息,通俗的说,每次HTTP请求都是新的,和之前的请求没有任何关联,只要请求就响应。
有状态的协议更加复杂,一般来说,人们更喜欢无状态的协议,因为简单:
- 需要维护状态(历史信息)
- 如果客户或服务器失效(比如重启),会产生状态的不一致,解决这种不一致代价高
HTTP连接 - HTTP有两种连接类型
非持久性连接(Nonpersistent HTTP)
- 每个TCP连接最多允许传输一个对象
- HTTP 1.0使用非持久性连接
持久性连接(Persistent HTTP)
- 每个TCP连接允许传输多个对象
- HTTP 1.1默认使用持久性连接
通过一个实例,比较两者的优劣,一个网页,包含十张图片。
非持久性连接比持久性连接,耗费更多的TCP资源,给服务端造成更多的负载。
通过上图,我们可以看到,非持久性连接需要为这11个网页对象不断重复上述1-5步骤,如果浏览器采取串行请求的方式,那么将会耗费:(2RTT+文件传输时间)*11,如果浏览器采取并行请求的模式,那么虽然时间缩短了,但是会给服务器造成更大负载(TCP连接的资源开销比较大)。
而持久性连接,建立一个TCP连接,就可以收到所有请求对象。而且后续10个对象,耗时要短,只需要1个RTT。
HTTP消息格式:
ASCII
HTTP请求消息:
GET /somedir/page.html HTTP/1.1 请求行: 请求方法 请求对象路径 HTTP版本
Host:www.someschool.edu 请求头:域名
User-agent:Mozilla/4.0 请求头:
Connection:close 请求头:连接可否断开
Accept-language:fr 请求头:语言
空行
(extra carriage return,line feed) Entity Body
HTTP请求消息通用格式:
HTTP响应消息:
HTTP/1.1 200 OK 状态行:协议版本 状态码
Connection:close 响应头
Date:Thu,06 Aug 1998 12:00:15 GMT 响应头
Server:Apache/1.3.0(Unix) 响应头
Last-Modified:Mon,22 Jun 1998 响应头
Content-Length:6821 响应头
Content-Type:text/html 响应头
空行
data data data data data data 响应体
常见的状态码:
200 OK
301 Moved Permanently
400 Bad Request
404 Not Found
505 HTTP Version Not Supported
HTTP1.0方法:GET POST HEAD
HTTP1.1方法:GET POST HEAD PUT DELETE