shinyapps.io部署的R Shiny应用curl下载文件HTTP异常求助
求助:shinyapps.io部署的R Shiny应用无法下载文件
问题描述
我有一个部署在shinyapps.io上的R Shiny应用,近期从互联网下载10MB文件时出现问题。本地运行该应用一切正常。
问题分析
问题出现后,在shinyapps.io日志中发现以下错误:
Warning: Error in open.connection: HTTP/2 stream 0 was not closed cleanly: INTERNAL_ERROR (err 2)
尝试强制使用HTTP/1.1后,仍无法下载,日志显示:
old SSL session ID is stale, removing
复现代码
已在shinyapps.io上部署测试示例,也可通过以下代码复现:
library(shiny) library(curl) library(readr) ui <- fluidPage( titlePanel("Debug HTTP from shinyapps.io to edf.fr"), sidebarLayout( sidebarPanel( radioButtons( "radio", "Select option", choices = list("HTTP/2" = 1, "HTTP/1.1" = 2), selected = 1 ) ), mainPanel(textOutput("text")) ) ) server <- function(input, output) { url <- "https://www.edf.fr/doaat/export/light/csv" h <- new_handle(failonerror = TRUE, verbose = TRUE) output$text <- renderText({ if (input$radio == 2) { handle_setopt(h, http_version = 2) } req <- curl_fetch_memory(url, handle = h) file <- rawToChar(req$content) read_lines(file, n_max=1, locale=locale(encoding='latin1')) }) } shinyApp(ui = ui, server = server)
上述代码本地运行正常(成功时主面板会显示下载的10MB CSV文件首行),但在shinyapps.io上运行时,HTTP/2和HTTP/1.1模式均失败。问题似乎与shinyapps.io上的curl版本以及与服务器的HTTP事务异常有关。
HTTP/2日志
Listening on http://127.0.0.1:37633 * Trying 104.68.246.156:443... * Connected to www.edf.fr (104.68.246.156) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * CAfile: /etc/ssl/certs/ca-certificates.crt * CApath: /etc/ssl/certs * TLSv1.0 (OUT), TLS header, Certificate Status (22): * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS header, Certificate Status (22): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS header, Finished (20): * TLSv1.2 (IN), TLS header, Supplemental data (23): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.2 (IN), TLS header, Supplemental data (23): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS header, Supplemental data (23): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.2 (IN), TLS header, Supplemental data (23): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.2 (OUT), TLS header, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.2 (OUT), TLS header, Supplemental data (23): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN, server accepted to use h2 * Server certificate: * subject: C=FR; ST=�le-de-France; L=Paris; O=ELECTRICITE DE FRANCE SA; CN=edf.fr * start date: Mar 22 00:00:00 2024 GMT * expire date: Mar 21 23:59:59 2025 GMT * subjectAltName: host "www.edf.fr" matched cert's "www.edf.fr" * issuer: C=IE; O=DigiCert Ireland Limited; CN=DigiCert G2 TLS EU RSA4096 SHA384 2022 CA1 * SSL certificate verify ok. * Using HTTP2, server supports multiplexing * Connection state changed (HTTP/2 confirmed) * Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0 * TLSv1.2 (OUT), TLS header, Supplemental data (23): * TLSv1.2 (OUT), TLS header, Supplemental data (23): * TLSv1.2 (OUT), TLS header, Supplemental data (23): * Using Stream ID: 1 (easy handle 0x5c8f626765d0) * TLSv1.2 (OUT), TLS header, Supplemental data (23): > GET /doaat/export/light/csv HTTP/2 Host: www.edf.fr user-agent: R/4.4.1 (ubuntu-22.04) R (4.4.1 x86_64-pc-linux-gnu x86_64 linux-gnu) accept: */* accept-encoding: deflate, gzip, br, zstd * TLSv1.2 (IN), TLS header, Supplemental data (23): * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * TLSv1.2 (IN), TLS header, Supplemental data (23): * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * old SSL session ID is stale, removing * TLSv1.2 (IN), TLS header, Supplemental data (23): * TLSv1.2 (OUT), TLS header, Supplemental data (23): * TLSv1.2 (IN), TLS header, Supplemental data (23): * TLSv1.2 (IN), TLS header, Supplemental data (23): * HTTP/2 stream 0 was not closed cleanly: INTERNAL_ERROR (err 2) * stopped the pause stream! * Connection #0 to host www.edf.fr left intact Warning: Error in curl_fetch_memory: HTTP/2 stream 0 was not closed cleanly: INTERNAL_ERROR (err 2)
HTTP/1.1日志
Listening on http://127.0.0.1:36691 * Trying 104.68.246.156:443... * Connected to www.edf.fr (104.68.246.156) port 443 (#0) * ALPN, offering http/1.1 * CAfile: /etc/ssl/certs/ca-certificates.crt * CApath: /etc/ssl/certs * TLSv1.0 (OUT), TLS header, Certificate Status (22): * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS header, Certificate Status (22): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS header, Finished (20): * TLSv1.2 (IN), TLS header, Supplemental data (23): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.2 (IN), TLS header, Supplemental data (23): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS header, Supplemental data (23): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.2 (IN), TLS header, Supplemental data (23): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.2 (OUT), TLS header, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.2 (OUT), TLS header, Supplemental data (23): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN, server accepted to use http/1.1 * Server certificate: * subject: C=FR; ST=�le-de-France; L=Paris; O=ELECTRICITE DE FRANCE SA; CN=edf.fr * start date: Mar 22 00:00:00 2024 GMT * expire date: Mar 21 23:59:59 2025 GMT * subjectAltName: host "www.edf.fr" matched cert's "www.edf.fr" * issuer: C=IE; O=DigiCert Ireland Limited; CN=DigiCert G2 TLS EU RSA4096 SHA384 2022 CA1 * SSL certificate verify ok. * TLSv1.2 (OUT), TLS header, Supplemental data (23): > GET /doaat/export/light/csv HTTP/1.1 Host: www.edf.fr User-Agent: R/4.4.1 (ubuntu-22.04) R (4.4.1 x86_64-pc-linux-gnu x86_64 linux-gnu) Accept: */* Accept-Encoding: deflate, gzip, br, zstd * TLSv1.2 (IN), TLS header, Supplemental data (23): * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * TLSv1.2 (IN), TLS header, Supplemental data (23): * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * old SSL session ID is stale, removing
内容的提问来源于stack exchange,提问作者faidherbard
相关产品推荐
相关产品推荐

