计算机与网络
互联网协议群
- 类似于OSI模型,一种网络协议的概念模型
- 应用层:提供应用间通信能力(http协议)
- 传输层:提供主机到主机(host-to-host)的通信能力(TCP/UDP协议),端口号代表的是应用
- 网络层:提供地址到地址的通信能力(IP协议)
- 链接层:提供设备到设备的通信能力(多种底层网络协议Ethernet,Wi-Fi)
- 物理层
- TCP/IP协议
- 三次握手
- 流程图

- 为什么需要三次握手:计算机对话和人对话的区别
- 流程图
- 处理数据接收发送顺序问题
- 消息的绝对顺序用(SEQ,ACK)这一对元组描述
- SEQ(Sequence):这个消息发送前一共发送了多少字节
- ACK(AcKnowledge):这个消息发送前一共收到了多少字节
- 消息的绝对顺序用(SEQ,ACK)这一对元组描述
- 中断连接也需要四次挥手,服务端反馈,这样才能保持可靠性,以免客户端还有发送到服务端但没有收到/服务端发送回客户端,客户端没有收到的消息。
DNS和CDN
统一资源定位符(URL) 也被称作网址,用于定位互联网上的资源

DNS(Domain Name System)域名系统

DNS资源记录(Resource Record)
- A记录(最常见):定义主机的IP地址
- AAAA记录:定义主机的IPv6地址
- CNAME记录(Canonical Name Record):定义域名的别名
- MX记录:定义邮件服务器
- NS记录:定义提供dns信息的服务器
- TXT记录:定义文本信息
- SOA记录:定义在多个ns服务器中哪个是主服务器
DNS查询工具(实操)
- dig(DNS lookup utility):用来查询dns的小工具
- nslookup:交互式查询域名服务工具
- host(DNS lookup utility)
本地host修改(实操)
- Window/Linux/Mac等host文件修改
- Switchhost工具
- 内容分发网络(Content Delivery Network)
- 基于地理位置的分布式代理服务器/数据中心
- 提高可用性
- 提升性能
- 提升体验

HTTP协议
- HTTP协议
- 超文本传输协议(Hyper Text Transfer Protocol)
- 处理客户端和服务端之间的通信
- http请求/http返回
- 网页/json/xml/提交表单……
- 纯文本+无状态(Stateless)
- 应用层协议(下面可以是TCP/IP)信息纯文本传输
- 无状态
- 每次请求独立
- 请求间互不影响
- 浏览器提供了手段维护状态(Cookie, Session, * Storage等)
- HTTP设计考虑因素
- 基础因素 + 带宽
- 基础网络(线路、设备等)
+ 延迟
- 浏览器
- DNS查询
- 建立连接(TCP三次握手)
- 缓存与带宽优化 + 缓存
- (http1.0)提供缓存机制如IF-Modified-Since等基础缓存控制策略
- (http1.1)提供E-Tag等高级缓存策略
+ 带宽优化
- (http1.1)利用range头获取文件的某个部分
- (http1.1)利用长连接让多个请求在一个TCP连接上排队
- (http2.0)利用多路复用技术同时传输多个请求
- 压缩/安全性 + 压缩
- 主流web服务器如nginx/express等都提供gzip压缩功能
- (htto2.0)采用二进制传输,头部使用HPACK算法压缩
+ HTTPS
- 在HTTP和TCP/IP之间增加TSL/SSL层
- 数据传输加密(非对称+对称加密)
- HTTPS
- 安全超文本传输协议(Hyper Text Transfer Protocol Secure)
- 数据加密传输
- 防止各种攻击手段(信息泄露、篡改等)
- SSL/TSL(Secure Socket Layer/Transport Layer Secure)
- SSL-安全套接层
- TSL-传输层安全性协议
- 需要再客户端安装证书
- cURL
- curl -I url :获取header
- 常见请求头
- Method
- GET:从服务器获取资源
- POST:在服务器创建资源
- PUT:在服务器修改资源(幂等性:多次请求对服务器影响一样)
- DELETE:在服务器删除资源
- OPTIONS:获取支持的请求方法
- TRACE:用于调试信息(多数网站不支持)
- CONNECT:建立代理连接
- 状态码
- 1xx:信息
- 100 continue
- 101切换协议(switch protocol)
- 2xx:成功
- 200 - oK
- 201 - Created已创建
- 202 - Accepted已接收(客户端应该轮询)
- 203 - Non-Authoritative lnformation非权威内容
- 204 - No Content没有内容
- 205 - Reset Content重置内容(客户端应该清空表单)
- 206 - Partial Content服务器下发了部分内容(range header)
- 3xx:重定向
- 300 - Multiple Choices用户请求了多个选项的资源(返回选项列表)
- 301 - Moved Permanently永久转移
- 302 - Found资源被找到(以前是临时转移)
- 303 - See Other可以使用GET方法在另一个URL找到资源
- 304 - Not Modified没有修改(缓存部分特别说明)
- 305 - Use Proxy需要代理
- 307- Temporary Redirect 临时重定向
- 308 - Permanent Redirect永久重定向
- 面试解惑:301 VS 308
- 共同点
- 资源被永久移动到新的地址
- 差异
- 客户端收到308请求后,之前是什么method,那么之后也会延用这个method(POST/GET/PUT)到新地址
- 客户端收到301请求后,通常用户会向新地址发起GET请求
- 共同点
- 面试解惑:302/303/307
- 共同点
- 资源临时放到新地址(请不要缓存)
- 差异
- 302是http1.0提出的,最早叫做Moved Temporarily;很多浏览器实现的时候没有遵照标准,把所有请求都重定向为GET
- 1999年标准委员会增加了303和307,并将302重新定义为Found。
- 303告诉客户端使用GET方法重定向资源
- 307告诉客户端使用原请求的method重定向资源
- 共同点
- 4xx:客户端错误
- 400 - Bad Request请求格式错误
- 401 - Unauthorized未授权
- 402 - Payment Required请先付费
- 403 - Forbidden禁止访问
- 404 - Not Found未找到
- 405 - Method Not Allowed请求方法不允许
- 406 - Not Acceptable服务端可以提供的内容和客户端期待的不一样
- 5xx:服务器错误
- 500 - Internal Server Error服务器内部错误
- 501 - Not lmplemented(没有实现)
- 502 - Bad Gateway网关错误
- 503 - Service Unavailable服务器不可用
- 504 - Gateway Timeout网关超时
- 505 - HTTP Version Not Supported不支持的HTTP版本
- 1xx:信息
- Content-Length
- 发送给接收者的Body内容长度(字节)
- 一个byte是8bit
- Utf-8编码的字符1-4个字节
- 发送给接收者的Body内容长度(字节)
- User-Agent
- 帮助区分客户端特性的字符串: 操作系统/浏览器/制造商(手机类型等)/内核类型/版本号……
- Content-Type
- 帮助区分资源的媒体类型(Media Type/MIME Type)
- text/html, application/json, text/css, image/jpeg...
- 帮助区分资源的媒体类型(Media Type/MIME Type)
- Origin
- 描述请求来源地址
- scheme://host:port.
- 不含路径
- 可以是null
- 描述请求来源地址
- Accept(建议类/与服务器协商)
- 建议服务端返回何种媒体类型(MIME Type)。
- */*代表所有类型(默认)
- 多个类型用逗号隔开例如:text/html, application/json
- Accept-Encoding: 建议服务端发送哪种编码(压缩算法)
- 建议服务端返回何种媒体类型(MIME Type)。
- Referer
- 告诉服务端打开当前页面的上一张页面的URL;如果是ajax请求那么就告诉服务端发送请求的URL的什么
- 非浏览器环境有时候不发送Referer(或者虚拟Referer,通常是爬虫)。
- 常常用户用户行为分析
- 告诉服务端打开当前页面的上一张页面的URL;如果是ajax请求那么就告诉服务端发送请求的URL的什么
- Connection
- 决定连接是否在当前事务完成后关闭
- Http1.0默认是close
- Http1.1后默认是keep-alive
- 决定连接是否在当前事务完成后关闭
- 常见返回头
- 协议版本状态码
- X-Powered-By
- 日期
- Connection
- Content-Length