【问题标题】:Is there a way to make Google Cloud Run pass on my Content-Type?有没有办法让 Google Cloud Run 传递我的 Content-Type?
【发布时间】:2019-11-20 10:20:11
【问题描述】:

我正在 Docker/Google Cloud Run 中运行基于 java/jetty 的应用程序。

我发送的响应包含(以及其他)这些标头

Content-Type: multipart/signed; ...
Content-Length: 4849
Server: Jetty(9.4.20.v20190813)

但不幸的是,在 Google 代理请求之后,客户收到了类似这样的信息

Content-Type: text/html
Server: Google Frontend
Content-Length: 5038

这会破坏每个期望 .. 正确 Content-Type 的客户端,并且 完全 会破坏多部分响应。客户不在我的控制之下,所以这是一个潜在的阻碍,不幸的是,它只是在实际构建并部署到 Cloud Run 之后才出现。

  • 有没有机会让这个工作/解决它?
  • 这样的传出响应是否会发生重大/有意义的变化?

不相信自己会发现 Google 产品中的错误,我现在向服务器上的码头添加了请求/响应日志¹。我的服务器看到的最后一件事(查看传出响应)是这样的:

2019-11-21 03:42:14,002 INFO [no.difi.oxalis.server.Main] Jetty response headers: 
AS2-From: PSG000186
AS2-Version: 1.0
Message-Id: <1574307732619.1.1661451988.Oxalis@localhost>
AS2-To: PSG000186
Date: Thu, 21 Nov 2019 03:42:10 GMT
MIME-Version: 1.0
Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-1; 
    boundary="----=_Part_2_1332891644.1574307732643"

果然,在客户端,这个 Content-Type 变成了“text/html”。

据我所知,此时我无法更改任何内容(同样:相同的二进制文件,相同的 Docker 映像,在使用相同的输入在本地运行时不会以这种方式运行)。

我想知道长 Content-Type 的延续部分是否会破坏这里的内容?

① 用一个小技巧实现RequestLog

        @Override
        public void log(Request request, Response response) {
            String responseHeaders = response.getHeaderNames().stream().map(name -> { return name+": "+response.getHeader(name); }).collect(Collectors.joining("\r\n"))
            + "\r\n\r\n";
            log.info("Jetty response headers: \r\n{}", responseHeaders);
        } 

更新

最小测试用例:不幸的是,我无法在一个很小的测试用例中重现这一点(即,只是启动一个返回各种内容类型的应用程序)。

至于进出的确切流量:这是一个 PEPPOL(想想:业务文档交换标准,主要是在这种情况下是..发票)端点。我的示例文件是稍微修改过的真实发票,所以我需要先找到一种方法来使用完全匿名的数据来重现它。

更新 2:

根据一些官方示例文档,这些是客户端收到的响应(格式为标题、空白行、全文):

本地发送到docker run -it --rm gcr.io/myproject/mytag

Date: Thu, 21 Nov 2019 08:08:35 GMT
AS2-From: PSG000186
AS2-Version: 1.0
Message-Id: <1574323717515.2.2091717429.Oxalis@fd713b389c13>
AS2-To: PSG000186
MIME-Version: 1.0
Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-1;           boundary="----=_Part_6_682736416.1574323717516"
Content-Length: 4856
Server: Jetty(9.4.20.v20190813)

------=_Part_6_682736416.1574323717516
Content-Type: multipart/report; Report-Type=disposition-notification;
        boundary="----=_Part_4_1507503463.1574323717515"

------=_Part_4_1507503463.1574323717515
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

= Received headers

Date: Thu, 21 Nov 2019 08:08:35 +0000
Message-Id: <1574323715268.1.-1501411008.Oxalis@fd713b389c13>
Subject: AS2 message from Oxalis
MIME-Version: 1.0
Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-1; boundary="----=_Part_1_1634611027.1574323715300"
AS2-From: PSG000186
Connection: keep-alive
User-Agent: Oxalis 4.1.1-SNAPSHOT
Disposition-Notification-To: not.in.use@difi.no
AS2-Version: 1.0
Host: localhost:8080
Accept-Encoding: gzip,deflate
Disposition-Notification-Options: signed-receipt-protocol=required,pkcs7-signature; signed-receipt-micalg=required,sha1
AS2-To: PSG000186
Content-Length: 19479


------=_Part_4_1507503463.1574323717515
Content-Type: message/disposition-notification
Content-Transfer-Encoding: 7bit

Date: Thu, 21 Nov 2019 08:08:36 +0000
Reporting-UA: Oxalis 4.1.1-SNAPSHOT
Original-Recipient: rfc822; PSG000186
Final-Recipient: rfc822; PSG000186
Original-Message-ID: <1574323715268.1.-1501411008.Oxalis@fd713b389c13>
X-Oxalis-Original-Content-Header: Q29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94bWwNCkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NA0KDQo=
Received-Content-Mic: yI4WRPi283i7xj5KOnRy3O+XCCU=, sha1
Disposition: automatic-action/MDN-sent-automatically; processed

------=_Part_4_1507503463.1574323717515--

------=_Part_6_682736416.1574323717516
Content-Type: application/pkcs7-signature; name=smime.p7s; smime-type=signed-data
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: S/MIME Cryptographic Signature

MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIAwggXuMIID
1qADAgECAhAMJNw3XIlx1Z3q61spNiGjMA0GCSqGSIb3DQEBCwUAMGsxCzAJBgNVBAYTAkJFMRkw
FwYDVQQKExBPcGVuUEVQUE9MIEFJU0JMMRYwFAYDVQQLEw1GT1IgVEVTVCBPTkxZMSkwJwYDVQQD
EyBQRVBQT0wgQUNDRVNTIFBPSU5UIFRFU1QgQ0EgLSBHMjAeFw0xODExMTMwMDAwMDBaFw0yMDEx
MDIyMzU5NTlaMHsxEjAQBgNVBAMMCVBTRzAwMDE4NjEXMBUGA1UECwwOUEVQUE9MIFRFU1QgQVAx
PzA9BgNVBAoMNldvcmtmbG93IE1hbmFnZW1lbnQgJiBEb2N1bWVudCBDb25zdWx0aW5nIEFzaWEg
UHRlIEx0ZDELMAkGA1UEBhMCU0cwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/Yy7Z
xvyujk8UE7xFXmfhFnWjox6CM6vRGWnPQ23ox59mC4mFFz7Ie9MAw2MdqWx01QI+xcyT8BKqPq9d
rSD44SFcFccaO3P81Q4jPGMDoljA40iqzCzJYoIdhJZEMIO7W7jyiRFak/OAB1xHh6UHfKnapZXa
wqXlHC8gyTHHGfZtFunL//e8lTYqMSFbRAega9caqbxUEsg2AqF4W2PtAoAHUtdVP/XkdEUCQ2Yl
gezvv0QFOazakjmaZzu1ZzKxplimMflktaH3OA8GfLMz2MoGo4zjk2s+yyDZr8SfXUfzQ5+/+WC5
FeZvnpTM4W2/Z1hfeQxc62CMBCUqkM+NAgMBAAGjggF8MIIBeDAMBgNVHRMBAf8EAjAAMA4GA1Ud
DwEB/wQEAwIDqDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDAjAdBgNVHQ4EFgQUXPzNhnbQGAEj+iwQ
45i5surQ6Y0wXQYDVR0fBFYwVDBSoFCgToZMaHR0cDovL3BraS1jcmwuc3ltYXV0aC5jb20vY2Ff
NmE5Mzc3MzRhMzkzYTA4MDViZjMzY2RhOGIzMzEwOTMvTGF0ZXN0Q1JMLmNybDA3BggrBgEFBQcB
AQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9wa2ktb2NzcC5zeW1hdXRoLmNvbTAfBgNVHSMEGDAW
gBRrb0u28Te6Kzx/GM26K7K5fCo36zAtBgpghkgBhvhFARADBB8wHQYTYIZIAYb4RQEQAQIDAQGB
qZDhAxYGOTU3NjA4MDkGCmCGSAGG+EUBEAUEKzApAgEAFiRhSFIwY0hNNkx5OXdhMmt0Y21FdWMz
bHRZWFYwYUM1amIyMD0wDQYJKoZIhvcNAQELBQADggIBAHS85wUs42jOXKGqIBditIeb8h8O+kW/
IVX++ChjLLJ+2jTQ4WJZ5cnvGmTwRwCe/Dvn2pKK5cuVz2pJyk33MrYmWsTdf8t3tgQqtS5Z11dz
OoycNDKc4pgZNdSp4lRgm4fEePjrEofm1eTFWadCOVcf1acHq1qVXUXpPn+5ek9HonPNFwXqQJGb
yF9nVE+U/Sd6/owZ9Y7w2CdvDuKrZ1NWw19wURaM0GrTJbq9/7Z+eb0vsMEItu5J/77QTzaPbIpJ
XrHTkCLlGu2Kc7wjmJv4nubxKf15yFnxnTDkgZcg0VUljaLoTaeIyWXwhXQuYVMMdbbl/HGVy2aH
WVtVOe0lOnhVbSPwq9IIsh/GfZ8DTyrEeK7iSwZ0Rgc9fuTvaAkdrwYHdvMxHuzEs3tI74yN6NFE
daFUOkFIt/+lJk6LPOgBF7uX+THzDuqd27aXJX1kcwFBDCXIs/ZMwq1mPsBU9TrprS0liWtKXhXm
J/8qWRUWZGVUVs4DwzN1+TeSKaN4q5nnGShjRj3iXY5Oodc5k09wbqhO6NVkXUbUZ1TQghYIy/bt
oPk5jG1FOyNC9r3+/FowDV1sipCIiJWgBh7P4i3Xwu5ac5P9vctW32rmLqAl7wF9h/k6HvHUo4xd
6GkKceCd25kcTDVTKvC6Zy3/UEmxF55gGeEEL8tgG1IIAAAxggIxMIICLQIBATB/MGsxCzAJBgNV
BAYTAkJFMRkwFwYDVQQKExBPcGVuUEVQUE9MIEFJU0JMMRYwFAYDVQQLEw1GT1IgVEVTVCBPTkxZ
MSkwJwYDVQQDEyBQRVBQT0wgQUNDRVNTIFBPSU5UIFRFU1QgQ0EgLSBHMgIQDCTcN1yJcdWd6utb
KTYhozAJBgUrDgMCGgUAoIGIMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkF
MQ8XDTE5MTEyMTA4MDgzOFowIwYJKoZIhvcNAQkEMRYEFKmBs7d9VEkSL3Oo6UaH3wUoM4JgMCkG
CSqGSIb3DQEJNDEcMBowCQYFKw4DAhoFAKENBgkqhkiG9w0BAQEFADANBgkqhkiG9w0BAQEFAASC
AQBy4ajH5c6ZmfllxNeXtqMdm4N5geM9KhpJLEEdkNYwD1EK2lBeK5rS4uJX8DMQRA5SsblUnsKO
rpxz134zJwMh8xhOxXERFm164s++8A+co38ftIjAvb5D1urZKUvn79h0fzQlIl2gU1lJVOaN/6nR
t/V4qAucBrmMpFf1gfhGdgfcBHHTdST+vffNhk76orDfUy1ImxeooeMc1hiiu5I/iNveES/Gp5s8
ltLpmXxc4R4cRz8CUAYaHzOesa8X2QpwrpK3fUMRd0xvpOSFXsw7dWXMUTPX3hhBOwxWCMQJEUSQ
sgShal1tyALPhJhCk2iNGYpA8JjEurPs6gK+vk6iAAAAAAAA
------=_Part_6_682736416.1574323717516--

发送到运行相同图像的 Google Cloud 服务:

as2-from: PSG000186
as2-version: 1.0
message-id: <1574323812231.2.1014381783.Oxalis@localhost>
as2-to: PSG000186
mime-version: 1.0
X-Cloud-Trace-Context: 60c1258ef2c1295b01a27e3633acc267;o=1
Date: Thu, 21 Nov 2019 08:10:12 GMT
Content-Type: text/html
Server: Google Frontend
Content-Length: 5045
Alt-Svc: quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000

------=_Part_6_1913495260.1574323812233
Content-Type: multipart/report; Report-Type=disposition-notification;
        boundary="----=_Part_4_1743408990.1574323812231"

------=_Part_4_1743408990.1574323812231
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

= Received headers

Date: Thu, 21 Nov 2019 08:10:10 +0000
message-id: <1574323810575.1.-368437367.Oxalis@fd713b389c13>
subject: AS2 message from Oxalis
MIME-Version: 1.0
Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-1; boundary="----=_Part_1_2065922950.1574323810605"
as2-version: 1.0
User-Agent: Oxalis 4.1.1-SNAPSHOT
X-Forwarded-Proto: https
Host: einvoice-sg-inbound-7tyhycme6a-an.a.run.app
Accept-Encoding: gzip,deflate
as2-from: PSG000186
x-cloud-trace-context: 60c1258ef2c1295b01a27e3633acc267/2200277044701127466;o=1
Forwarded: for="223.25.66.148";proto=https
X-Forwarded-For: 223.25.66.148
as2-to: PSG000186
disposition-notification-to: not.in.use@difi.no
disposition-notification-options: signed-receipt-protocol=required,pkcs7-signature; signed-receipt-micalg=required,sha1
Content-Length: 19479


------=_Part_4_1743408990.1574323812231
Content-Type: message/disposition-notification
Content-Transfer-Encoding: 7bit

Date: Thu, 21 Nov 2019 08:10:11 +0000
Reporting-UA: Oxalis 4.1.1-SNAPSHOT
Original-Recipient: rfc822; PSG000186
Final-Recipient: rfc822; PSG000186
Original-Message-ID: <1574323810575.1.-368437367.Oxalis@fd713b389c13>
X-Oxalis-Original-Content-Header: Q29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94bWwNCkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NA0KDQo=
Received-Content-Mic: yI4WRPi283i7xj5KOnRy3O+XCCU=, sha1
Disposition: automatic-action/MDN-sent-automatically; processed

------=_Part_4_1743408990.1574323812231--

------=_Part_6_1913495260.1574323812233
Content-Type: application/pkcs7-signature; name=smime.p7s; smime-type=signed-data
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: S/MIME Cryptographic Signature

MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIAwggXuMIID
1qADAgECAhAMJNw3XIlx1Z3q61spNiGjMA0GCSqGSIb3DQEBCwUAMGsxCzAJBgNVBAYTAkJFMRkw
FwYDVQQKExBPcGVuUEVQUE9MIEFJU0JMMRYwFAYDVQQLEw1GT1IgVEVTVCBPTkxZMSkwJwYDVQQD
EyBQRVBQT0wgQUNDRVNTIFBPSU5UIFRFU1QgQ0EgLSBHMjAeFw0xODExMTMwMDAwMDBaFw0yMDEx
MDIyMzU5NTlaMHsxEjAQBgNVBAMMCVBTRzAwMDE4NjEXMBUGA1UECwwOUEVQUE9MIFRFU1QgQVAx
PzA9BgNVBAoMNldvcmtmbG93IE1hbmFnZW1lbnQgJiBEb2N1bWVudCBDb25zdWx0aW5nIEFzaWEg
UHRlIEx0ZDELMAkGA1UEBhMCU0cwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC/Yy7Z
xvyujk8UE7xFXmfhFnWjox6CM6vRGWnPQ23ox59mC4mFFz7Ie9MAw2MdqWx01QI+xcyT8BKqPq9d
rSD44SFcFccaO3P81Q4jPGMDoljA40iqzCzJYoIdhJZEMIO7W7jyiRFak/OAB1xHh6UHfKnapZXa
wqXlHC8gyTHHGfZtFunL//e8lTYqMSFbRAega9caqbxUEsg2AqF4W2PtAoAHUtdVP/XkdEUCQ2Yl
gezvv0QFOazakjmaZzu1ZzKxplimMflktaH3OA8GfLMz2MoGo4zjk2s+yyDZr8SfXUfzQ5+/+WC5
FeZvnpTM4W2/Z1hfeQxc62CMBCUqkM+NAgMBAAGjggF8MIIBeDAMBgNVHRMBAf8EAjAAMA4GA1Ud
DwEB/wQEAwIDqDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDAjAdBgNVHQ4EFgQUXPzNhnbQGAEj+iwQ
45i5surQ6Y0wXQYDVR0fBFYwVDBSoFCgToZMaHR0cDovL3BraS1jcmwuc3ltYXV0aC5jb20vY2Ff
NmE5Mzc3MzRhMzkzYTA4MDViZjMzY2RhOGIzMzEwOTMvTGF0ZXN0Q1JMLmNybDA3BggrBgEFBQcB
AQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9wa2ktb2NzcC5zeW1hdXRoLmNvbTAfBgNVHSMEGDAW
gBRrb0u28Te6Kzx/GM26K7K5fCo36zAtBgpghkgBhvhFARADBB8wHQYTYIZIAYb4RQEQAQIDAQGB
qZDhAxYGOTU3NjA4MDkGCmCGSAGG+EUBEAUEKzApAgEAFiRhSFIwY0hNNkx5OXdhMmt0Y21FdWMz
bHRZWFYwYUM1amIyMD0wDQYJKoZIhvcNAQELBQADggIBAHS85wUs42jOXKGqIBditIeb8h8O+kW/
IVX++ChjLLJ+2jTQ4WJZ5cnvGmTwRwCe/Dvn2pKK5cuVz2pJyk33MrYmWsTdf8t3tgQqtS5Z11dz
OoycNDKc4pgZNdSp4lRgm4fEePjrEofm1eTFWadCOVcf1acHq1qVXUXpPn+5ek9HonPNFwXqQJGb
yF9nVE+U/Sd6/owZ9Y7w2CdvDuKrZ1NWw19wURaM0GrTJbq9/7Z+eb0vsMEItu5J/77QTzaPbIpJ
XrHTkCLlGu2Kc7wjmJv4nubxKf15yFnxnTDkgZcg0VUljaLoTaeIyWXwhXQuYVMMdbbl/HGVy2aH
WVtVOe0lOnhVbSPwq9IIsh/GfZ8DTyrEeK7iSwZ0Rgc9fuTvaAkdrwYHdvMxHuzEs3tI74yN6NFE
daFUOkFIt/+lJk6LPOgBF7uX+THzDuqd27aXJX1kcwFBDCXIs/ZMwq1mPsBU9TrprS0liWtKXhXm
J/8qWRUWZGVUVs4DwzN1+TeSKaN4q5nnGShjRj3iXY5Oodc5k09wbqhO6NVkXUbUZ1TQghYIy/bt
oPk5jG1FOyNC9r3+/FowDV1sipCIiJWgBh7P4i3Xwu5ac5P9vctW32rmLqAl7wF9h/k6HvHUo4xd
6GkKceCd25kcTDVTKvC6Zy3/UEmxF55gGeEEL8tgG1IIAAAxggIxMIICLQIBATB/MGsxCzAJBgNV
BAYTAkJFMRkwFwYDVQQKExBPcGVuUEVQUE9MIEFJU0JMMRYwFAYDVQQLEw1GT1IgVEVTVCBPTkxZ
MSkwJwYDVQQDEyBQRVBQT0wgQUNDRVNTIFBPSU5UIFRFU1QgQ0EgLSBHMgIQDCTcN1yJcdWd6utb
KTYhozAJBgUrDgMCGgUAoIGIMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkF
MQ8XDTE5MTEyMTA4MTAxMlowIwYJKoZIhvcNAQkEMRYEFOlYVvawoVrqV2FlIuOAuf1fjPE/MCkG
CSqGSIb3DQEJNDEcMBowCQYFKw4DAhoFAKENBgkqhkiG9w0BAQEFADANBgkqhkiG9w0BAQEFAASC
AQAKzAdDnumWOoOdHBzW65Br3zIoEBHyNYlgLtx1NoXp1ugq31fc/hdZ2G5l3V02tuYowAvtHOyl
WQFV1ghj9IeSjjYYqYNO1XwhRmkMC/xRXa0wL0bBrz2Fz7xmDTUgQx2JbWnqnB0yvf/F+n3kXGhA
nF0PtlNSW36XG6vn20NGEiNyRVRymK6QO7asAsV2H+p46zFEY28ehbX6U3211tP3jy992f76tQVo
0wMMH9vkP+Jgz1qZbCMF4VV51q7RNsmH+dqvA3EdYBIBGFm8cbiO/xOK5evLlMrw7y7m9XfSDmQ9
I1Mdtnjff8A65MWmUlhe7u/lAHGPLiUqzG0sTldRAAAAAAAA
------=_Part_6_1913495260.1574323812233--

编辑 3:

我在 cmets 中被要求提供响应的正文 - 并且在上面这样做了。但就我而言,就我所知,这应该无关紧要。如果我在处理请求后看到服务器端“Content-Type:foo/bar”,那么这就是我期望收到的。如果我首先在客户端上转储响应,那么它应该显示“Content-Type:foo/bar”。无论我发送 json、xml、多部分、二进制文件还是什么都不发送。如果我的内容是无意义的、格式是否正确:我希望云服务能够将我对服务的响应保持不变(忽略必要的工件,如额外的 X-headers 等)。

编辑 4:

为了绝对确保客户端没有什么奇怪的事情发生,或者它与请求本身的任何内容有某种关系,我创建了一个 curl 脚本(取出 java 客户端库)发布一个转储的请求正文(消除任何潜在的正文中的差异)具有来自相同转储请求的固定标头(甚至消除诸如“日期”之类的标头的更改以及生成的诸如多部分边界之类的东西)。

我使用 curl 运行二进制等效请求,针对我的本地 docker 映像(响应内容类型:多部分签名;..)和 Cloud Run(响应内容类型:text/html)。

响应之间的差异:

  • 本地使用http,云http2
  • 本地首先响应 HTTP 100 继续
  • Cloud 将大部分标题转换为小写
  • Cloud 将 Content-Type 更改为 text/html(问题)
  • 云注入各种基础设施相关的标头,因此响应略大

实际的 content 是相同的(忽略镜像/大小写错误的标题)。内容很好,标题搞砸了。

更新 5:

添加了 javamail 标记 - 也许有更多关于该 API 经验的人可以告诉我是否有办法避免标题折叠。

有问题的代码以here开头,Content-Type 标头设置为

Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-1;       boundary="----=_Part_14_175240407.1574354551085"

MimeMessage.save() here 之后。我无法遵循代码并理解 \t 字符的来源 - 以及原因。在我的回复中,我有多个多部分内容类型,其中大约一半有一个 \t,其中一半没有。

【问题讨论】:

  • 嘿@BenjaminPodszun,你能用更多信息编辑你的问题吗,比如:你在哪里返回提到的响应、日志、错误的代码 sn-p?
  • @MethkalKhalawi 响应由我正在部署的基于 Jetty 的开源项目返回。没有错误(除了客户端说“Erm,我真的期望多部分,而不是文本/html”)
  • 编辑您的问题以显示客户收到的所有内容,包括数据。创建一个发送少量数据的测试用例。我觉得奇怪的是您的多部分长度为 4849。GFE 返回的长度为 5038。由于插入了多部分标头,多部分大于数据流。我想查看text/html 数据。这里正在发生其他事情。附带说明一下,我从未在许多 Clo​​ud Run 部署(100+)中看到过这个问题,并且我故意编写代码试图破坏 Cloud Run,
  • 您的应用返回什么数据?这看起来像 S/MIME 第 3 版。包括要发送的每个部分的标头。
  • @JohnHanley 我现在更新了帖子 - 到目前为止,我无法将其简化为简单的“发送 'ok' with content-type and see it break”示例。共享确切的数据是有问题的,直到我将其减少为无害的东西 - 但我可以问为什么响应的内容/正文很重要?我期望我应该收到服务器发送的内容(由响应记录器验证并在本地运行图像时正确接收)是错误的吗?

标签: jakarta-mail google-cloud-run


【解决方案1】:

如果 Content-Type 设置为包含 0x01 和 0x19 之间的某些 ASCII 控制字符(包括制表符 0x09)的任何字符串,我能够重现将 Content-Type 替换为 text/html 的行为。您设置的 Content-Type 是否在“边界”一词之前包含一个选项卡?如果是这样,请查看是否可以用空格替换该选项卡。

【讨论】:

  • 我自己不生成标头,但让我尝试在我的请求过滤器中修改它。
  • 非常感谢您的帮助!我今天又看了一些。如果我没有完全错,那么在构建 MimeMessage 时,标头是由一些(可能是古老的)javax.mail 代码创建的。虽然我可以尝试为码头构建响应过滤器 - 我现在正在查看文档 - 这不是一个好的解决方案:我现在需要为此分叉项目。您能否澄清一下您是否将其称为 GCR 中的错​​误,以便让我了解这是否会在 ~near~ 未来消失?
  • RFC 7230 看来,空格 (0x20) 和制表符 (0x09) 都应允许在标头值中作为空白字符,因此我们将修改此类标头视为错误。
  • 我可以为此订阅任何更改日志/任何提要吗?要在修复时得到通知? issuetracker.google.com/issues/144880273 是跟踪它的好方法吗(你们是用它来分类/更新错误还是只在内部使用)?
猜你喜欢
  • 2021-07-31
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
  • 2022-10-05
  • 2019-07-04
  • 2020-01-06
相关资源
最近更新 更多