如果没有收到请求的响应,会发生什么情况?我看到重试

2024-04-21

我认为我遇到的问题可能更多是与浏览器相关的问题,但它是一个非常基本的问题,当我冒险构建一个 Web 应用程序时,我也想找到答案。

在我的客户端代码中我正在做一个$.ajax称呼。这篇文章可能需要一段时间才能回复。我看到的是在一段时间后再次发送请求。

我以为这是我的$.ajax再次调用发送,但是无论我在服务器上看到多少次POST请求,我都只看到beforeSend回调调用一次。我相当确定我的代码不会多次发送它,所以我认为它是浏览器重试?

我知道当我运行 Wireshark 时,我的服务器多次收到请求,并且可以多次看到发布请求。所以我的假设是这与 HTTP 有关吗?即,如果在一定时间内未收到响应,则重新发送请求?

下面是我的通话示例。

$.ajax({
                    async: false,
                    type: 'POST',
                    url: '<%= url_for('importDevice') %>',
                    data: { device: val },
                    retryLimit: 0,
                    //callback
                    success: function(data) {
                    alert('calling import');
                    if ( data == 'nomaster')
                    {
                            // Display a warning  toast, with a title
                            toastr.warning('You must set the Master Key first!', 'Warning');
                            $.ismasterset = false;
                            //reset the form contents after added
                    } else
                    {
                            $("div#content").html(data);
                    }
                    },
                     beforeSend: function(){
                    alert('in before send');
                    }
            });

这是所有相关代码,“retryLimit”没有被使用,我只是没有从我的代码中删除它,是的,在我放入它之前问题就存在了。

编辑了客户端和服务器的输出。

好的,我安装了“Live Http headers for Firefox”。

在“生成器”选项卡中,我看到一个调用

'#request# POST http://testhost/importdevice' 

我没有看到POST但在“标题”部分,也许那是因为没有响应?

在我的网络服务器中,我看到 2 个调用间隔大约 22 秒。

[Sun Jan 13 03:08:45 2013] [debug] POST /importdevice (Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20100101 Firefox/17.0).

[Sun Jan 13 03:09:07 2013] [debug] POST /importdevice (Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20100101 Firefox/17.0).

我也可以在wireshark中看到这些相同的调用...

这就是为什么我问如果没有返回响应,尝试重新发送请求是否是正常行为,类似于 TCP 握手和SYN重传。

新更新

这似乎与我的 Ajax 调用没有任何关系。如果我创建一个带有简单 HREF 的按钮。

i.e

<a href="/importdevice?device=serverA" class="btn btn-success">TestDirect</a>

然后,在我的“实时 HTTP 标头输出”中,我得到...只是一个实例。

#request# GET http://172.16.118.15/importdevice?device=serverA

但我再次在我的服务器日志中得到。

[Sun Jan 13 03:20:25 2013] [debug] GET /importdevice (Mozilla/5.0 (Macintosh; Intel Mac OS  X 10.8; rv:17.0) Gecko/20100101 Firefox/17.0).
[Sun Jan 13 03:20:48 2013] [debug] GET /importdevice (Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20100101 Firefox/17.0).

在服务器上的wireshark中,我也看到它两次...并且正如预期的那样,我的服务器代码也被调用了两次...这对我来说真的很困惑。


查看这篇博客文章,其中解释了正在发生的事情:http://geek.starbean.net/?p=393 http://geek.starbean.net/?p=393

根据HTTP/1.1 RFC 8.2.4 https://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.4:

如果 HTTP/1.1 客户端发送的请求包含请求正文,但不包含带有“100-Continue”期望的 Expect 请求标头字段,并且客户端未直接连接到 HTTP/1.1 源服务器,如果客户端在收到来自服务器的任何状态之前看到连接关闭,则客户端应该重试该请求。

确保您设计的网络应用程序能够容忍这些额外的请求。如果您希望 ajax 请求只执行一次某些操作,例如向数据库写入某些内容,那么您需要将请求设计为幂等的。看:什么是幂等操作? https://stackoverflow.com/questions/1077412/what-is-an-idempotent-operation

此外,这还突出了 GET 和 POST 操作之间的差异:http://www.cs.tut.fi/~jkorpela/forms/methods.html http://www.cs.tut.fi/~jkorpela/forms/methods.html

作为一般设计实践:
-GET操作应设计为幂等的
-POST 操作应用于写入数据库等。

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

如果没有收到请求的响应,会发生什么情况?我看到重试 的相关文章

随机推荐

  • python - 使用selenium在页面上查找电子邮件地址

    我正在尝试从网站获取电子邮件地址列表 并且非常接近 我的代码如下所示 我收到以下错误 发生的情况是 有一个链接页面 然后单击该链接 在下一页中有一个电子邮件地址 单击链接后 我试图打印每个页面内的电子邮件地址 这是链接点击进入的页面示例 h
  • 如何取消或停止客户端的推送通知?

    我有一个向客户端发送推送通知的网络服务器 客户端可以拦截推送通知UNNotificationServiceExtension在 iOS 10 上并更改内容 现在我想取消在某些通知上在客户端显示的推送通知 我怎么做 我尝试做 self con
  • 两个连续 KeyDown 事件之间的延迟较长

    我正在编写一个小游戏引擎 纯粹是为了从内部了解它们是如何工作的 我目前不想搞乱 OpenGL 或 DirectX 所以我坚持使用 GDI 和所有 WinForms 东西在控件上绘图 显然 我需要处理输入 更具体地说 是键盘事件 然而 这带来
  • WIX 合并 C++ 运行时

    我已经合并了 msm 与 2015 crt
  • Scikit - 如何定义绘制 roc 曲线的阈值

    我有一个增强树模型以及测试数据集的概率和分类 我正在尝试绘制相同的 roc curve 但我无法弄清楚如何在 scikit learn 中定义 roc 曲线的阈值 alpha from sklearn metrics import prec
  • rxjs:定期执行一些操作,中间有特定的延迟

    客户端应用程序向服务器发送请求 这可能需要很长时间才能完成 一旦请求完成或失败 客户端应该等待一段时间 即10秒 然后再次发送请求 目前的工作解决方案是这样的 appRequest new Subject ngOnInit void thi
  • 在状态更改时从 asp.net 的验证器获取事件到 jquery

    如果我的页面的验证器更改其状态 我希望在 jquery 中触发一个事件 这是我的用例 在地址表单中 验证器全部被隐藏 如果我提交表格 就会显示出来 现在我想触发一个 jQuery 函数 它用红色边框渲染所有行 不是输入字段 而是它们的父行
  • 使用 TypeScript、Jest 和 Enzyme 进行 React 单元测试:无法调用可能“未定义”的对象

    我正在使用 TypeScript 构建一个 React Native 应用程序 我正在使用 Jest 和 Enzyme 进行组件测试 我也在使用 React 导航 在我的最后一个问题中 https stackoverflow com que
  • 如何从 Chrome 扩展程序填写网页表单中的文本字段?

    到目前为止 我已经有了一个扩展程序 列出了用户所在的网页和一个按钮 单击该按钮后 应在文本字段中填写 testing123 在我正在测试的网页上 表单有一个 id 和名称 form 文本字段有一个 id 和名称 body 如果我能在填写此文
  • py.test 无法导入我的模块

    我正在努力正确导入 python 我想要实现的是拥有一个包含多个源文件的模块和一个包含单元测试的测试文件夹 无论我做什么 我都无法让 py test 3 执行我的测试 我的目录布局如下所示 module init py testclass
  • 上传成功后显示上传的图片

    我正在 Magnific Popup 灯箱 内使用 Carrierwave gem 我想做的是after上传图片 它将显示新上传的图片 目前 从灯箱上传图像后 它将继续显示您最初查看的图像 并显示 成功 消息 表明您的图像已成功上传 当前的
  • 托管多个 django 站点时出现问题(设置交叉)

    我最近设置了一个 Web 服务器 目前托管着几个静态页面网站和两个 django 项目 这两个 django 项目是 abc 和 xyz 分别位于主文件夹中的不同目录中 每个都有自己的 wsgi 脚本 该脚本指向各自的 settings p
  • 将 rbf 与 scipy 一起使用时出现内存错误

    I want to plot some points with the rbf function like here to get the density distribution of the points 如果我运行以下代码 它工作正常
  • “时钟”是否测量“睡眠”,即挂起的线程?

    我正在尝试理解clock t clock void 功能更好 有以下问题 我理解正确吗clock测量进程的滴答数 因为它是积极奔跑 and sleep挂起调用线程 在这种情况下只有一个线程 即主线程 因此挂起整个进程 意思就是clock不测
  • 使用 PHP 的 HTTP PUT、DELETE 和 I/O 流

    除了 HTTP PUT 方法之外 还有什么方法可以访问通过 HTTP PUT 方法发送的数据 putdata fopen php input r 我从未与PUT and DELETE方法和 putdata fopen php input r
  • 使用图形 api 在 sharepoint online 中创建多选字段的 POST 正文是什么?

    我正在尝试使用 Microsoft Graph 创建新的 SharePoint ListItem 要创建包含标题等简单字段的列表项 我的 POST 正文如下所示 fields Title Ehsan s REST 但是一旦我添加一个具有多选
  • 使用 Ionic core 4 时不会显示离子含量

    我正在开发一个使用 Vue js 和 Ionic 的应用程序 但我不明白为什么更新我的 Ionic 核心版本会破坏 ion content 标签 我尝试谷歌搜索该标签是否已停用 但似乎没有是这样的 为了说明这一点 我制作了一个使用 Ioni
  • 如何测试模块的运行块

    我希望我的 AngularJS 应用程序发出 http 请求以从服务器检索用户信息或重定向到登录屏幕 我在应用程序主模块的运行块中实现了这一点 但是如何在运行块中测试代码呢 或者我应该将此初始化代码移到控制器中以使其可测试 我正在使用 Ka
  • 从 Excel 到 SQL Server 的数据导入无法导入所有数据

    我在使用导入和导出数据工具将数据从 Excel 导入到 SQL Server 时发生了一件奇怪的事情 缺点是我可以在Excel中看到数据 但所有数据都没有导入 我有一本 Excel 工作簿 其中包含一个电子表格 我可以看到列中的数据 一切看
  • 如果没有收到请求的响应,会发生什么情况?我看到重试

    我认为我遇到的问题可能更多是与浏览器相关的问题 但它是一个非常基本的问题 当我冒险构建一个 Web 应用程序时 我也想找到答案 在我的客户端代码中我正在做一个 ajax称呼 这篇文章可能需要一段时间才能回复 我看到的是在一段时间后再次发送请