美文网首页
http学习笔记

http学习笔记

作者: lzb30 | 来源:发表于2019-06-08 13:22 被阅读0次

    一、TCP

    1.1 TCP/IP 的分层管理

    TCP/IP 协议族按层次分别分为以下 4 层:应用层、传输层、网络层和数据链路层。

    应用层

    应用层决定了向用户提供应用服务时通讯的活动。有FTP,DNS服务和HTTP协议。

    传输层

    传输层对上层应用层,提供网络连接中的两台计算机之间的数据传输。
    有两个协议,TCP(传输控制协议)和UDP(用户数据报协议)

    网络层

    网络层用来处理在网络上流通的数据包。该层规定了通过怎样的路径到达对方计算机,并把数据包给对方。

    数据链路层

    用来处理连接网络的硬件部分。


    TCP/IP通讯传输流

    1.2 TCP三次握手


    不同协议的通讯过程

    二、HTTP报文

    用于 HTTP 协议交互的信息被称为 HTTP 报文。请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应报文。
    HTTP 报文大致可分为报文首部和报文主体两块。两者由最初出现的空行(CR+LF)来划分。

    2.1 报文结构

    • 请求行
      包含用于请求的方法,请求 URI 和 HTTP 版本。
    • 状态行
      包含响应结果的状态码,原因短语和HTTP版本。
    • 首部字段
      包含表示请求和响应的各种条件和属性的各类首部。
      一般有 4 种首部,分别是:通用首部、请求首部、响应首部和实体首部。
    • 其他
      可能包含 HTTP 的 RFC 里未定义的首部(Cookie 等)。

    2.2 HTTP状态码

    • 2XX 成功
      200 OK
      204 No Content 返回的响应报文中不含实体的主体部分。
      206 Partial Content 该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求。
    • 3XX 重定向
      301 Moved Permanently 永久性重定向
      302 Found 临时性重定向
      303 See Other 303 状态码明确表示客户端应当采用 GET 方法获取资源,这点与 302 状态码有区别。
      304 Not Modified 服务器端资源未改变,可直接使用客户端未过期的缓存
    • 4XX 客户端错误
      4XX 的响应结果表明客户端是发生错误的原因所在。
      400 Bad Request 该状态码表示请求报文中存在语法错误
      401 Unauthorized 该状态码表示发送的请求需要有通过 HTTP 认证
      403 Forbidden 未获得文件系统的访问授权
      404 Not Found 该状态码表明服务器上无法找到请求的资源
    • 5XX 服务器错误
      500 Internal Server Error 表明服务器端在执行请求时发生了错误
      503 Service Unavailable 表明服务器暂时处于超负载或正在进行停机维护

    三、HTTP首部

    3.1 4 种 HTTP 首部字段类型

    • 通用首部字段(General Header Fields)
      请求报文和响应报文两方都会使用的首部。
    • 请求首部字段(Request Header Fields)
      从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
    • 响应首部字段(Response Header Fields)
      从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。
    • 实体首部字段(Entity Header Fields)
      针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。

    3.2 HTTP/1.1 首部字段一览

    • 通用首部字段
      Cache-Control 控制缓存的行为
      Connection 逐跳首部、连接的管理
      Upgrade 升级为其他协议
    • 请求首部字段
      Accept 用户代理可处理的媒体类型
      Accept-Charset 优先的字符集
      Accept-Encoding 优先的内容编码
      Accept-Language 优先的语言(自然语言)
      If-Match 比较实体标记(ETag)
      If-None-Match 比较实体标记(与 If-Match 相反)
      If-Modified-Since 比较资源的更新时间
      If-Unmodified-Since 比较资源的更新时间(与 If-Modified-Since 相反)
      User-Agent HTTP 客户端程序的信息
    • 响应首部字段
      ETag 资源的匹配信息
      Location 令客户端重定向至指定 URI
    • 实体首部字段
      Content-Type 实体主体的媒体类型
      Expires 实体主体过期的日期时间
      Last-Modified 资源的最后修改日期时间

    3.3 通用首部字段

    3.3.1 cache-control 缓存控制

    no-cache 无 强制向源服务器再次验证
    no-store 无 不缓存请求或响应的任何内容

    3.3.2 Connection

    • 控制代理不再转发的首部字段
    • 管理持久连接
    • 控制代理不再转发的首部字段

    3.3.3 Upgrade

    指定一个完全不同的通信协议。

    3.4 请求首部字段

    3.4.1 Accept

    Accept 首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。

    • 文本文件
      text/html, text/plain, text/css ...
      application/xhtml+xml, application/xml ...
    • 图片文件
      image/jpeg, image/gif, image/png ...
    • 视频文件
      video/mpeg, video/quicktime .

    3.4.2 If-Match

    形如 If-xxx 这种样式的请求首部字段,都可称为条件请求。服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行请求。
    If-Match 与 ETag 一致,服务器才接受请求。If-None-Match 则相反

    3.4.3 If-Modified-Since

    如果在 If-Modified-Since 字段指定的日期时间后,资源发生了更新,服务器会接受请求
    If-Unmodified-Since 则相反

    3.4.4 User-Agent

    首部字段 User-Agent 会将创建请求的浏览器和用户代理名称等信息传达给服务器。

    3.5 响应首部字段

    3.5.1 ETag

    首部字段 ETag 能告知客户端实体标识。它是一种可将资源以字符串形式做唯一性标识的方式。服务器会为每份资源分配对应的 ETag 值。

    3.5.2 Location

    使用首部字段 Location 可以将响应接收方引导至某个与请求 URI 位置不同的资源。
    该字段会配合 3xx :Redirection 的响应,提供重定向的 URI。

    3.5.2 Server

    首部字段 Server 告知客户端当前服务器上安装的 HTTP 服务器应用程序的信息。

    3.6 实体首部字段

    3.6.1 Content-Type

    首部字段 Content-Type 说明了实体主体内对象的媒体类型。

    3.6.2 Expires

    首部字段 Expires 会将资源失效的日期告知客户端。

    3.6.3 Last-Modified

    首部字段 Last-Modified 指明资源最终修改的时间。

    3.6.4 Set-Cookie

    当服务器准备开始管理客户端的状态时,会事先告知各种信息。

    3.6.5 Cookie

    首部字段 Cookie 会告知服务器,当客户端想获得 HTTP 状态管理支持时,就会在请求中包含从服务器接收到的 Cookie。

    3.6.6 X-XSS-Protection

    首部字段 X-XSS-Protection 属于 HTTP 响应首部,它是针对跨站脚本攻击(XSS)的一种对策,用于控制浏览器 XSS 防护机制的开关。

    四、HTTP VS HTTPS

    4.1、HTTP的缺点

    • 通信使用明文(不加密),内容可能会被窃听
    • 不验证通信方的身份,因此有可能遭遇伪装
    • 无法证明报文的完整性,所以有可能已遭篡改

    4.2 HTTPS的缺点

    • HTTPS 比 HTTP 要慢 2 到 100 倍;
    • 需要购买证书

    五、web的攻击技术

    5.1 跨站脚本攻击

    • 特点:
      能注入恶意的HTML/JavaScript代码到用户浏览的网页上,从而达到Cookie资料窃取、会话劫持、钓鱼欺骗等攻击。
    • 原因:
      a:Web浏览器本身的设计不安全。浏览器能解析和执行JS等代码,但是不会判断该数据和程序代码是否恶意。
      b:输入和输出是Web应用程序最基本的交互,而且网站的交互功能越来越丰富。如果在这过程中没有做好安全防护,很容易会出现XSS漏洞。
    • 防御XSS攻击
      HttpOnly 浏览器禁止页面的JS访问带有HttpOnly属性的Cookie。
      输入检查 XSS Filter 对输入内容做格式检查,类似“白名单”,可以让一些基于特殊字符的攻击失效。
      输出检查 在变量输出到html页面时,可以使用编码或转义的方式来防御XSS攻击
      XSS的本质是“HTML注入”

    5.2 CSRF攻击跨站请求伪造

    本质:重要操作的所有参数都是可以被攻击者猜测到的。攻击者预测出URL的所有参数与参数值,才能成功地构造一个伪造的请求。

    • 防御
      验证 HTTP Referer 字段
      在请求地址中添加 token 并验证

    相关文章

      网友评论

          本文标题:http学习笔记

          本文链接:https://www.haomeiwen.com/subject/qqcixctx.html