Gitlab keep sending webhook with same content over and over

I set a webhook triggered by merge request events.
My endpoint always send a response within 2 seconds, but gitlab keep sending the same webhook request (mostly send 4 additional request with nearly 1 min interval after merge request webhook is triggered).
On the other hand, if my response time longer than 10 seconds, which is the default timeout, Gitlab didn’t resend the webhook.

Did I missed some important detail or it’s bug?

Here’s the screenshot of webhooks

The first webhook is timeout but Gitlab didn’t retry.

The other 5 webhooks’ content are all the same, and I always response within 2 seconds with following details:

Response headers:
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
X-Xss-Protection: 1; mode=block
Content-Security-Policy: form-action 'self'; frame-ancestors 'self'; base-uri 'self'; default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self' https: data:; style-src 'self' 'unsafe-inline' https:; font-src 'self'; object-src 'none'; plugin-types application/pdf; child-src 'self'; frame-src 'self'; media-src 'self'
Content-Type: application/json; charset=utf-8
Connection: close
Content-Length: 21
Response body:

all integration done!