我正在Docker/Google运行中运行一个基于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它破坏了每一个期望..。正确的内容类型和完全打破多部分的反应.客户端不在我的控制之下,所以这是一个潜在的显示障碍,不幸的是只有在实际构建并部署到Cloud之后才出现。
不相信自己会在Google产品中发现一个bug,我现在在服务器上的jetty中添加了一个请求/响应日志。我的服务器最后看到的(查看传出响应)是:
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"当然,在客户端,这个内容类型会变成"text/html“。
据我所知,在这一点上,我没有办法改变任何东西(再说一次:相同的二进制文件,完全相同的Docker映像,在本地运行时,在相同的输入下不存在这种情况)。
我想知道,长篇内容类型,延续部分,是否打破了这里的东西?
1用琐碎的方法实现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服务:
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:
评论中请我提供答复的正文-并在上文这样做了。但不管我在乎什么,尽管我明白,这不重要。如果我在服务器端看到请求被处理后的“Content: foo/bar”,那么这就是我希望收到的。如果我首先将响应转储到客户机上,那么它应该显示“Content: foo/bar”。不管我是发送json,xml,多个部分,还是一个二进制文件,还是什么都不发送。如果我的内容是胡说八道,那么不管格式化是否正确:我希望云服务不会改变我对服务的响应(忽略必要的工件,比如额外的X头等等)。
编辑4:
为了确保客户端上没有任何奇怪的事情发生,或者它与请求本身中的任何内容都有某种关系,我创建了一个curl脚本(取出java客户机库),POSTing是一个转储请求体(消除了正文中的任何潜在差异),其中包含来自同一个转储请求的固定头(甚至消除了像'Date‘这样的标题中的更改,并生成了类似multipart边界之类的内容)。
我使用curl运行二进制等效请求,一次针对本地停靠者映像(响应内容-类型:multipart;..)和云运行(响应内容-类型: text/html)。
答复之间的差异:
实际的内容是相同的(忽略镜像/大小写损坏的标题)。内容很好,标题搞砸了。
更新5:
添加了javamail标记--也许对API有更多经验的人可以告诉我,是否有办法避免页眉折叠。
所讨论的代码启动这里,内容类型标头设置为
Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-1; boundary="----=_Part_14_175240407.1574354551085"在MimeMessage.save()在这里之后。我在跟踪代码和理解\t char来自何处以及原因时遇到了困难。在我的答复中,我有多个多部分内容类型,其中大约一半的内容内部有\t,一半没有。
发布于 2019-11-21 23:08:24
如果将Content设置为0x01至0x19之间包含某些ASCII控制字符的任何字符串,包括选项卡字符0x09,则我能够再现将Content替换为text/html的行为。您所设置的内容类型是否在单词“边界”之前包含一个选项卡?如果是,请查看是否可以用空格替换该选项卡。
https://stackoverflow.com/questions/58951943
复制相似问题