是否可以通过Google Cloud Run传递我的Content-Type?

问题描述 投票:0回答:1

我正在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: [email protected]
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: [email protected]
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-Type:foo / bar”,那么我希望收到该信息。如果我先将响应转储到客户端,则应显示“ Content-Type:foo / bar”。无论我发送json,xml,多部分,二进制文件还是什么都不发送。如果我的内容是胡扯的,那么格式是否正确:我希望云服务将我的响应保持不变,以中继该服务(忽略诸如附加X-头等必需的工件)。

编辑4:

为了绝对确保正在进行的客户端没有任何异常或与请求本身中的任何内容相关,我创建了一个curl脚本(删除了Java客户端库),发布了转储的请求正文(消除了任何潜在的差异)在正文中)具有来自相同转储请求的固定标头(甚至消除了标头(如“日期”)和生成的内容(如多部分边界)的变化)。

我使用curl运行二进制等效请求,一次针对我的本地docker映像(响应内容类型:multipart-signed; ..)和云运行(响应内容类型:text / html)。

回复之间的差异:

    本地使用http,云http2
  • 本地使用HTTP 100响应,请先继续
  • 云使大多数标题变为小写
  • 云将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"

[C0之后。我在遵循代码并理解\ t char的来源以及原因方面遇到了麻烦。在我的回复中,我有多个多部分内容类型,其中大约一半包含\ t,其中一半没有。

我正在Docker / Google Cloud Run中运行基于Java / jetty的应用程序。我正在发送的响应(除其他外)具有以下标头Content-Type:multipart / signed; ...内容长度:4849服务器:...

javamail google-cloud-run
1个回答
1
投票
如果Content-Type设置为包含0x01到0x19之间的某些ASCII控制字符(包括制表符0x09)的任何字符串,我可以重现用text / html替换Content-Type的行为。您要设置的Content-Type是否在“边界”一词前包含一个制表符?如果是这样,请查看是否可以用空格替换该选项卡。
© www.soinside.com 2019 - 2024. All rights reserved.