图解HTTP读书笔记
一、了解Web及网络基础
-
TCP/IP通信传输流
-
IP协议的作用是将各种数据包传送给对方。而要保证传送到对方,则需要两个重要的条件是IP地址和MAC地址。
-
TCP协议的作用是提供可靠的字节流服务。TCP协议采用了三次握手策略。握手过程中使用了TCP的标志(flag)-SYN(synchronize)和ACK(acknowledgement)
若在某个阶段莫名中断,TCP协议会再次以相同的顺序发送数据包 -
DNS 负责域名解析
二、简单的HTTP协议
-
请求必定由客户端发出,而服务端回复响应。
-
请求报文是由请求方法、请求URI、协议版本、请求头和内容实体构成。
-
响应报文基本由协议版本、状态码、接释状态码的原因短语、可选的响应首部以及实体主体构成。
-
HTTP是无状态协议
- 协议对于发送的请求和响应都不做持久化处理。客户端发了啥,他也不知道了。
随着Web的不断发展,无状态的设计会让业务变得棘手。比如用户登录到一家购物网站,即使他跳到其他页面,也需要保持他的登录状态。于是引入了Cookie技术。
5. HTTP支持的方法
- HTTP初始版本中,每进行一次HTTP通信就要断开一次TCP连接
- 持久连接
为了解决上述TCP连接的问题,HTTP/1.1和一部分HTTP/1.0想出了持久连接的方法。只要任意一端没有明确提出断开连接,则保持TCP连接状态。在HTTP/1.1中,所有的连接默认都是持久连接。
8. 管线化
发送请求后无需等待响应可直接发送下一个请求。
9. Cookie
Cookie会根据从服务端发送的响应报文内一个叫Set-Cookie的首部字段信息,通知客户端保存Cooie。当下次客户端再往该服务器发送请求时,客户端会自动在请求中加入Cookie值
三、HTTP报文内的HTTP信息
-
请求报文和响应报文的结构
-
报文:是HTTP通信中的基本单位,由8位字节流组成,通过HTTP通信传输
-
实体:作为请求和响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。
-
内容编码
- gzip(gnu zip)
- compress
- deflate(zlib)
- identity(不进行编码)
- 分块传输
在HTTP通信过程中,请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求页面。传输大容量数据时,通过把数据分割为多块,可以使浏览器逐步显示页面。
分块传输会把实体主体分为多块,每块都会用十六进制标记块的大小。而实体主体的最后一块会使用“0(CR+LF)”来标记
6. 发送多种数据的多部分对象集合
发送邮件时,我们可以在邮件里写入文字并添加多份附件,包括图片、视频等。这是因为采用了MIME机制。而在MIME扩展中会使用多部分对象集合(Multipart)的方法。
HTTP中也采纳了多部分对象集合,发送的报文主体中可包含多类型实体。
多部分对象集合包含内容如下;
-
multipart/form-data
在web表单文件上传时使用
-
multipart/byteranges
状态码206,响应报文包含了多个范围的内容时使用
- 获取部分内容
以前下载过程中如果遇到网络中断,那就必须重新开始。为了解决这个问题就需要一个从之前下载中断处继续下载的功能。也就是指定范围进行请求
四、返回结果的HTTP状态码
- 状态码可描述请求的处理结果
- 常用状态码
- 200 请求正常处理
- 204 请求成功处理,但是没有资源可返回
- 206 Partial Content 响应报文中包含了指定范围的实体请求
- 301 永久性重定向
- 302 Found 临时性重定向
- 303 表示请求的资源存在另一个URI,应使用GET方法定向获取请求的资源
- 400 Bad request
- 401 未授权、未认证
- 403 请求访问的资源被服务器拒绝
- 404 服务器上无法找到对应的资源
- 500 服务器端执行请求时发生了错误
- 503 服务器超负荷或者停机维护,现在无法处理请求
不少返回的状态码响应都是错误的,但是用户可能察觉不到。
五、与HTTP协作的Web服务器
- 用单台虚拟主机实现多个域名
- 通信数据转发程序
-
代理
是有转发功能的应用程序
-
网关
是转发其他服务器通信数据的服务器
-
隧道
在相隔甚远的客户端和服务端两者之间进行中转,并保持双方通信连接的应用程序。
六、HTTP首部
-
报文结构
-
通用首部字段
-
HttpOnly属性
可以使js脚本无法获取Cookie。
七、确保Web安全的Https
- HTTP的缺点
- 通信使用明文
- 不验证通信方的身份
- 无法证明报文的完整性
- 通信加密
通过和SSL(安全套接层)或TLS(安全层传输协议)的组合使用,可以加密HTTP的通信内容。与SSL组合使用的HTTP被称为HTTPS。
3. 不验证身份的问题
- 无法确定正在通信对方是否有访问权限
- 无法确定响应返回到的客户端是否是伪装的
- 无法阻止海量请求的Dos攻击
但如果使用了SSL,就可以查明对方的证书,证书是由值得信任的第三方机构颁布
4. 无法证明报文完整性
Http协议无法证明通信的报文完整性,可能会被中间人攻击来修改。其中采用的MD5和SHA-1等散列值校验的方法。
5. Https
HTTP+加密+认证+完整性保护
通常HTTP直接和TCP通信,当使用SSL的时候,则是先和SSL通信,再由SSL和TCP通信了。简言之,HTTPS,就是身批SSL协议这层外壳的HTTP。
HTTPS采用混合加密机制,在交换密钥环节使用公开密钥(公钥加密,非对称加密方式)加密,之后建立通信交换报文阶段使用共享密钥加密方式。
证明公开密钥的正确性需要证书,证书需要权威机构颁发。
HTTPS存在的问题,就是使用SSL时,速度会变慢。
- 通信慢 需要进行SSL通信,通信量增加
- 需要加解密,会占用CPU资源
第八章 确认访问用户身份的认证
起因:有些页面只想让特定的人浏览
HTTP/1.1使用的认证方式:
- BASIC 认证
- DIGEST 认证(摘要认证)
- SSL客户端认证
- FormBase 认证(基于表单认证)
- BASIC 认证
步骤1: 当请求的资源需要BASIC认证时,服务器会随状态码401,返回带Authenticate首部字段的响应。该字段内包含认证的方式及Request-URI安全域字符串
步骤2: 收到状态码401的客户端为了通过BASIC,需要将ID和密码发送给服务器,发送的字符串格式为用户名:密码,再经过Base64编码。
步骤3: 当用户代理方式是浏览器时,用户仅需要在弹出框内输入用户ID和密码就行了
BASIC认证的缺点是明文传输用户ID和密码,如果是使用的HTTP等非加密通信,信息容易被盗
2. DIGEST 认证
为了弥补BASIC认证的缺点,就有了DIGEST认证,采用的是质询/响应的方式。
步骤1: 请求需要认证的资源时,服务器会随着401返回带WWW-Authenticate首部字段的响应。该字段包含临时质询码(随机数和nonce)
步骤2: 接收到401状态码的客户端,返回的响应码中包含DIGEST认证必须的首部字段Authorization信息。首部字段Authorization中必须包含username,realm,nonce,uri和response的字段信息。其中realm和nonce就是之前从服务器接收到的响应字段。
步骤3:接收到包含Authorization请求的服务器,会确认认证信息的正确性。认证通过后返回Request-URI资源的响应。
九、基于HTTP的功能追加协议
- SPDY
HTTP协议的瓶颈:在比如Facebook等网站上,几乎能实时观察到海量用户发布的内容。Web网站为了保存这些新增内容,需要在很短的时间内就会发生大量的更新。HTTP要想实现客户端就必须频繁的轮询。
HTTP的缺陷:
- 一个连接只能发一个请求
- 请求只能从客户端开始
- 请求/响应的首部未经压缩就发送
- 发送冗长的首部
- 可任意选择数据格式压缩,非强制压缩发送
使用SPDY后可以获得如下功能:
- 多路复用流
通过单一的TCP连接,可以无限制处理多个HTTP请求。
- 赋予请求优先级
- 压缩HTTP首部
- 推送功能
支持服务器主动向客户端推送数据的功能
- 服务器提示功能
服务器可以主动提示客户端请求所需的资源,在资源已缓存的情况下,可以避免发送不必要的请求
2. WebSocket
是Web浏览器和Web服务器之间全双工通信标准。由于是建立在HTTP协议的基础上,因此连接的发起方仍是客户端,而一旦确定WebSocket通信连接,任意一方都可以直接向对方发送报文。
十、构建Web内容的技术
主要讲了HTML、CSS、DOM等
十一、Web的攻击技术
- 跨站脚本攻击(XSS)
在动态生成HTML处发生。如下图网站:
- SQL注入
- OS命令注入攻击
通过Web应用,执行非法的操作系统命令
4. 设计错误
- 在登录页面时,如果用户没注册提示用户未注册,用户密码输入错误时,提示密码错误。这样攻击者可以利用信息的不同判断到输入的用户名是否注册。
- 数据库报错时抛出具体的sql错误信息。这样会让攻击者了解到数据库的表和字段信息等。
- 会话劫持
攻击者通过某种手段拿到了用户的会话ID,并使用他伪造成用户。
6. 点击劫持
利用透明的按钮或链接做成陷阱,覆盖在web页面之上,然后诱使用户点击那个链接访问内容的手段。
7. DoS攻击
集中利用访问请求造成资源过载,资源用尽的同时,服务也停止了。多台计算机发起的DoS攻击称为DDoS攻击。