chapter1.了解Web及网络基础

  1. URI(Uniform Resource Identifier):统一资源定位符,由某个协议名称表示的资源的定位标识符。协议名称比如说HTTP、ftp、file等
  2. URL(uniform resource locator):统一资源定位符
  3. URI和URL两者的区别:URL表示互联网上资源的地点,它是URI的子集
  4. RFC:request for comments,征求修正意见书

chapter2.简单的HTTP协议

1.请求报文的构成
  1. 请求报文由请求行、请求头部(请求首部字段)、请求空行、内容实体(请求体)构成。
2.响应报文的构成
  1. 响应报文由状态行、响应头部(响应首部字段)、响应空行、响应正文(响应体)构成。
3.HTTP协议的特点
  1. HTTP/1.1是无状态的协议:协议本身并不会保存之前一切的请求报文或者响应报文的信息。
  2. 连接的持久性:只要客户端或者服务器端任意一端没有明确提出断开连接,则保持TCP的连接状态。这样只要建立一次TCP连接就可以进行多次请求和响应的交互,不用请求同一个文档中的一张图片或者其他资源分别进行一次TCP连接的建立和断开,提高web页面的显示速度。 在HTTP/1.1中,所有的连接默认是持久连接。
  3. HTTP协议是单向的,在浏览器客户端没有发送请求时,服务器无法主动推送消息给浏览器客户端。
4.HTTP支持的请求类型
  1. GET:获取资源
  2. POST:传输实体的主体,将向服务器端传送的数据放在请求体中
  3. PUT:传输文件,请求报文的主体中包含文件内容
  4. HEAD:获得响应报文首部,用于确认URI的有效性及资源更新的日期时间等
  5. DELETE:删除文件
  6. OPTIONS:询问支持的请求方法
  7. TRACE:追踪路径。
  8. CONNECT:使用隧道协议连接代理。在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TLS协议将通信内容加密后经过网络隧道传输。
5.使用cookie的状态管理
  1. HTTP是无状态协议,不对之前发生过的请求和响应的状态进行管理,无法根据之前请求的状态进行本次的请求处理。
  2. Cookie技术:通过在请求和响应的报文中写入Cookie信息来控制客户端的状态。
    1. Cookie会根据从服务器端发送的响应报文的响应头部的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。
    2. 当下次客户端再往该服务器发送请求时,客户端会在请求报文的请求头中加入Cookie值发送出去
    3. 服务器端发现客户端发送过来的Cookie后,会去检查是哪一个客户端发送过来的请求,然后对比服务器上的记录,最终得到之前的状态信息。

chapter3.HTTP报文内的HTTP信息

  1. HTTP报文:用于HTTP协议交互的信息
  2. 获取部分内容的范围请求:在发送请求时,使用请求头中的首部字段range来指定资源的byte范围。
  3. 内容协商机制:指的是客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最合适的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的标准。内容协商机制涉及到的首部字段比如说:Accept、Accept-Encoding等

chapter4.返回结果的HTTP状态码

  1. 响应的状态码:用来描述客户端发送过来的请求的处理结果。由三位数字和原因短语组成。数字中的第一位表示响应类别
  2. 状态码的类别:
    1. 1XX:信息性状态码,表示接收的请求正在处理
    2. 2XX:成功状态码,表示请求正常处理完毕
    3. 3XX:重定向状态码,表示需要进行附加操作以完成请求
    4. 4XX:客户端错误状态码,表示服务器无法处理请求
    5. 5xx:服务器错误状态码,表示服务器处理请求出错
  3. 具有代表性的状态码如下
    1. 200 OK:表示从客户端发来的请求在服务器端被正常处理
    2. 204 No Content:表示服务器端接受的请求已经成功处理,但是返回的响应报文不含响应主体
    3. 206 Partial Content:表示客户端进行了范围请求,而服务器成功执行了这个请求。
    4. 301 Moved Permanently:表示请求的资源已经被分配了新的URI,永久性重定向
    5. 302 Found:临时性重定向,该状态码表示请求的资源已被分配了新的URI
    6. 303 See Other:表示请求对应的资源存在着另外一个URI,应该使用GET方法定向获取请求的资源
    7. 304 Not Modified:表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但是未满足条件
    8. 400 Bad Request:表示请求报文中存在语法错误
    9. 401 Unauthorized:表示发送的请求需要有通过HTTP认证的认证信息
    10. 403 Forbidden:表示对请求资源的访问被服务器拒绝
    11. 404 Not Found:表示服务器上无法找到请求的资源
    12. 500 Internal Server Error:表示服务器端执行请求时发生了错误
    13. 503 Service Unavailable:表示服务器暂时处于超负荷或者正在进行停机维护,现在无法处理请求

chapter5:与HTTP协作的Web服务器

1.代理
  1. 代理是一种具有转发功能的应用程序,它扮演了位于服务器和客户端中间人的角色,接收由客户端发送的请求并转发给服务器,同时接收服务器返回的响应并转发给客户端。
  2. 代理的分类:按照两种基准分类,一种是是否使用缓存、一种是是否会修改报文。
    1. 缓存代理:代理转发服务器的响应时,缓存代理会预先将资源的副本保存在代理服务器上。
    2. 透明代理:转发请求或者响应时,不对报文做任何加工的代理类型
    3. 非透明代理:和透明代理则相反
2.网关
  1. 网关是转发其他服务器通信数据的服务器。
  2. 利用网关可以将HTTP协议的请求转化为其他协议通信
3.隧道
  1. 隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。

chapter6.HTTP首部

1.HTTP报文首部
  1. HTTP协议中的请求报文和响应报文中都包含HTTP首部。报文首部由请求行(状态行)和请求头(响应头)组成。
2.HTTP首部字段
  1. HTTP首部字段类型如下:
    1. 通用首部字段:请求报文和响应报文都会使用到的首部
    2. 请求首部字段
    3. 响应首部字段
    4. 实体首部字段:请求报文和响应报文的实体部分使用的首部
3.通用首部字段
  1. Cache-Control:控制缓存的行为。常用的取值如下:
    1. no-cache:防止从缓存中返回过期的资源。客户端发送的请求中如果Cache-Control的值为no-cache,表示客户端不会接受缓存过的响应。如果服务器返回的响应中Cache-Control的值为no-cache,表示缓存服务器不会对资源进行缓存。
    2. no-store:规定缓存不能在本地存储请求和响应的任一部分
    3. max-age:使用这个指令一般会指定一个数值,比如说0或者其他的秒数。一般指定为0,表示客户端的请求一定会到达源服务器,不会只到达缓存服务器。
  2. Connection:用于控制不再转发给代理的首部字段和管理持久连接
1. 控制不再转发给代理的首部字段
Connection:首部字段名称
2. 管理持久连接
Connection:keep-alive
  1. Date:表示创建HTTP报文的日期和时间
  2. Pragma:HTTP/1.1之前版本遗留的字段,这个首部字段为了向后兼容定义的。常用的取值为no-cache表示客户端会要求所有的中间服务器不返回缓存的资源。
4.HTTP请求报文中使用的首部字段
  1. Accept:通知服务器,用户代理能够处理的媒体类型和媒体类型的相对优先级(指定多种媒体类型)。可选的媒体类型如下:
    1. 文本文件:text/html,application/xhtml+xml,application/xml
    2. 图片文件:image/jpeg,image/gif,image/png
    3. 视频文件:video/mpeg
    4. 应用程序使用的二进制文件:application/zip
    5. 给媒体类型增加优先级,使用q=具体的数值,权重值的范围为0~1。不指定权重值,默认权重值为1.0
    // 示例
    text/html,application/xhtml+xml,application/xml;
    q=0.9,image/webp,image/apng,*/*;
    q=0.8,application/signed-exchange;v=b3;q=0.9
    
  2. Accept-Charset:通知服务器用户代理支持的字符集和字符集的相对优先级顺序
  3. Accept-Encoding:告知服务器用户代理支持的内容编码及内容编码的优先级顺序。常用的内容编码如下:
    1. gzip:由文件压缩程序gzip生成的编码格式
    2. compress:由UNIX文件压缩程序compress生成的编码格式
    3. deflate:使用zlib格式及由deflate压缩算法生成的编码格式
    4. identity:不执行压缩或者不会变化的默认编码格式
    5. Accept-Language:告知服务器用户代理能够处理的自然语言集和自然语言集的相对优先级
  4. Authorization:告知服务器用户代理的认证信息
  5. Host:告知服务器请求的资源所处的互联网主机名和端口号
  6. If-None-Match/If-Match:字段的值会和请求资源的ETag值进行比较以决定服务器是否处理请求
  7. refer:告知服务器请求的原始资源的URI
  8. User-Agent:将创建请求的浏览器和用户代理名称等信息传达给服务器。
5.响应首部字段
  1. ETag:将资源以字符串形式做唯一标识的方式,服务器会给每一份资源分配对应的ETag值。当资源更新时,ETag值也会更新。
  2. Server:告知客户端当前服务器上安装的HTTP服务器应用程序的信息
6.实体首部字段
  1. Allow:用于通知客户端能够支持请求指定资源的所有HTTP方法。
  2. Content-Type:说明实体主体内对象的媒体类型。其值常见的如下:
    1. application/x-www-form-urlencoded:这是常见的POST提交数据的方式
    2. multipart/form-data:POST提交数据的方式
    3. application/json:媒体类型为JSON字符串
7.为Cookie服务的首部字段
  1. 响应首部字段Set-Cookie:开启状态管理使用的Cookie信息。Set-Cookie字段的属性如下:
    1. expire属性:指定浏览器可发送Cookie的有效期
  2. 请求首部字段Cookie:服务器接收到的Cookie信息。
8.其他首部字段
  1. X-XSS-Protection:属于HTTP响应首部,针对跨站脚本攻击(XSS)的一种对策。其可选的取值如下
    1. 0:将XSS过滤设置成无效状态
    2. 1:将XSS过滤设置成有效状态
  2. DNT(Do Not Track):属于HTTP请求首部,拒绝被精准广告追踪的一种方法。其可选值如下:
    1. 0:同意被追踪
    2. 1:拒绝被追踪

chapter7.HTTPS

1.HTTP的缺点
  1. 通信使用不加密的明文,内容可能会被窃听
  2. 不验证通信方的身份(不管是谁发送过来的请求都会返回响应),因此可能遭遇伪装。
  3. 无法证明报文的完整性,所以在请求或者响应在传输途中,有可能已经遭攻击者拦截并篡改内容,这也叫做中间人攻击。
2.加密技术
  1. 加密技术中加密对象如下:
    1. 将通信线路加密,HTTP协议中没有加密机制,可以通过SSL(Secure Socket Layer,安全套接层)或者TLS(Transport Layer Security,安全层传输协议)的组合使用,建立安全的通信线路,加密HTTP的通信内容。与SSL组合使用的HTTP叫做HTTPS
    2. 将参与通信的内容进行加密,比如说对报文中的报文主体(响应体或者请求体)进行加密,
  2. SSL:不仅提供加密处理,而且使用了证书的手段。证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。SSL协议是独立于HTTP的协议,其他应用在应用层的Telnet等协议也可以配置SSL使用。
    1. SSL采用一种叫做公开密匙加密的加密处理方式,加密算法公开,密钥是保密的,加密和解密都需要密钥。在HTTPS中采用以下两种方式并用的混合加密机制。在交换密钥(共享密钥加密方式中加密和解密使用的同一把密钥)环节使用公开密钥加密机制,之后的建立通信交换报文阶段则使用共享密钥加密方式。
      1. 加密和解密使用同一个密钥的方式称为共享密钥加密,也叫做对称密钥加密。
      2. 使用两把密钥的公开密钥加密:公开密钥加密使用一对非对称的密钥。一把叫做私有密钥(private key),另一把叫做公开密钥(public key)。公开密钥用来加密,私有密钥用来解密
      问题:如何证明公开密钥的正确性?
      可以使用由数字认证机构和其相关机构颁发的公开密钥证书
      
3.HTTPS
  1. HTTPS是身披SSL外壳的HTTP,它是在HTTP上加上加密处理和认证以及完整性保护这些机制。
    1. HTTP协议通信过程使用的是未经加密的明文,所以需要加密处理。
    2. 在使用HTTP协议通信过程中,无法确认通信方是否为预想的通信方,所以需要认证技术。
    3. 在使用HTTP协议通信过程中,请求报文或者响应报文在通信途中可能被篡改,所以需要完整性保护机制
  2. 使用HTTPS相对于HTTP来说有利有弊。
    1. 比HTTP会更消耗服务器和客户端的硬件资源,比如说CPU、内存等。因为需要加密解密的处理
    2. 使用HTTPS还需要向认证机构购买证书

chapter11:web攻击技术

  1. 针对web的攻击技术分为三类:
    1. 应用HTTP协议的客户端
    2. 应用HTTP协议的服务器端
    3. 运行在服务器上的web应用等资源