web背景知识

  互联网的底层协议

Posted by Xiaoran on January 6, 2019

本文是 Fundamentals of Web Development 第一章的读书笔记,原书作者是 Randy Connolly 和 Ricardo Hoar。

1.1 Web 的定义和历史

什么是 Web? Web 是 Internet 的一个子集,如下图所示

1.1.1 Internet 的起源

  • 电话线路是 circuit switching
    • 原始的电话线路在几十年内都需要人工转接
  • 于1969年建立的 ARPANET 是 packet switching
    • 同时,在1979年建立了 USENET
  • 虽然网络野蛮生长,但是各机器难以沟通,于是产生了一系列的通信协议
    • 1981有了因特网的通信协议,其中最主要的是 TCP/IP

1.1.2 Web 的起源

  • 90年代初之前的因特网和今天的因特网很不一样,因为那时只有 email 和命令行文本
  • 巨大的转变来自于 World Wide Web 的出现
    • 一个英国人于1990年发明了一个超文本系统
    • 功能包括
      • URL 定位语言
      • HTTP 协议
      • 网页服务器
      • HTML 语言
      • 使用 HTTP 发送 URL 并显示 HTML 的浏览器
    • 人类第一个网页浏览器
    • (HTML 在未来的几章介绍,URL 和 HTTP在本章介绍)
  • Web 后来还是不太火,直到1993年 Mosaic 出现
    • 第一个流行的图形界面浏览器
    • 后来1994年又进化成网景浏览器,迅速变成主流
    • 后来在世纪末被 IE 打败
  • 人类主机爆炸增长,从2000年的千万台增长到2010年的十亿台

1.1.3 对比网页应用和桌面应用

  • 网页应用的优点
    • 支持任何上网设备
    • 跨平台
    • 更新时只需操作服务器
    • 集中存储更安全
  • 网页应用的缺点
    • 必须联网
    • 隐私传输泄露
    • 在线文件的版权
    • 某些网页不兼容某些浏览器
    • 某些操作系统不兼容某些软件
      • 比如 iOS 上面的 Adobe Flash
  • 公网和私网 (Intranet) 对求职的影响
    • 公网技术:PHP, MySQL, WordPress
    • 私网技术:ASP.NET, JSP, SharePoint, Oracle, SAP

1.1.4 静态网页和动态网页

  • 最初的网页都是静态的门户网站
    • 用户请求服务器上的文本和图片
    • 服务器发送文本和图片
    • 用户浏览器显示 HTML
  • 后来服务器上增加了数据库,与企业、金融的系统进行交互,成为了动态页面
    • 用户请求服务器运行脚本文件
    • (脚本文件代表语言:PHP)
    • 脚本文件生成 HTML 页面,发给用户
    • 用户浏览器显示 HTML

1.1.5 Web 2.0+

  • 对用户来说,Web 2.0 意味着可以上传和下载页面内容
    • 知名页面包括 Facebook, YouTube, Wikipedia
    • 支持的功能包括:用户的评论、论坛帖子留言、社交网站朋友圈
  • 对开发者来说,Web 2.0 意味着代码执行从服务器向浏览器转移
    • 浏览器端代表语言:JavaScript
    • 支持异步通信
  • 支持用户交互的网页比静态网页要复杂得多
    • 出现了分工
    • 很多程序员不会设计 UI
    • 很多 UI 设计师不会编程

1.2 因特网协议

  • 以 TCP/IP 为代表的4级结构
    • 链路层
      • MAC
    • 网络层
      • IPv4, IPv6
    • 传输层
      • TCP, UDP
    • 应用层
      • HTTP, SSH, POP/IMAP/SMTP, DNS

1.3 用户-服务器模型

1.3.1 用户

  • 用户发送请求并接收回复
    • 主要包括 PC,笔记本,手机,平板
    • 主要是通过浏览器进行请求,但是也可以由其他程序进行
      • 比如游戏程序用 HTTP 打开帮助页面
    • 甚至服务器也可以扮演用户
      • 比如用 PHP 接口从其他服务器上请求资源

1.3.2 服务器

  • 服务器 24/7 监听请求
    • 每个服务员可以处理成千上万的请求
    • 通过请求-响应循环与用户完成信息交换
  • 服务器类型
    • Web server
      • 处理 HTTP 请求
    • Application server
      • 后端由 PHP, ASP.NET 实现
    • Database server
      • 由 MySQL, Oracle, SQL Server 实现
    • Mail server
  • 服务器集群
    • 大型网站同时运行很多的服务器
      • Facebook 每秒钟处理上百万的请求
    • 使用上千台主机的服务器集群
      • 负载均衡器向各主机分配用户请求
      • 刀片服务器平行排列,节省体积
    • 即使单台服务器运算力充足,也可选择服务器集群,目的是灾难恢复备份

1.3+ 其他

  • 1.3.3 例外:P2P 模型
    • 不需要服务器,每个用户都是对等的
    • 例子:视频聊天,BT 下载
  • 1.4 因特网路由
    • 移动设备-家用路由器-调制解调器-交换机-光纤-大厂服务器
  • 1.5 DNS 域名系统

1.6 URL

全称:Uniform Resource Locator

  • Domain
    • com 是一级域名,funwebdev 是二级域名,www 是三级域名
  • Path
    • 表示脚本文件的路径,等同于根目录下的/index.php
  • Query string
    • 未来会在 HTML 详细讨论
    • 用户向服务器发送信息的一种方式
    • 可以用?&表示键值对
      • 比如?username=john&password=abcde
  • Fragment
    • 可选
    • 帮助用户快速访问页面中的某个区域
      • 比如:博客和维基百科的子标题

1.7 HTTP

  • HTTP 是 World Wide Web 的传输协议
  • HTTP 建立在 TCP 的端口80上

1.8 web 服务器的具体实现

  • 本书主要实现 LAMP 技术栈
    • Linux 操作系统
    • Apache web 服务器
    • MySQL 数据库
    • PHP 脚本语言
  • 其他的技术栈
    • 苹果 OSX MAMP
      • 非常类似 LAMP
    • 微软的 WISA
      • Windows 操作系统
      • IIS web 服务器
      • SQL Server 数据库
      • ASP.NET 服务器端开发工具