• HTTP图解


       在写接口测试的代码时,发现HTTP协议不是很理解,所以找了本书,简单的了解一下。

     1、Web及网络基础

    1.1、TCP/IP协议族

     

    IP网际协议:负责传输的IP协议。它的作用是把各种数据包传送给对方。

    ARP协议:地址解析协议,根据对应的IP地址就可以反查出对应的MAC地址。

    TCP协议:确保可靠性,位于传输层,提供可靠的字节流服务。(三次握手协议)

    DNS服务:提供域名到IP地址之间的解析服务。

      

    1.2、TCP/IP的分层管理

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

    应用层:决定了向用户提供应用服务时通信的活动。比如FTP、DNS、HTTP。

    传输层:提供处于网络连接中的两台计算机之间的数据传输。比如TCP、UDP。

    网络层:处理在网络上流动的数据包。比如IP。

    数据链路层:用来处理链接网络的硬件部分。

    1.3、TCP/IP通信传输流

     

    1.4、URI和URL

    URI:统一资源标识符

    URL:统一资源定位符。Uniform Resource Locator

    URI格式如下;

     

     HTTP协议使用URI让客户端定位到资源:

     

    2、简单的HTTP协议

       HTTP请求和响应的过程:客户端发出请求,经过网络、中间层等处理,最终从服务器端获取到数据,然后在返回到客户端,客户端接收到之后进行处理、渲染并展现给用户。

    2.1、通信过程

    HTTP协议:用于客户端和服务器端之间的通信,通过请求和响应的交换达成通信。

    客户端:请求访问文本或图像等资源的一端。

    服务器端:提供资源响应的一端。

    2.2、HTTP是不保存状态的协议

    HTTP是不保存状态,即无状态协议。

     

    通过cookie技术实现保持状态功能。cookie会根据从服务器端发送的响应报文内的一个叫set-cookie的首部字段信息,通知客户端保持Cookie.当下次客户端再往服务器发送请求时,客户端会自动请求报文中加入cookie值发送出去。服务器端发现客户端发送过来的cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

    2.3、HTTP方法

     

    2.4、持久连接节省通信量

     

     

    HTTP持久连接旨在建立一次TCP连接后进行多次请求和响应的交互,管道化技术通过并行操作。

    3、HTTP报文内的HTTP信息

    HTTP报文:用于HTTP协议交互的信息。请求端(客户端)的HTTP报文叫做请求报文,响应端(服务器端)的叫做响应报文。

    请求报文组成形式:请求方法、请求RUI、协议版本、可选的请求首部字段、内容实体,如图。

     

    响应报文组成形式:协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。如图

     

    请求报文及响应报文的结构:

    请求行:包含用于请求的方法,请求URI和HTTP版本。

    状态行:包含表明响应结果的状态码,原因短语和HTTP版本

    首部字段:包含表示请求和响应的各种条件和属性的各类首部。一般首部有4种:通用首部、请求首部、响应首部、实体首部。

    其他:包含HTTP的RFC里未定义的首部(Cookie等),具体实例如下;

     

    通用首部字段

     

    请求首部字段

     

    响应首部字段

     

    实体首部字段

     

    4、返回结果的HTTP状态码

    状态码告知从服务器端返回的请求结果。

     

     

    5、与HTTP协作的Web服务器

    通信数据转发程序:代理、网关、隧道

    网关:转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。

    利用网关可以由HTTP请求转化为其他协议通信,如图。

     

     

    代理:一种有转发功能的应用程序,扮演了位于服务器和客户端中间人的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。

     

    使用代理服务器的理由:利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的。主要分两种基准分类,一种是是否使用缓存(缓存代理),一种是是否会修改报文(透明代理)。

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

     

    缓存:代理服务器或客户端本地磁盘内保存的资源副本。

     

    6、确保Web安全的HTTPS

    HTTP的缺点

    HTTP+加密+认证+完整性=HTTPS

     

    HTTPS:HTTPS是身披SSL外壳的HTTP。

    SSL:Secure Socket Layer,安全套接层。

    TLS:Transport Layer Security。

     

    7、HTTP认证方式

    主要介绍几种认证方式:BASIC认证、DIGEST认证、SSL客户端认证、基于表单认证。

     BASIC认证

     

    DIGEST认证

     

    SSL客户端认证

    SSL客户端认证是借由HTTPS的客户端证书完成认证的方式。凭借客户端证书认证,服务器可确认访问是否来自已登录的客户端。

     

      

    基于表单认证

    基于表单的认证方法并不是在HTTP协议中定义的。客户端会向服务器上的Web应用程序发送登录信息(Credential),按登录信息的验证结果认证。

     

    Cookie的工作机制是用户识别及状态管理。

     

    Cookie服务的首部字段如下

     

    Set-Cookie字段的属性

     

    Cookie字段的属性

     

     

     

    8、使用浏览器全双工通信的WebSocket

    WebSocket,即Web浏览器与Web服务器之间全双工通信标准。

    WebSocket特点:

    推送功能:支持由服务器向客户端推送数据的推送功能,服务器可直接发送数据,这样不必等待客户端的请求。

    减少通信量:首部信息小,同时和HTTP相比,每次链接时的总开销减少。

     

    9、Web的攻击技术

    HTTP协议本身并不存在安全性问题,因此协议本身不会成为攻击对象。应用HTTP协议的服务器和客户端,以及运行在服务器上的Web应用等资源才是攻击目标。

     

    9.1、在客户端即可篡改请求

    在web应用中,从浏览器那接收到的HTTP请求的全部内容,都可以在客户端自由地变更、篡改。在HTTP请求报文内加载攻击代码,就能发起对web应用的攻击。

     

    9.2、web应用的攻击模式

    主要有2种模式:主动攻击和被动攻击。

    以服务器为目标的主动攻击:主动攻击是指攻击者通过直接访问web应用把攻击代码传入的攻击模式。

    主动攻击有SQL注入攻击和OS命令注入攻击。

     

    以服务器为目标的被动攻击:被动攻击是指利用圈套策略执行攻击代码的攻击模式。

    在被动攻击过程中,攻击者不直接对目标web应用访问发起攻击。

    被动攻击模式中主要有跨站脚本攻击和跨站点请求伪造。

     

    9.2、因输入值转义不完全引发的安全漏洞

    实施web应用的安全对策可大致分为以下两部分,客户端的验证和web应用端(服务器端)的验证【输入值验证、输出值转义】。

     

    9.2.1跨站脚本攻击

    跨站脚本攻击(Cross-Site Scripting,XSS),是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。

     

    9.2.2 SQL注入攻击

     针对web应用使用的数据库,通过运行非法SQL而产生的攻击。

    SQL注入攻击影响:非法查看或篡改数据库内的数据、规避认证、执行和数据库服务器业务关联的程序等。

    SQL注入:攻击者将SQL语句改变成开发者意想不到的形式以达到破坏结构的攻击。

    9.2.3 HTTP首部注入攻击

    HTTP首部注入攻击是通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击,属于被动攻击。

    HTTP首部注入攻击影响:设置任何Cookie信息、重定向至任意URL、显示任意的主体(HTTP响应截断攻击)

    涉及到的安装工具:

    wireshark:     https://www.wireshark.org/download/win64/

     

  • 相关阅读:
    c/c++面试45-50之字符串
    c/c++面试39-44之内存动态分配
    使用spring配合Junit进行单元测试的总结
    使用springBoot进行快速开发
    配置项目使用weblogic的JNDI数据源
    转载-解决使用httpClient 4.3.x登陆 https时的证书报错问题
    SpringData JPA查询分页demo
    Lucene中的域选项
    代码片段,lucene基本操作(基于lucene4.10.2)
    配置maven使用nexus
  • 原文地址:https://www.cnblogs.com/wendyw/p/10149877.html
Copyright © 2020-2023  润新知