http请求响应报文及session&cookie&token详解

      最后更新:2022-07-31 01:23:50 手机定位技术交流文章

      笔记来水一篇

      HTTP的报文分析

      HTTP协议(Hyper Text Transfer Protocol,超文本传输协议),是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的应用层传送协议,其报告分为请求报告和答复报告。

      HTTP基于TCP/IP通信协议传输数据。

      特点

      (1)HTTP不连接:不连接意味着每个连接只处理一个请求。服务器处理客户端的请求,在收到客户的答复后,即断开连接。这种方法可以节省传输时间.还是无状态的。服务器不知道该客户端是谁,其优点是:http设计简单,缺点也是显而易见的:每次您关闭浏览器,您必须重新登录。这就是为什么我们有饼干的原因。

      (2)HTTP是媒体独立的:只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。

      当客户端请求网页时,请求的内容最初通过 http 协议被编入 http 中请求报文其中,服务器接收请求的消息,根据协议规范分析消息,然后将消息返回到客户端响应报文

      请求报文

      http 报告 的 结构 :

      –起始行(请求行)
      对报文进行描述
      –头部(请求头)
      包含多个属性,格式为“属性名称:属性值”,服务端会相应地接收客户端的信息。 确定客户端和服务器可以做什么,以及与缓存信息有关的规则被包含在标题中。
      Content-Length(主体长度),Content-Type(主体类型)等。
      –主体(请求体)
      包含数据的主体部分

      分布图如下:

      image-20220730235211055

      请求行

      在请求声明中,初始行由三个部分组成:

      ①是 请求方法 ,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。

      2是请求的URL地址,它与消息标题的 Host 属性一起构成了完整的请求URL。

      3是协议名称和版本号。

      请求方法
      这个例子中的请求方法是 POST,而http中的请求方法更常见是GET、 POST和HEAD,其中一个包含了八种常见的请求方法。

      1.OPTIONS
      返回由特定资源支持的HTTP请求方法到服务器上,也可以通过发送'*'请求到Web服务器来测试服务器的功能
      2.HEAD
      向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
      3.GET
      向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
      4.POST
      向指定资源提交数据处理请求(例如提交表格或上传文件)。数据包含在请求机构中。POST请求可能导致创建一个新的资源和/或修改现有资源。Loadrunner中的相应的 POST请求函数: web_submit_data,web_submit_form
      5.PUT
      将最新的内容上传到指定的资源位置
      6.DELETE
      请求服务器删除由请求-URL标识的资源
      7.TRACR
      由反向显示服务器接收的请求,主要用于测试或诊断
      8.CONNECT
      HTTP/1.协议保留了能将连接转换为管道模式的代理服务器。

      GET&&POST

      GET和 POST之间的区别

      GET方法的数据参数在启动行的URL中显示, POST方法的数据参数则在消息体中显示。
      GET方法是因为数据参数放在URL中,所以它的数据参数的大小是有限的,POST对数据的大小没有限制;GET的传输效率更高,但相对而言,没有 POST 安全。GET请求只能由url编码,POST支持多个编码方法。GET只接受ASCII字符参数数据类型,POST没有限制。

      GET, POST是所有数据转移到服务器。

      GET生成一个TCP包; POST生成两个TCP包。

      对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

      而对于POST,浏览器首先发送标题,服务器响应100继续,浏览器再次发送数据,服务器响应200 ok(返回数据),有两个包的TCP验证了该包的完整性,有非常大的优点,但并非所有浏览器都发送两个包在 POST 中,Firefox只发送一次。

      GET/POST连接创建过程

      Post 和 get 也基于 TCP / IP, 这两个方法通过三个握手建立连接.

      GET
      1.浏览者请求tcp连接(第一次握手)
      2.服务器同意TCP连接(第二次握手)
      3.浏览者确认并发送获取请求标题和数据(三个手,此消息较小,因此http将在此时发送第一个数据)
      --服务器返回200个好的响应

      POST
      1.浏览者请求tcp连接(第一次握手)

      2.服务器同意TCP连接(第二次握手)

      3.浏览者确认并发送邮件请求头条(三手,此消息较小,因此http将在此时发送第一个数据)

      -----服务器返回100 Continue响应

      4.浏览器发送数据

      ---服务器返回200个好的响应

      请求头

      4是HTTP消息头部,包含多个属性,格式为“属性名称:属性值”,服务端接收客户端的信息。

      与缓存有关的规则信息被包含在标题中

      以下列表仅列出请求消息头部信息的一部分:

      Referer(参考页、引用页):提供了当前抓包请求页面的URL
      Accept:告诉服务器能够发送哪些媒体类型,Accept属性的值可以为一个或多个MIME类型的值(描述消息内容类型的因特网标准, 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据)

      接受字符集:告诉服务器可以发送哪些字符集
      Accept-Encoding:告诉服务器能够发送哪些编码方式

      Accept-Language:告诉服务器能够发送哪些语言

      Cookie:客户端将使用Cookie的数据值发送到服务器上
      Cookie 2:用于指示请求终止支持的 cookie 版本。

      User-Agent:将发起请求的应用程序的名称告知服务器;User-Agent会告诉网站服务器,访问者是通过什么工具来请求的,如果是爬虫请求,一般会拒绝,如果是用户浏览器,就会应答;

      用户代理标准格式:

      origin:请求首部字段 Origin 指示了请求来自于哪个站点。这个字段仅表示服务器名称,它不包含任何路径信息。该标题用于CORS请求或 POST请求。除了不包含路径信息之外,这个字段与参考器的第一个字段类似。

      1.只有一个跨域请求,或同时发送的邮件请求,将载有原始请求头,并且 areferer将载有它无论如何,只要浏览器能够访问请求源,除非在上面提到的少数情况下。

      2、如果浏览器不能获取请求源,那么origin满足上面情况也会携带,不过其值为null

      客户端-IP:提供运行客户端的机器的IP地址
      From:提供了客户端用户的E-mail地址
      主机:提供接收请求的服务器的主机名称和端口号

      Cache-Control:对缓存进行控制,如一个请求希望响应返回的内容在客户端要被缓存一年,或不希望被缓存就可以通过这个报文头达到目的

      TE: 告诉服务器你可以使用这些扩展传输代码
      期望:允许客户端列出由请求请求的服务器行为
      范围:资源请求的指定范围,如果服务器支持范围请求

      UA-颜色:提供与客户端显示的显示颜色有关的信息
      UA-CPU:提供客户端CPU的类型或制造商
      UA-OS:提供客户端机器运行的操作系统名称和版本

      cookie&session&token

      Cookies 和 សម័យ 是 一种 跟踪 。**客户**服务器结束通信的一种方式。

      cookie通过记录在客户端上的信息来确定用户的身份,而セッション通过记录在服务器上的信息来确定用户的身份。

      背景:http链接是无状态的链接,每次客户访问服务端时,服务员不知道客人是谁,这使得http的设计简单,但是每次浏览器关闭,用户必须重新登录。为了实现记录用户访问,当用户第一次访问服务器时,在服务器上生成记录,并将其返回到客户端,客户下次再访问时,将最后的记录转移到服务器上,这就是我们跟踪谈话的方式。

      cookie:当客户端请求服务器时,如果服务器需要记录用户的状态,则将生成一个cookie来将它返回到客户端,客户端浏览器存储Cookie,当浏览器再次请求网站时,浏览器将请求的URL和请求标题中的cookie提交给服务器,以显示其自己的用户身份和状态。包含在浏览器中存储的部分文本的cookie存在(但没有存储在服务器上,因此不安全),

      cookie的主要属性包括: 名称 、 值 、 时限 、 路径和域:
      路径和域:构成cookie的功能范围。
      延迟时间: 聊天cookie,如果延迟时间没有设定,指示浏览器聊天期间使用该cookie的寿命,关闭浏览器窗口,饼干消失了。会话cookie通常存储在内存中。对于持久的cookie,设置了过期时间,浏览器将Cookie存储在硬盘上,在硬盘上存储的Cookie在不同的浏览器进程中共享。
      名字:是给饼干一个名字。
      值: 记录在cookie中的信息内容.

      会议:避免在浏览器中可能伪造Cookie,因此在服务器端生成和存储值, 当用户第一次访问服务器时,会议在服务器上生成和保存记录,此记录然后通过cookie返回到浏览器中,下次浏览器访问时,它将带来Cookie,服务器再次验证了通过会议传递的cookie的正确性。当用户第一次访问服务器时,会自动创建会话。会议生成后,只要用户继续访问,服务器将更新会议的最后访问时间,超时未更新会失效。

      sessionid:HTTP协议无状态,会话不能确定它是基于HTTP连接的同一客户端,服务器将一个名为SESSIONID的cookie发送给客户端浏览器,它的值是会议的ID。 Session 标识 cookie 是否 由 同一 用户使用 。用户第一次访问产生记录,sessionId保存在session中。

      总结上述过程:

      1. 使用帐户密码的用户登录
      2. 服务器验证了帐户密码正确,正确生成了会话ID,并以cookie形式返回服务台
      3. 浏览器存储Cookie并自动将它们上传到下一次访问
      4. 服务器匹配在会议期间由前台发送的Cookie。否则,您不需要再次登录,否则提示不会登录

      上面的过程中,有一个弊端就是每一个用户连接都会在服务器端中产生一个sessionId,当有很多用户时,它会造成很多服务器压力,此外,当有多个服务器时,应该考虑这些服务器之间共享sessionid;解决这些问题

      有:符号

      当用户第一次登录时,服务器生成一个トークン并返回该トークン给客户端,然后客户端可以简单地带这个トークン来请求数据,而不需要带用户名和密码。

      托克在会议中没有保存,当服务结束时生成一个トークン时,添加少量用户信息,比如用户的id,我们使用算法加密数据,以生成给客户传递的符号(加密键只知道自己)的签名,下次客户来访时,他会带来一个支票,服务器端通过关键分析符号生成签名,比较两个签名,看看它们是否相同,若不相同则验证失败

      简单token的组成;uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串。为防止token泄露)。

      image-20220730235253344

      基于トークン的认证

      使用token机制的身份验证方法,在服务器端不需要存储用户的登录记录。大概的流程:

      “1.客户端使用用户名和密码请求来登录。
      “2. 服务器 收到 要求 核查 用户 名 和 密码 。
      3.验证成功后,服务器生成一个トークン,然后将这个トークン发送给客户端。
      4. 客户端收到token后把它存储起来,可以放在cookie或者Local Storage(本地存储)里。
      5.每次客户向服务端口发送请求时,它需要带有服务端口发送的符号。
      6. 服务端收到请求,然后去验证客户端请求里面带着token,如果验证成功,就向客户端返回请求的数据。

      使用设备的mac地址作为标记:客户端和服务端会统一一个唯一的标识符,确保每个设备都有一个唯一的标识符。 缺点是服务器端需要保存mac地址,优点是客户端不需要再登录,只要它一次登录,就可以使用

      b.用sessionid作为token: 此方式的优点是方便,不用存储数据,缺点就是当session过期时,客户端必须重新登录才能请求数据。

      应答报文

      应答报文结构

      响应消息也由三个部分组成(响应线+响应头+响应体)

      image-20220730235331216

      响应行:

      ①报文协议及版本;
      2国家代码和国家说明;

      响应头:

      3响应标题,也由多个属性组成;

      响应体:

      答复信息,即我们真正需要的货物

      响应行

      响应消息的响应线也包含三个部分

      协议类型及版本号
      状态码
      状态码的文字描述

      状态码
      在 http 协议中,州代码分为五个主要类

      100~199(资讯状态编码)
      200~299(成功状态代码)
      300~399(转向状态代码)
      400~499(客户错误状态代码)
      500~599(服务器端错误状态代码)

      响应头

      总部 对 该 报告 提供 的 其他 资料 :

      年龄:(从创造开始)响应时间
      公共:服务器为其资源支持的请求方法列表
      Retry-After: 如果资源不可用,请在这个日期或时间重新尝试
      服务器:服务器应用程序软件的名称和版本
      对于HTML文档,这是在HTML文档的源头给出的标题
      警告:比推理语句更详细的警告消息
      Accept-Ranges:服务器可以接受此资源的范围类型
      变换:服务器根据这些第一个部分的内容选择最适合的资源版本发送给客户端
      Proxy-Authenticate:代理向客户端查询列表

      LEANOTE_SESSION:
      Set-Cookie:设置客户端的数据,以便服务器识别客户端
      Set-Cookie 2:类似 Set-Cookie
      WW-Authenticate:从服务器到客户端的查询列表

      在这里插入图片描述

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/30976.html

          热门文章

          文章分类