【问题标题】:How Gmail makes it?Gmail 是如何做到的?
【发布时间】:2016-01-13 15:31:54
【问题描述】:

我正在开发类似于 banatag 的服务。在新功能开发期间,我发现了 Gmail 的无法解释的行为(我认为)。

我会试着用图片解释我的问题:

  1. 创建标签(我将请求的图像)。现在没有人要求它

  2. 通过 URL 将其添加到电子邮件。图片地址http://eggplant-tag.appspot.com/request?FT1R3WECWNTM2ZGUDXRMA8VOXJ4F6TI4

  3. 页面有两个新的 AJAX 请求,但没有到我的域

  4. 正在寻找我的服务。 来自我的 IP 的请求,带有 Google 用户代理

什么请求这个图像(标签)? 我看到了两种可能性:

  • 页面向我的服务发出 AJAX 请求,这就是我看到我的 IP 的原因。但是在这种情况下,为什么我在开发者控制台的 Network 标签中看不到这个请求?

  • Google Image Proxy 服务请求我的服务,但为什么在这种情况下有我的 IP 在请求中?

我的IP:

[UPD] 添加处理对图像(标签)请求的类的一部分:

...
request.remoteAddress = str(self.request.remote_addr)# save remote address
request.put()
...
self.response.write(simpleImageData) #write to body binary data of 1x1 transparent image
self.response.headers[ 'Content-Type' ] = 'image/png'
self.response.headers[ 'Cache-Control' ] = 'no-cache, no-store, must-revalidate'
self.response.headers[ 'Pragma' ] = 'no-cache'
self.response.headers[ 'Expires' ] = '0'

[UPD 2]

我使用 wireshark 找到了对我的服务的请求,但没有任何请求。这就是为什么主要问题是 Google 用户内容如何模拟我的 IP 地址?

【问题讨论】:

  • 我看不出这与 appengine(或与此相关的编程)有何关系,除了您托管页面的地方。如果您想了解 Google 内容代理的工作原理,建议您向 Google 咨询。
  • 是的,它与 app-engine 没有直接关系,但我添加了这个标签,因为我认为 Google Image Proxy(GIP) 和 App Engine 一起工作的可能性很小(如果从 GIP 到 App Engine 的结果),我看到了它的副作用。编程呢,我认为它就在附近,因为它可能是浏览器请求的特征,或者我对网络通信的了解失败。
  • 嗯,有很多浏览器功能可能会导致这种情况。一种是 Chrome 的预加载,它甚至在您实际访问网站之前就可以缓冲内容。第二个是标准功能,浏览器向服务器发送一个 OPTIONS 请求以确定服务器的功能(但这不应该发生在简单的 GET 请求中)。我认为它是用户内容代理......但我不知道它是如何工作的。
  • 您如何检索“远程地址”?也许您的库会考虑 X-Forwarded-For 之类的标头:en.wikipedia.org/wiki/X-Forwarded-For
  • @konqi 我在另一个浏览器上检查了它(Tor,我认为大多数功能应该在其中关闭)并得到相同的结果。

标签: python ajax google-chrome google-app-engine gmail


【解决方案1】:

Google Image Proxy 的工作原理已经在网络上进行了彻底分析,例如 https://litmus.com/blog/gmail-adds-image-caching-what-you-need-to-knowhttps://blog.filippo.io/how-the-new-gmail-image-proxy-works-and-what-this-means-for-you/ -- googleusercontent 站点是 GIP 使用的缓存/cdn(以及其他内容)。

Google App Engine 的唯一相关性可能是您如何配置 app.yaml 而您没有向我们展示,即该图像是作为静态文件提供的,还是通过应用程序代码中的逻辑提供的 - 以及,如果是后者,您的代码在提供图像时是否有任何日志记录调用。从您显示的有限数据来看,我猜是前者(因此该文件存在于 Google 的静态文件服务器上并由其提供服务,而不是在您自己实例上的应用程序代码旁边),这将消除任何谜团......

【讨论】:

  • app.yaml 在这种情况下无济于事。我添加了处理图像请求的代码的问题部分。问题是为什么我在请求中看到我的 IP,但在 Chrome 的开发者控制台中没有请求。
  • @Alex 我需要你的帮助来解决这个 gae + django 问题stackoverflow.com/questions/35086550/…
【解决方案2】:

我在笔记本上部署了我的应用程序,然后我尝试重复我的操作。

结果证实了我的猜测,即 Google 代理和 App Engine 协同工作,当 Google 代理服务器请求我的应用时,我看到了我的 IP。

在我的实验中,我看到了 Google 代理的 IP。

【讨论】:

    猜你喜欢
    • 2011-06-25
    • 1970-01-01
    • 2011-02-09
    • 2013-02-26
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多