【问题标题】:GET response - Do NOT send a downlaodable fileGET 响应 - 不要发送可下载的文件
【发布时间】:2018-02-08 12:04:09
【问题描述】:

我的 Python (Tornado) 服务器通过 GET 请求发送 csv 内容。

我想将响应的内容类型指定为“text/csv”,但是当我这样做时,当我在浏览器上发送 GET 请求时,文件会被下载。

如何在不将其设为可下载文件的情况下指定标题“Content-type : text/csv”而仅在浏览器上显示内容?

【问题讨论】:

  • 如果只是想在浏览器中显示,为什么还要以 text/csv 格式发送呢?为什么不只是文本/纯文本?
  • 您的浏览器尝试对给定内容类型执行的操作不取决于内容类型,而是取决于浏览器。您只需将浏览器配置为显示 text/csv 内容类型响应内容,而不是下载它们。
  • 我必须为我的客户将内容类型设置为 text/csv。 @brunodesthuilliers 实际上我找不到在哪里可以在 chrome 或任何浏览器中更改此设置?

标签: python http request tornado


【解决方案1】:

内容类型标头告诉浏览器如何显示给定文件。它不知道如何显示text/csv,所以只能将其视为不透明下载。如果您希望文件显示为纯文本,您需要告诉浏览器它的内容类型为text/plain

如果您需要告诉其他客户端内容类型是text/csv,您需要一些方法来区分理解该内容类型的客户端和不理解该内容类型的客户端。最好的方法是使用Accept 请求标头。理解 CSV 的客户端会在他们的请求中发送 Accept: text/csv,然后服务器会根据内容类型 text/plaintext/csv 响应,具体取决于 CSV 是否出现在接受标头中。

使用Accept 标头可能需要对客户端进行修改,这对您来说可能可行,也可能不可行。如果您无法更新客户端以发送 Accept 标头,那么您将不得不使用更黑客的解决方法。您可以使用不同的 URL(添加 ?type=plain?type=csv)或尝试根据用户代理检测浏览器。

【讨论】:

  • 感谢您的完整回复,这非常有用。
猜你喜欢
  • 2017-12-05
  • 2021-03-20
  • 2012-09-21
  • 1970-01-01
  • 2012-05-11
  • 2023-03-04
  • 2011-07-04
  • 2012-12-09
  • 1970-01-01
相关资源
最近更新 更多