使用Internet Explorer打开JasperReports服务器/Tomcat的文件内容资源(Excel)时,会内联显示二进制数据 内容类型/接受/MIME HTTP头问题 JasperReports服务器(5.2.0)(更新日期2014-08-20/21:5.5.0和5.6.0 在Tomcat 7上运行 客户尝试 Internet Explorer 5.2.0测试(以下默认值) 9.0.8112.16421 64位(以下默认值) 11.0.9600.17105 64位 5.5.0试验(更新2014-08-20) 8.0.7601.17514 9.0.8112.16421 10.0.9200.16384 火狐28.0 铬(34.0.1847.131米)

使用Internet Explorer打开JasperReports服务器/Tomcat的文件内容资源(Excel)时,会内联显示二进制数据 内容类型/接受/MIME HTTP头问题 JasperReports服务器(5.2.0)(更新日期2014-08-20/21:5.5.0和5.6.0 在Tomcat 7上运行 客户尝试 Internet Explorer 5.2.0测试(以下默认值) 9.0.8112.16421 64位(以下默认值) 11.0.9600.17105 64位 5.5.0试验(更新2014-08-20) 8.0.7601.17514 9.0.8112.16421 10.0.9200.16384 火狐28.0 铬(34.0.1847.131米),excel,internet-explorer,tomcat,http-headers,jasperserver,Excel,Internet Explorer,Tomcat,Http Headers,Jasperserver,如果我在JasperReports服务器Web GUI中导航到我以前上传的InHiltsResource(内容资源)*.xlsx Excel文档,它在Firefox和Chrome中运行良好,提供保存或打开文件,但在Internet Explorer中失败,通过在选项卡中显示文件二进制内容:-( 我做了很多研究,但没有找到确切的原因,尽管有些观点可能会指出原因: (更一般的观察:) IEs/Jasper GUI发送的HTTP请求头(ACCEPTstring)似乎错误/不完整/IE不兼容 (因此

如果我在JasperReports服务器Web GUI中导航到我以前上传的InHiltsResource(内容资源)*.xlsx Excel文档,它在Firefox和Chrome中运行良好,提供保存或打开文件,但在Internet Explorer中失败,通过在选项卡中显示文件二进制内容:-(

我做了很多研究,但没有找到确切的原因,尽管有些观点可能会指出原因:

(更一般的观察:)

  • IEs/Jasper GUI发送的HTTP请求头(
    ACCEPT
    string)似乎错误/不完整/IE不兼容
    • (因此,Jasper Servlets HTTP响应头(
      Content-Type
      string)似乎是错误的/不完整的/IE不兼容的
(当深入思考这一点时:)

  • JasperServer本身(或者在交付时一定程度上作为容器的Tomcat)不应该尝试确定要交付的内容类型吗?
    • 可以让用户手动设置,也可以通过试探法(文件扩展名、内容解析等)来确定
      • 这样,它也可以与文件一起存储(我只会在用户希望覆盖启发式确定类型的结果时才这样做)
    • 由于文件名或URL已经很容易表明它是一个*.xlsx文件,并且内容以
      PK…
      开头,因此它已经强烈表明它确实是一个(压缩)Excel文件
    • 因此,我将看到两种基本的方法,这通常会起作用。。。
      • 请求头(Jasper交付的GUI页面)应明确定义内容类型(可能仅当响应功能本身无法轻松确定时)
      • (通常可能更合适:)响应头(Jasper/Tomcat服务器逻辑)应该明确地设置请求的、正确的或估计的内容类型
        • 查看IE或FF的头响应,可以清楚地看到此处未设置任何
          内容类型
          ,尽管REST-API调用将其设置为
          应用程序/八位字节流;charset=UTF-8
以下是我已经检查过的详细信息:

  • ok:FF和IE的HTTP响应头对我来说没有显著差异(尽管请求头非常不同)(见下文),因此表明结果内容检测的魔力存在一些问题(在这种情况下FF和Chrome似乎更好)

  • IE和FF的HTTP头请求/响应周期:

    • IE9(通过车载开发工具捕获):

      • 请求标题

        Anforderung        GET http://...:8080/jasperserver/fileview/fileview/....xlsx? HTTP/1.1
        Accept             application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
        Accept-Language    de-DE
        User-Agent         Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
        UA-CPU             AMD64
        Accept-Encoding    gzip, deflate
        Host               ...:8080
        Proxy-Connection   Keep-Alive
        Cookie             userTimezone=Europe/Berlin; JSESSIONID=0FEF6E9F46EB2202A041A0A6F37B249A; userLocale=de_DE; treefoldersTree=1%7Copen%3B4%7Copen%3B5%7Copen%3B8%7Copen%3B; lastFolderUri=/...
        
        Antwort             HTTP/1.0 200 OK
        Server              Apache-Coyote/1.1
        Cache-Control       no-store
        Expires             Thu, 01 Jan 1970 01:00:00 CET
        P3P                 CP="ALL" 
        Pragma    
        Content-Language    de-DE
        Content-Length      453242
        Date                Thu, 08 May 2014 10:54:46 GMT
        X-Cache             MISS from ..some-proxy-host..
        X-Cache-Lookup      MISS from ..some-proxy-host..:8080
        Via                 1.1 ..some-proxy-host..:8080 (squid/2.7.STABLE8)
        Connection          keep-alive
        Proxy-Connection    keep-alive
        
        (Request-Zeile)    GET /jasperserver/fileview/fileview/....xlsx? HTTP/1.1
        Host               viasaxinfo.list.smwa.sachsen.de:8080
        User-Agent         Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0
        Accept             text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
        Accept-Language    de,en-US;q=0.7,en;q=0.3
        Accept-Encoding    gzip, deflate
        Referer            http://...:8080/jasperserver/flow.html?_flowId=searchFlow
        Cookie             userLocale=de; userTimezone=Europe/Berlin; JSESSIONID=E3989F65A4198047DA87FBB7BB73ABBA; treefoldersTree=1%7Copen%3B4%7Copen%3B5%7Copen%3B8%7Copen%3B; lastFolderUri=/...
        Connection         keep-alive
        
        (Status-Zeile)    HTTP/1.0 200 OK
        Server            Apache-Coyote/1.1
        Cache-Control     no-store
        Expires           Thu, 01 Jan 1970 01:00:00 CET
        P3P               CP="ALL" 
        Content-Language  de
        Content-Length    453242
        Date              Thu, 08 May 2014 11:00:48 GMT
        X-Cache           MISS from ..some-proxy-host..
        X-Cache-Lookup    MISS from ..some-proxy-host..:8080
        Via               1.1 ..some-proxy-host..:8080 (squid/2.7.STABLE8)
        Connection        keep-alive
        Proxy-Connection  keep-alive
        
      • 响应标题

        Anforderung        GET http://...:8080/jasperserver/fileview/fileview/....xlsx? HTTP/1.1
        Accept             application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
        Accept-Language    de-DE
        User-Agent         Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
        UA-CPU             AMD64
        Accept-Encoding    gzip, deflate
        Host               ...:8080
        Proxy-Connection   Keep-Alive
        Cookie             userTimezone=Europe/Berlin; JSESSIONID=0FEF6E9F46EB2202A041A0A6F37B249A; userLocale=de_DE; treefoldersTree=1%7Copen%3B4%7Copen%3B5%7Copen%3B8%7Copen%3B; lastFolderUri=/...
        
        Antwort             HTTP/1.0 200 OK
        Server              Apache-Coyote/1.1
        Cache-Control       no-store
        Expires             Thu, 01 Jan 1970 01:00:00 CET
        P3P                 CP="ALL" 
        Pragma    
        Content-Language    de-DE
        Content-Length      453242
        Date                Thu, 08 May 2014 10:54:46 GMT
        X-Cache             MISS from ..some-proxy-host..
        X-Cache-Lookup      MISS from ..some-proxy-host..:8080
        Via                 1.1 ..some-proxy-host..:8080 (squid/2.7.STABLE8)
        Connection          keep-alive
        Proxy-Connection    keep-alive
        
        (Request-Zeile)    GET /jasperserver/fileview/fileview/....xlsx? HTTP/1.1
        Host               viasaxinfo.list.smwa.sachsen.de:8080
        User-Agent         Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0
        Accept             text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
        Accept-Language    de,en-US;q=0.7,en;q=0.3
        Accept-Encoding    gzip, deflate
        Referer            http://...:8080/jasperserver/flow.html?_flowId=searchFlow
        Cookie             userLocale=de; userTimezone=Europe/Berlin; JSESSIONID=E3989F65A4198047DA87FBB7BB73ABBA; treefoldersTree=1%7Copen%3B4%7Copen%3B5%7Copen%3B8%7Copen%3B; lastFolderUri=/...
        Connection         keep-alive
        
        (Status-Zeile)    HTTP/1.0 200 OK
        Server            Apache-Coyote/1.1
        Cache-Control     no-store
        Expires           Thu, 01 Jan 1970 01:00:00 CET
        P3P               CP="ALL" 
        Content-Language  de
        Content-Length    453242
        Date              Thu, 08 May 2014 11:00:48 GMT
        X-Cache           MISS from ..some-proxy-host..
        X-Cache-Lookup    MISS from ..some-proxy-host..:8080
        Via               1.1 ..some-proxy-host..:8080 (squid/2.7.STABLE8)
        Connection        keep-alive
        Proxy-Connection  keep-alive
        
    • FF(使用HttpFox插件捕获)

      • 请求标题

        Anforderung        GET http://...:8080/jasperserver/fileview/fileview/....xlsx? HTTP/1.1
        Accept             application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
        Accept-Language    de-DE
        User-Agent         Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
        UA-CPU             AMD64
        Accept-Encoding    gzip, deflate
        Host               ...:8080
        Proxy-Connection   Keep-Alive
        Cookie             userTimezone=Europe/Berlin; JSESSIONID=0FEF6E9F46EB2202A041A0A6F37B249A; userLocale=de_DE; treefoldersTree=1%7Copen%3B4%7Copen%3B5%7Copen%3B8%7Copen%3B; lastFolderUri=/...
        
        Antwort             HTTP/1.0 200 OK
        Server              Apache-Coyote/1.1
        Cache-Control       no-store
        Expires             Thu, 01 Jan 1970 01:00:00 CET
        P3P                 CP="ALL" 
        Pragma    
        Content-Language    de-DE
        Content-Length      453242
        Date                Thu, 08 May 2014 10:54:46 GMT
        X-Cache             MISS from ..some-proxy-host..
        X-Cache-Lookup      MISS from ..some-proxy-host..:8080
        Via                 1.1 ..some-proxy-host..:8080 (squid/2.7.STABLE8)
        Connection          keep-alive
        Proxy-Connection    keep-alive
        
        (Request-Zeile)    GET /jasperserver/fileview/fileview/....xlsx? HTTP/1.1
        Host               viasaxinfo.list.smwa.sachsen.de:8080
        User-Agent         Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0
        Accept             text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
        Accept-Language    de,en-US;q=0.7,en;q=0.3
        Accept-Encoding    gzip, deflate
        Referer            http://...:8080/jasperserver/flow.html?_flowId=searchFlow
        Cookie             userLocale=de; userTimezone=Europe/Berlin; JSESSIONID=E3989F65A4198047DA87FBB7BB73ABBA; treefoldersTree=1%7Copen%3B4%7Copen%3B5%7Copen%3B8%7Copen%3B; lastFolderUri=/...
        Connection         keep-alive
        
        (Status-Zeile)    HTTP/1.0 200 OK
        Server            Apache-Coyote/1.1
        Cache-Control     no-store
        Expires           Thu, 01 Jan 1970 01:00:00 CET
        P3P               CP="ALL" 
        Content-Language  de
        Content-Length    453242
        Date              Thu, 08 May 2014 11:00:48 GMT
        X-Cache           MISS from ..some-proxy-host..
        X-Cache-Lookup    MISS from ..some-proxy-host..:8080
        Via               1.1 ..some-proxy-host..:8080 (squid/2.7.STABLE8)
        Connection        keep-alive
        Proxy-Connection  keep-alive
        
      • 响应标题

        Anforderung        GET http://...:8080/jasperserver/fileview/fileview/....xlsx? HTTP/1.1
        Accept             application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
        Accept-Language    de-DE
        User-Agent         Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
        UA-CPU             AMD64
        Accept-Encoding    gzip, deflate
        Host               ...:8080
        Proxy-Connection   Keep-Alive
        Cookie             userTimezone=Europe/Berlin; JSESSIONID=0FEF6E9F46EB2202A041A0A6F37B249A; userLocale=de_DE; treefoldersTree=1%7Copen%3B4%7Copen%3B5%7Copen%3B8%7Copen%3B; lastFolderUri=/...
        
        Antwort             HTTP/1.0 200 OK
        Server              Apache-Coyote/1.1
        Cache-Control       no-store
        Expires             Thu, 01 Jan 1970 01:00:00 CET
        P3P                 CP="ALL" 
        Pragma    
        Content-Language    de-DE
        Content-Length      453242
        Date                Thu, 08 May 2014 10:54:46 GMT
        X-Cache             MISS from ..some-proxy-host..
        X-Cache-Lookup      MISS from ..some-proxy-host..:8080
        Via                 1.1 ..some-proxy-host..:8080 (squid/2.7.STABLE8)
        Connection          keep-alive
        Proxy-Connection    keep-alive
        
        (Request-Zeile)    GET /jasperserver/fileview/fileview/....xlsx? HTTP/1.1
        Host               viasaxinfo.list.smwa.sachsen.de:8080
        User-Agent         Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0
        Accept             text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
        Accept-Language    de,en-US;q=0.7,en;q=0.3
        Accept-Encoding    gzip, deflate
        Referer            http://...:8080/jasperserver/flow.html?_flowId=searchFlow
        Cookie             userLocale=de; userTimezone=Europe/Berlin; JSESSIONID=E3989F65A4198047DA87FBB7BB73ABBA; treefoldersTree=1%7Copen%3B4%7Copen%3B5%7Copen%3B8%7Copen%3B; lastFolderUri=/...
        Connection         keep-alive
        
        (Status-Zeile)    HTTP/1.0 200 OK
        Server            Apache-Coyote/1.1
        Cache-Control     no-store
        Expires           Thu, 01 Jan 1970 01:00:00 CET
        P3P               CP="ALL" 
        Content-Language  de
        Content-Length    453242
        Date              Thu, 08 May 2014 11:00:48 GMT
        X-Cache           MISS from ..some-proxy-host..
        X-Cache-Lookup    MISS from ..some-proxy-host..:8080
        Via               1.1 ..some-proxy-host..:8080 (squid/2.7.STABLE8)
        Connection        keep-alive
        Proxy-Connection  keep-alive
        
  • 正常:IE中的兼容性视图对它没有帮助

  • 检查潜在的HTTP响应问题(不同)

    • Pragma
      :应具有与
      缓存控制:Public

    • 内容语言
      :我想这不重要

  • 检查潜在的HTTP请求问题

    • 请求头行的顺序应该无关紧要
    • 接受
      :有问题吗?
      • 看看这些规格看起来还可以
    • 接受语言
      :应该没关系
    • Cookie
      :内容应该无关紧要
    • 代理连接
      :禁用/启用代理设置不会改变某些内容
  • oktomcat7/conf/web.xml中的MIME类型设置

    <mime-mapping>
      <extension>xlsx</extension>
      <mime-type>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</mime-type>
    </mime-mapping>
    
  • HTTP响应头

    Antwort          HTTP/1.0 200 OK
    Server           Apache-Coyote/1.1
    Cache-Control    private
    Expires          Thu, 01 Jan 1970 01:00:00 CET
    P3P              CP="ALL" 
    Content-Disposition    attachment; filename=....xlsx
    Content-Type     application/octet-stream;charset=UTF-8
    Date             Fri, 09 May 2014 12:44:05 GMT
    X-Cache          MISS from LIST-SRV-PROXY03
    X-Cache-Lookup   MISS from LIST-SRV-PROXY03:8080
    Via              1.1 ...some-proxy-host...:8080 (squid/2.7.STABLE8)
    Connection       close
    
  • 不带
    fileData=true
    返回预期的资源元数据XML(内联显示)

    
    1399636098445
    

  • 我花了相当长的时间在这个问题上,但谷歌都没有(我想知道为什么没有其他人会有这个问题,尽管这在我看来很常见)各种调试也没有帮助。也许我必须详细地使用相关的Jasper类来进一步调试,但也许其他人也有这个问题,或者知道解决方案?

    似乎有一种手动解决方法:

    我们实现了一个servlet过滤器类,以尝试在我们知道MIME类型设置错误的情况下设置响应的内容配置