zoukankan      html  css  js  c++  java
  • 图解HTTP读书笔记

    一、了解Web及网络基础

    1. TCP/IP通信传输流

    2. IP协议的作用是将各种数据包传送给对方。而要保证传送到对方,则需要两个重要的条件是IP地址和MAC地址。

    3. TCP协议的作用是提供可靠的字节流服务。TCP协议采用了三次握手策略。握手过程中使用了TCP的标志(flag)-SYN(synchronize)和ACK(acknowledgement)

      若在某个阶段莫名中断,TCP协议会再次以相同的顺序发送数据包

    4. DNS 负责域名解析

    二、简单的HTTP协议

    1. 请求必定由客户端发出,而服务端回复响应。

    2. 请求报文是由请求方法、请求URI、协议版本、请求头和内容实体构成。

    3. 响应报文基本由协议版本、状态码、接释状态码的原因短语、可选的响应首部以及实体主体构成。

    4. HTTP是无状态协议

    • 协议对于发送的请求和响应都不做持久化处理。客户端发了啥,他也不知道了。

    随着Web的不断发展,无状态的设计会让业务变得棘手。比如用户登录到一家购物网站,即使他跳到其他页面,也需要保持他的登录状态。于是引入了Cookie技术。
    5. HTTP支持的方法

    1. HTTP初始版本中,每进行一次HTTP通信就要断开一次TCP连接

    1. 持久连接

    为了解决上述TCP连接的问题,HTTP/1.1和一部分HTTP/1.0想出了持久连接的方法。只要任意一端没有明确提出断开连接,则保持TCP连接状态。在HTTP/1.1中,所有的连接默认都是持久连接。
    8. 管线化

    发送请求后无需等待响应可直接发送下一个请求。
    9. Cookie

    Cookie会根据从服务端发送的响应报文内一个叫Set-Cookie的首部字段信息,通知客户端保存Cooie。当下次客户端再往该服务器发送请求时,客户端会自动在请求中加入Cookie值

    三、HTTP报文内的HTTP信息

    1. 请求报文和响应报文的结构

    2. 报文:是HTTP通信中的基本单位,由8位字节流组成,通过HTTP通信传输

    3. 实体:作为请求和响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。

    4. 内容编码

    • gzip(gnu zip)
    • compress
    • deflate(zlib)
    • identity(不进行编码)
    1. 分块传输

    在HTTP通信过程中,请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求页面。传输大容量数据时,通过把数据分割为多块,可以使浏览器逐步显示页面。

    分块传输会把实体主体分为多块,每块都会用十六进制标记块的大小。而实体主体的最后一块会使用“0(CR+LF)”来标记
    6. 发送多种数据的多部分对象集合

    发送邮件时,我们可以在邮件里写入文字并添加多份附件,包括图片、视频等。这是因为采用了MIME机制。而在MIME扩展中会使用多部分对象集合(Multipart)的方法。

    HTTP中也采纳了多部分对象集合,发送的报文主体中可包含多类型实体。
    多部分对象集合包含内容如下;

    • multipart/form-data

      在web表单文件上传时使用

    • multipart/byteranges

      状态码206,响应报文包含了多个范围的内容时使用

    1. 获取部分内容

    以前下载过程中如果遇到网络中断,那就必须重新开始。为了解决这个问题就需要一个从之前下载中断处继续下载的功能。也就是指定范围进行请求

    四、返回结果的HTTP状态码

    1. 状态码可描述请求的处理结果

    1. 常用状态码
    • 200 请求正常处理
    • 204 请求成功处理,但是没有资源可返回
    • 206 Partial Content 响应报文中包含了指定范围的实体请求
    • 301 永久性重定向
    • 302 Found 临时性重定向
    • 303 表示请求的资源存在另一个URI,应使用GET方法定向获取请求的资源
    • 400 Bad request
    • 401 未授权、未认证
    • 403 请求访问的资源被服务器拒绝
    • 404 服务器上无法找到对应的资源
    • 500 服务器端执行请求时发生了错误
    • 503 服务器超负荷或者停机维护,现在无法处理请求

    不少返回的状态码响应都是错误的,但是用户可能察觉不到。

    五、与HTTP协作的Web服务器

    1. 用单台虚拟主机实现多个域名
    2. 通信数据转发程序
    • 代理

      是有转发功能的应用程序

    • 网关

      是转发其他服务器通信数据的服务器

    • 隧道

      在相隔甚远的客户端和服务端两者之间进行中转,并保持双方通信连接的应用程序。

    六、HTTP首部

    1. 报文结构

    2. 通用首部字段

    3. HttpOnly属性

    可以使js脚本无法获取Cookie。

    七、确保Web安全的Https

    1. HTTP的缺点
    • 通信使用明文
    • 不验证通信方的身份
    • 无法证明报文的完整性
    1. 通信加密

    通过和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 认证(基于表单认证)
    1. 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的功能追加协议

    1. SPDY

    HTTP协议的瓶颈:在比如Facebook等网站上,几乎能实时观察到海量用户发布的内容。Web网站为了保存这些新增内容,需要在很短的时间内就会发生大量的更新。HTTP要想实现客户端就必须频繁的轮询。

    HTTP的缺陷:

    • 一个连接只能发一个请求
    • 请求只能从客户端开始
    • 请求/响应的首部未经压缩就发送
    • 发送冗长的首部
    • 可任意选择数据格式压缩,非强制压缩发送

    使用SPDY后可以获得如下功能:

    • 多路复用流

    通过单一的TCP连接,可以无限制处理多个HTTP请求。

    • 赋予请求优先级
    • 压缩HTTP首部
    • 推送功能

    支持服务器主动向客户端推送数据的功能

    • 服务器提示功能

    服务器可以主动提示客户端请求所需的资源,在资源已缓存的情况下,可以避免发送不必要的请求
    2. WebSocket

    是Web浏览器和Web服务器之间全双工通信标准。由于是建立在HTTP协议的基础上,因此连接的发起方仍是客户端,而一旦确定WebSocket通信连接,任意一方都可以直接向对方发送报文。

    十、构建Web内容的技术

    主要讲了HTML、CSS、DOM等

    十一、Web的攻击技术

    1. 跨站脚本攻击(XSS)

    在动态生成HTML处发生。如下图网站:

    1. SQL注入
    2. OS命令注入攻击

    通过Web应用,执行非法的操作系统命令
    4. 设计错误

    • 在登录页面时,如果用户没注册提示用户未注册,用户密码输入错误时,提示密码错误。这样攻击者可以利用信息的不同判断到输入的用户名是否注册。
    • 数据库报错时抛出具体的sql错误信息。这样会让攻击者了解到数据库的表和字段信息等。
    1. 会话劫持

    攻击者通过某种手段拿到了用户的会话ID,并使用他伪造成用户。
    6. 点击劫持

    利用透明的按钮或链接做成陷阱,覆盖在web页面之上,然后诱使用户点击那个链接访问内容的手段。
    7. DoS攻击

    集中利用访问请求造成资源过载,资源用尽的同时,服务也停止了。多台计算机发起的DoS攻击称为DDoS攻击。

  • 相关阅读:
    linux下的exec命令
    jenkins+gitlab+maven+docker部署项目之jenkins用户权限管理
    油候插件grant的使用
    python deepcopy的替代方案
    starletter代码示例
    mac使用pytorch
    Mac ERROR:root:code for hash md5 was not found.
    scrapy-redis分布式爬虫实战
    mac进行redis5.0单机集群笔记
    合并两个有序的链表Python和Go代码
  • 原文地址:https://www.cnblogs.com/javammc/p/13461046.html
Copyright © 2011-2022 走看看