第一章 了解WEB及网络基础
TCP/IP协议族
1. 协议
两个设备为了通信而定下的约定,类似于谁先发出请求,用什么语言通信,怎么结束请求
2.分层
-
应用层 应用层规定了如何向用户提供服务
常见协议:FTP,DNS,HTTP
-
传输层
传输层为应用层提供两台计算机之间的网络传输 常见协议:TCP,UDP
- 网络层
主要来处理网络上流动的数据包,规定了数据包的传输路线和如何把数据包发送给对面,在很多传输路线中选择一条传输路线
- 数据链路层 来处理网络的硬件部分,包括驱动,网卡,光纤
3.通信传输流
发送端从应用层向下发送,接收端从下层向应用层传递
传输层(TCP协议)接收到应用层的HTTP报文后进行分割,并在每个报文上打上标记序号和端口号发给网络层
网络层(IP协议)增加作为通信目的地的MAC地址,然后转发给链路层
服务端每经过一层就脱掉一层头部
IP协议
IP在网络层 IP协议的作用就是把数据包发送给对方,保证发送到位要有IP地址和MAC地址 数据传输中可能经过多次中转,中转的过程就是路由选择 IP协议主要依赖MAC地址,而路由选择是通过ARP协议,从IP地址查到目的地的MAC地址 这样每个路由都能通过MAC地址找到下一个中转,最终找到目的地
TCP协议
TCP在传输层,用来提供可靠的字节流服务
字节流是指把大的报文分割成以报文段为单位的数据包进行管理
三次握手
TCP采用三次握手来确保数据包能到达
握手的过程中采用了TCP的标志 SYN和ACK
发送端先发送有SYN的数据包,接收端返回SYN/ACK,发送端再返回ACK
DNS服务
DNS服务提供从域名到IP地址之间的解析服务
HTTP请求发送到接收之间的过程
- DNS首先查询域名的IP
- HTTP协议生成HTTP请求
- TCP协议分割成报文段,然后保证可靠的传送给对方
- IP协议搜索对方的地址,一边中转一边传送
- 接收端收到报文段并且按照原来顺序重组报文
- 接收端HTTP协议根据HTTP请求做出响应
URI,URL
URI是统一资源标识符,能标志一个资源,就像人的身份证,能标志但是不能定位到一个人 URL是统一资源定位符,能定位一个资源,就像你的快递地址 URL是URI的子集
第二章 简单的HTTP协议
长连接
短连接的问题是每进行一次HTTP请求就要建立一次TCP连接,三次握手四次挥手,长连接减少了这些建立连接时的浪费 长连接是一端不主动断开就一直存在
请求管线化(piplelining)
持久连接让请求管线化成为可能 之前要等待响应才能发送下一个请求 现在不用等待响应可以继续发送请求
Cookie
由于HTTP无状态的连接,不能记住客户端的状态 把Cookie存到客户端本地,下次请求的时候带着Cookie,服务端就可以根据Cookie辨认出是哪个客户端
第三章 HTTP报文内的HTTP信息
HTTP报文
报文大致可分为首部和主体两部分 通常可以没有主体
实体压缩
为了提高传输速率,可以把要传输的实体先压缩
实体分割
客户端未完成通信的时候看不见响应的图片等内容,这个时候可以先把实体分割一下然后分块发送,客户端可以一块一块的看见内容
范围请求
请求的时候可以加上
Range字段来请求一段字节的内容
范围请求的响应状态码是206代表返回的是部分内容
如果是多重范围的范围请求要在ContentType标明multipart/byteranges
第四章 HTTP返回状态码
1XX 正在处理
2XX 成功
200 OK 正常处理 204 No Content 成功处理,但是不返回资源 206 返回的是部分请求
3XX 重定向
301 永久重定向 请求的资源分配了新的URI 302 临时重定向,只有本次用新的URI 303 也是临时重定向,但是要用GET请求
301 302禁止POST变GET,但是实际上这三种重定向的时候都会把POST改成GET并且删除报文的主体 叛逆!😎
304 不符合请求的条件 307 也是重定向,每种浏览器处理不同
4XX 客户端错误
400 请求错误 401 未认证 403 禁止访问资源 404 没找到请求的资源
5XX服务器错误
500 服务器内部错误
503 服务器超负荷或者正在停机维护,可以通过RetreyAfter告知客户端多久之后再请求
第五章 与HTTP协作的WEB服务器
虚拟主机HOST
一台物理层面的服务器可以有多台虚拟主机
这些不同的域名解析后的IP地址是相同的
所以为了访问到这些虚拟主机,要在HOST首部指定主机名或域名
通信数据转发程序
通信数据转发程序有代理,网关,隧道等。
代理
中间商,客户端的请求经过他转发给服务器,服务器的响应经过他发送给客户端 代理不改变URI
网关
网关可以由HTTP请求转化为其他协议通信
隧道
隧道可以按要求建立起和其他服务器的通信线路,可以通过SSL保证安全 隧道的主要目的就是保证通信的安全 对客户端来说隧道时透明的
第六章 HTTP首部
通用首部字段
请求和响应双方都会使用的字段
- Cache-Control 操作缓存
- Connection 管理连接,默认Keep-Alive长连接
- Date HTTP报文创建的日期和时间
- Trailer 把头部放到报文主体之后
- Transfer-Encoding 编码方式
- Via 经过代理的时候追踪经过了哪些
请求首部字段
- Accept 通知服务器处理的媒体类型优先级
- Accept-Charset 接受的字符集
- Accept-Encoding 接受的压缩方法
- Accept-Language 接受的语言
- Authorization 验证信息
- Host 指定请求的虚拟服务器
- Max-Forwards 最大转发次数
响应首部字段
- Age 多久之前创建了响应
- Etag 指定资源,资源更新后URI不变但是ETag会变
- Location 重定位
实体首部字段
- Allow 资源允许请求的方法
- Content-Encoding 服务器对实体的压缩方法
- Content-Length 表明实体部分的大小
- 各种Content开头的控制字段
- Expires 过期时间
- Last-MOdified上次修改时间
Cookie首部字段
用来管理Cookie的 Set-Cookie :
确保WEB安全的HTTPS
HTTP缺点
- 明文,未加密
- 不验证身份,可能伪装
- 无法证明报文完整性
HTTPS使用SSL和TLS加密
从 HTTP -> TCP 到 HTTP -> SSL/TLS -> TCP
HTTPS通信过程
- 客户端发送Client Hello开始SSL通信,指定了各种加密组件和SSL版本
- 服务器可以SSL通信时会发送SeverHello报文作为应答
- 服务器发送Certificate报文,传送证书
- 服务器发送Server Hello Done通知客户端协商结束
- SSL第一次握手结束,之后客户端发送Client Key Exchange回应,包含一段用密钥加密的随机数
- 客户端发送Change Cipher Spec,提示服务器加密的密钥
- 客户端发送Finished,报文包括从开始到现在所有报文的整体校验值
- 服务器发送Change Cipher Spec
- 服务器发送Finished
- SSL建立成功,继续发送HTTP请求
第八章 用户身份认证
BASIC认证 HTTP明文传输的认证 DIGEST认证 双方本地计算然后传输质询码 安全程度不高而且很麻烦 SSL认证 客户端证书需要一定的费用,开销太大 表单认证 用的最多的认证,发送信息之后交给WEB程序亲认证
Cooke Session
Session管理和Cookie状态管理过程
- 客户端把ID和密码信息发送给服务器
- 服务器会发放识别用户的SessionID,然后把用户登录状态和SessionID绑定放到服务端,
- 返回的时候在Set-Cookie字段写入SessionId
SessionID可以认为是为了区分不同用户的一串号码
- 客户端接收到SessionID后会把他作为Cookie存在本地,下次请求的时候直接发送Cookie,
所以SessionID也会跟Cookie一起发送过去。服务端就可以根据SessionID识别用户和认证状态
第十一章 HTTP安全
XSS脚本攻击
通过改写HTML或者添加脚本设下陷阱
被攻击的用户在自己的浏览器运行网页的时候,可能会执行恶意的JS
同时XSS还可能窃取Cookie