认识HTTP请求

2023-11-15

要分析HTTP请求和响应必然少不了抓包工具,关于抓包工具的设置和下载推荐看抓包工具Fiddler的下载与设置

通过抓包得到的一个HTTP请求

HTTP请求的格式

结构分析

        一.请求行

        

        1.post是方法,可以表示一条HTTP请求要进行的操作是什么,post通常表示该HTTP请求要向服务器发送一些数据

        我们常见的方法如下:

        其中get方法(HTTP请求的目的是向服务器获取资源)是HTTP请求中使用最多的,而post其次,其他的方法都很少使用

        get和post方法之间的区别

        两者最主要的区别就是:

        get将一些要发送给服务器的数据放到URL的选择字符串(query string)中,而post将要发送给服务器的数据放到请求正文(body)中。

        数据都是要传给服务器的,所有放在哪里没有实质上的区别,只是放到URL中用户能够看到(输入网址的时候能够看到),放到请求正文(body)中用户看不到而已

        但上传数据和登录的时候还是用post居多,因为在登录时要向服务器发送用户名和密码,要是直接放到URL的选择字符串(query string)中,用户能看到,会给用户一种不太安全的错觉(实际上是安全的,因为是密文传输,当要传输的数据较多时,要是直接放到URL中会显得URL特别的长,这样不好

        但其实这些都没有什么大不了的,数据放在哪里传输给服务器实际上都一样,因此可以认为 get和post方法没有本质上的区别,只是传输的数据放的位置不一样而已

        2.http://job.xjtu.edu.cn/companyLogin.do 是URL(统一资源定位符),这里明确描述出要访问的服务器是哪个,要访问的资源在服务器的哪个位置。

        关于URL推荐看认识 URL

        3.HTTP/1.1 表示HTTP请求的版本号

        二.请求报头(header)

                header的整体格式是键值对格式,每个键值对占一行,键和值之间采用冒号分隔,URL选择字符串中的键值对和请求正文(body)中的键值对完全是程序猿自定义的,而请求报头(header)中的键值对,主要是标准规定的(有哪些键,对应的取值有哪些都有规定),也可以有自定义的部分

请求报头(header)中键的种类很多,这里主要介绍几种常见的

        1.Host

        表示服务器主机的地址和端口

        2.Content-Length

        表示请求正文(body) 中的数据长度。如果没有请求正文(body),这个字段就可以没有,如果有请求正文(body),这个字段就必须有,要不然就是非法请求。

        为什么有请求正文(body)就必须要有Content-Length这个键呢?

        因为HTTP数据报是面向字节流的数据,所以存在粘包问题。关于粘包问题推荐看粘包问题(TCP面向字节流批量发送数据导致)

        当浏览器连续给服务器发送多条HTTP请求时,服务器如何区分从哪里到哪里是一条完整的HTTP请求呢?

        当没有请求正文(body)时,就可以用请求报头(header)后的空行作为这条HTTP请求的结束标记

        当有请求正文(body)时,就需要知道请求正文(body)的长度,推算出这条HTTP请求的结束位置

        这样才能避免发送粘包问题(无法区分从哪里到哪里是一条完整的HTTP数据报)

        3.Content-Type

        表示请求正文(body)的数据格式

常见的取值有:

        4.User-Agent

        表示当前客户端浏览器和操作系统的版本

        以前的时候这个属性比较有用,因为当时电脑没普及,导致电脑之间的性能差异较大,网站的一些功能在差的电脑上运行不起来,所以服务器需要知道客户端浏览器和操作系统的版本,对应发送客户端能够运行的HTTP数据

        5.Referer

        表示这个页面是从哪个页面跳转过来的(广告商可以通过这个属性知道用户是通过哪个广告平台跳转过来的,就可以付给广告平台对应的广告费)

        6.Cookie

        浏览器保存网站的临时数据会保存到Cookie中,Cookie中的数据保存在浏览器所处硬盘的空间

        Cookie的内容很多,可以通过下面的问答方式了解

        1.Cookie中的数据从哪里来?

        Cookie中的数据是服务器返回给浏览器的,浏览器在将数据保存到Cookie中

        2.Cookie保存在哪里?

        Cookie保存在浏览器所在电脑的硬盘上,每个域名都有自己的一组Cookie

        3.Cookie里的内容是啥?

        Cookie中的内容都是键值对结构的数据,这里的键值对都是程序员自定义的,其中往往会有一个键值对,作为用户的身份标识

        4.Cookie中的内容到哪里去?

        后续再访问这个网站中的各个页面,就会在HTTP请求中带上Cookie,服务器就进一步知道了客户端的详细情况

        Cookie往往会有一个很重要的键值对,是用来表示用户的身份信息的

        这是Cookie典型的使用场景

        首次访问网站,登陆成功以后,网站返回的HTTP数据报中就会包含用户的身份信息,浏览器就会将用户的身份信息保存到Cookie中,同时网站也会在服务器中创建出一个对应的Session(用户的档案)

        服务器的用户肯定不止一个,每个用户都有自己的Session(用户的档案),并且他们的SessionID各不相同,服务器就会使用类似于hash表的方式,以SessionID为key,Session为Value,将所有的数据组织起来

        后续访问网站的其他页面时,都会在请求的HTTP数据报的Cookie字段中,带上用户的SessionID(身份标识),服务器就可以根据SessionID找到对应的用户信息,返回用户所需要的HTTP数据报(此时服务器已经知道了客户的身份,就可以向客户发送需要的HTTP数据报,相当于登录网站后,去访问网站的其他页面,都不需要输入用户名和密码了,因为此时访问其他页面时发送的HTTP请求数据报的Cookie属性中包含了用户的信息)

        浏览器要保存数据为什么要保存到Cookie中?直接写入一个文件,放到硬盘中不行吗?

        这件事情是不行的

        因为要是浏览器可以直接保存数据到硬盘中的话,就相当于可以让网页轻易的访问到你的文件系统,网页要是向系统发送以下病毒的话,后果不堪设想

        所以,为了保证安全,浏览器会对网页的功能做出限制(禁止访问硬盘就是其中一个限制)

        为了保证安全,同时又能存储数据,浏览器就提供了Cookie功能

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

认识HTTP请求 的相关文章

  • 如何用 C 语言通过 HTTP 协议发送图像?

    我是一名正在做网络服务器练习的学生 我需要一些帮助 我的网络服务器在文本页面上运行良好 但是每当浏览器发送一个 GET img jpg HTTP 1 1请求 我不知道如何处理 我听说 HTTP 协议是基于文本的 那么如何在 HTTP 响应中
  • 在 Python 中将 GET 更改为 POST (Flask)

    我正在尝试创建一个简单的应用程序 其中在服务器上生成整数数组并将其发送到客户端 以下是 app py 中的一些示例 工作 代码 from flask import Flask render template request url for
  • 如何让 HttpClient 返回状态码和响应正文?

    我试图让 Apache HttpClient 触发 HTTP 请求 然后显示 HTTP 响应代码 200 404 500 等 以及 HTTP 响应正文 文本字符串 重要的是要注意我正在使用v4 2 2因为大多数 HttpClient 示例都
  • 无法在 git 上获取 Http 工作

    我在拇指驱动器上使用 gitbash 作为 git 我的防火墙阻止了我 并且想设置我的 git 以进行 http 访问 我使用 github 并且已经看到了有关如何执行此操作的各种信息 但我还不够了解 无法让它为我自己工作 我在 php i
  • 为我的应用程序需要与之通信的每一台主机使用一个 HttpClient 实例是否可以?

    我知道 当使用 Microsoft 依赖注入容器时 处理 HttpClient 实例的最佳实践是使用IHttpClientFactory接口 https github com aspnet Extensions blob master sr
  • 如何在GO中执行HEAD请求?

    我想使用 GO net http 获取页面的内容长度 我可以在终端中使用curl i X HEAD https golang org然后检查内容长度字段 use http Head https golang org pkg net http
  • 当响应有正文时,内容长度或传输编码是必需的吗

    如果响应有正文 可以有正文 即状态代码不是 204 或 304 则响应标头中是否应始终具有内容长度或传输编码 在规范中 它不是很清楚 在我的场景中 我的主体没有内容长度或传输编码标头 因此卷曲继续等待no chunk no close no
  • HTTP 响应可以省略 Reason-Prase 吗?

    正常的 HTTP 响应如下所示 HTTP 1 0 200 OK 可以省略什么吗RFC http www w3 org Protocols rfc2616 rfc2616 sec6 html称为原因短语 就像是 HTTP 1 0 200 RF
  • python中的编码检测库[重复]

    这个问题在这里已经有答案了 这在某种程度上与我的问题有关here https stackoverflow com questions 2305997 unicodedecodeerror problem with mechanize 我处理
  • 如何在 Rails 中重定向到 404?

    我想在 Rails 中 伪造 404 页面 在 PHP 中 我只发送一个带有错误代码的标头 如下所示 header HTTP 1 0 404 Not Found Rails 是如何做到这一点的 不要自己渲染 404 没有理由这样做 Rail
  • 使用哪个 HTTP 状态代码来拒绝由于乐观锁定失败而导致的 PUT

    假设我想实现某种乐观锁定并使用 ETag 来指示最新的资源状态 这意味着 客户将使用If Match标题时PUT等待更新 根据HTTP规范 http www w3 org Protocols rfc2616 rfc2616 sec14 ht
  • iPhone - 从网络服务器获取文件的上次修改日期

    我想检查网络服务器上文件的上次修改日期 任何帮助都会很棒 谢谢 NSURLRequest request NSURLRequest alloc initWithURL aURL NSHTTPURLResponse response NSUR
  • REST URL 结构建议

    我正在尝试为我正在开发的网站的愿望清单部分敲定一个宁静的网址结构 这是一个非常简单的模型 用户可以有许多愿望清单 每个愿望清单可以包含许多产品 目前我有明显的 CRUD URL 来操作愿望清单本身 GET account wishlists
  • 从express.js 中删除所有标头

    我正在创建一个页面 其中有一些数据可以由另一个设备解析 我曾经使用 php 执行此操作 但现在将其移至 Node js 我需要从页面中删除所有标题 这样我就只有我的输出 此输出是对 GET 请求的响应 此刻我有 HTTP 1 1 200 O
  • HTTP实时音频流服务器

    作为概念验证 我需要创建一个 HTTP 服务器 该服务器在 GET 请求时应启动连续的非编码 非压缩音频数据流 WAV PCM16 我们假设音频数据是 4096 个随机生成的单声道音频样本块 采样率为 44 1kHz 我应该在 HTTP 响
  • 使用传输编码分块的 HTTP 响应中的最大块大小是多少?

    The w3 org RFC2616 http www w3 org Protocols rfc2616 rfc2616 sec3 html sec3 6 1似乎没有定义块的最大大小 但是如果没有最大块大小 则没有空间用于块扩展 必须有一个
  • Jsoup http 日志记录

    有没有办法记录http请求和响应 我们假设以下请求 Connection Response res Jsoup connect LOGIN URL HERE data user USER pass PASS method Connectio
  • HTTP 重定向图像可以吗?

    返回图片资源时返回301 302 303代码可以吗 我过去曾这样做过 而且似乎有效 这是好的做法吗 它与大多数浏览器兼容吗 是的 您可以重定向图像 浏览器将遵循重定向 但出于性能原因 您通常希望将重定向保持在最低限度 因为每个重定向都需要单
  • 身份验证中的随机数使用

    在基于摘要的身份验证中 随机数由服务器生成 然而 在基于 OAuth 的身份验证中 随机数是由客户端生成的 我想知道是否有人知道差异的原因 随机数用于使请求唯一 在没有随机数的身份验证方案中 恶意客户端可以生成一次请求并重放多次 即使计算成
  • 从浏览器中删除cookie?

    有什么方法可以指示网络浏览器完全delete一个人的cookie是用PHP设置的吗 我不想expiry或者等待浏览器closed 对于删除 我的意思是实际上不再将其列在 cookie 列表中 尝试这样删除所有 cookie foreach

随机推荐

  • 支持二级汉字的 php 汉字助记码生成

    gbk2312 编码范围共94区 0 55区为一级汉字 是按照拼音顺序排列的 可以按照编码区间确定汉字的拼音 但是 56 区以后是按笔画顺序排列的 所以只能用对照表来确定拼音 鉴于目前我找不到现成的代码 固整理了一份 测试可用 PHP 汉字
  • 【操作系统】王道考研 p11 线程概念、多线程模型

    视频 知识总览 是什么 为什么 进程是程序的一次执行 但有些功能不是由一个程序顺序处理就能实现的 有的进程可能需要 同时 做很多事情 而传统的进程只能串行地执行一系列程序 因此 引入 线程 来增加并发度 引入线程后 线程成为了程序执行流的最
  • esp8266连接mqtt时client.publish出现的小问题

    client publish发送变化数据的问题 温湿度为例 先是获取数据 加入我们获取的湿度为humidity 温度为temp 下一步就是我们的发送环节啦 client publish 主题 内容 我们字节将内容替换是会报错的 我们需要对数
  • qemu-guest-agent windows下的监控开发

    windows下的qemu guest agent 简称qga 的名字叫做qemu guest agent win32 目前最新版的版本号是qemu guest agent win32 0 12 1 2 2 355 el6 4 9 x86
  • 【踩坑】三种方式解决 Homebrew failing to install - fatal: not in a git directory

    问题描述 解决方法一 添加安全目录 没有测试 git config global add safe directory opt homebrew Library Taps homebrew homebrew git config globa
  • 动手写docker中遇到的问题合集

    fork exec usr bin sh operation not permitted exit status 1 我的环境 win10 wsl2 ubuntu20 04 解决方案 设置wsl默认用户为root sudo nano etc
  • java实现赫夫曼树以及赫夫曼编码和解码(用byte[])

    首先对于赫夫曼编码有个大概的理解 赫夫曼编码 Huffman Coding 又称霍夫曼编码 是一种编码方式 可变字长编码 VLC 的一种 Huffman于1952年提出一种编码方法 该方法完全依据字符出现概率来构造异字头的平均长度最短的码字
  • ubuntu搭载网络文件系统与linux开发板共享资源

    搭建NFS 如果ubuntu是运行在虚拟机上的 首先需要修改ubuntu与windows的网络连接模式 将其修为桥接模式与windows连接网络 ubuntu以及开发板安装net toos sudo apt install net tool
  • 常用设计模式-命令模式

    命令模式 讲一个请求封装成一个对象 可以让不同的请求对客户进行参数化 对请求排队或者记录请求日志 以及支持可撤销的操作 别名为事务模式或者动作模式 这样两者之间通过命令对象进行沟通 这样方便将命令对象进行储存 传递 调用 增加与管理 命令模
  • QFile创建文件以及递归文件删除文件

    QFile创建文件 1 t dir mkpath t firstFilePath 创建文件夹 2 t File open QIODevice WriteOnly QIODevice Truncate 创建文本 3 若文件不存在会创建一个 Q
  • mybatis-plus入坑指南

    简介 MyBatis Plus 简称 MP 是一个 MyBatis 的增强工具 在 MyBatis 的基础上只做增强不做改变 为简化开发 提高效率而生 特性 无侵入 只做增强不做改变 引入它不会对现有工程产生影响 如丝般顺滑 损耗小 启动即
  • python用matplotlib画折线图

    折线图 import matplotlib pyplot as plt y1 10 13 5 40 30 60 70 12 55 25 x1 range 0 10 x2 range 0 10 y2 5 8 0 30 20 40 50 10
  • java设计模式--[创建模式]--抽象工厂[abstract factory]

    抽象工廠 提供一個接口 用於創建相關或依賴對象的家族 而不需要指定具體類 二 設計某些系統是坷以南非要為用戶提供一系列相關的的對象 但系統不希望用戶真接使用new 運算符實例化這些對象 而由系統來控制這些對象的創建 否則用戶不僅要清楚地知道
  • 推荐系统架构

    推荐系统架构 实际推荐系统通常采用多种推荐算法 并根据用户的实时行为反馈调整用户的特征向量 特征的加权系数 进而融合各个推荐算法的推荐结果 在此基础上过滤不要的推荐项 最后结合用户使用场景调整推荐结果排名 给出最终推荐结果 基于不同特征的推
  • STM32F030 USART2配置函数 波特率不对导致无法进入中断

    今天调试STM32F030 USART2 收发不了数据 仿真的时候进入不了中断 但是配置也是正确的 搞了很久 原因是先初始化的串口再初始化Flash数据 导致读入的波特率是0 进而无法正常使用USART2 浪费了大量的时间 血的教训呀 vo
  • 【保姆级教学】搭建win10系统 IIS Web 服务器(上)

    先确认计算机上是否已安装 IIS 1 进入Windows10的控制面板 点击 系统和安全 2 找到 管理工具 并点击 3 查看是否有Internet Information Services IIS 管理器 如图 我的计算机已经安装好了 注
  • Python——Numpy高级索引

    Python Numpy高级索引 整数数组索引 或 与索引数组组合 布尔索引 比较运算符 取补运算符号 np iscomplex 过滤非复数元素 花式索引 传入顺序 倒序索引数组 使用 np ix 传入多个索引数组 https editor
  • MySQL——MySQL的介绍、安装、卸载与使用

    1 介绍 MySQL数据库隶属于MySQL AB公司 总部位于瑞典 后被oracle公司收购 优点 成本低 开放源码 可免费使用 性能高 执行很快 简单 容易安装和使用 DBMS分为两类 基于共享文件系统的DBMS Access 基于客户机
  • torch.max函数比较最大值

    新建两个tensor列表 利用torch max 进行两个列表的比较 import torch a torch tensor 1 2 3 4 5 print a a b torch tensor 10 1 7 9 3 print b b x
  • 认识HTTP请求

    要分析HTTP请求和响应必然少不了抓包工具 关于抓包工具的设置和下载推荐看抓包工具Fiddler的下载与设置 通过抓包得到的一个HTTP请求 HTTP请求的格式 结构分析 一 请求行 1 post是方法 可以表示一条HTTP请求要进行的操作