【问题标题】:Is it possible to intercept a non-ajax request in browser?是否可以在浏览器中拦截非 ajax 请求?
【发布时间】:2017-01-20 13:45:55
【问题描述】:

是否可以使用 JavaScript 在浏览器中拦截不是通过 XMLHttpRequest 对象 (ajax) 完成的 HTTP 请求?

我正在使用 ember-cli-mirage 模拟一个 API 服务器,它正在使用 pretender。我需要将文件上传(图像)添加到应用程序。模拟上传没有问题,因为它是由 ajax 完成的。但是我无法拦截由图像标签(非ajax请求)引起的GET请求,因为伪装者只拦截通过XMLHttpRequest完成的请求,因此无法返回“上传”的数据。

我是否也可以拦截非 ajax 请求?

如果不是:那么应该将什么视为最佳做法?这是我目前所考虑的:

  1. 通过 ajax 检索图像,以便我可以轻松拦截请求。例如。我可以将它们视为具有 base64 编码图像数据作为属性的 ember 数据模型。但我不确定权衡。恐怕这会导致性能问题以及可能导致图像大小 (> 1MB) 的内存泄漏。
  2. 传递图像请求并在 ember-cli 附带的快速服务器中处理它们。但是只有当应用程序由 ember-cli 提供时,模拟文件上传才会起作用。并且无法部署开发版本将是一个很大的权衡。

【问题讨论】:

  • 如果我错了,请纠正我,但 Ajax 的 HTTP 请求不是异步的;如,请求被触发并且执行继续进行?就像,一旦发送,它就会发送。
  • @Crowes ajax 请求可以通过覆盖XMLHttpRequest 对象来模拟。例如。伪装者.js 正在使用这种方法。但这不是这里的问题。

标签: javascript ember.js mocking ember-cli-mirage pretender.js


【解决方案1】:

我认为唯一的方法是使用service worker

服务工作者fetch 事件可以拦截任何类型的请求。但是浏览器的支持还不是很好。

【讨论】:

  • 我想知道Cache api 是否支持这个用例。它也可以在窗口范围内使用,并提供像cache.put() 这样的方法。我玩了一点,但没有成功。你知道缓存 api 是否可以解决问题吗?
猜你喜欢
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
  • 2013-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多