Я написал набор тестов, использующих mocha (6.2.2), chai (4.2.0) и chai-http (4.3.0) для тестирования написанного нами микро-сервиса. Иногда заголовок ETag, который мы добавляем сами (сначала удаляя заголовок 'Express' с помощью прослушивателя on-headers), не появляется в ответе, полученном на вызов chai.request. Наблюдения:
- если тесты выполняются на том же хосте, что и микросервис, полученные ответы ВСЕГДА будут иметь требуемый заголовок ETag;
- , если тесты выполняются на другом на хосте микро-службы полученный ответ будет ИНОГДА иметь заголовок ETag;
- тесты, которые не пройдены из-за отсутствия заголовков ETag, всегда одинаковы (даже если код в значительной степени одинаков);
- Удар по конечным точкам REST микро-сервиса с помощью POSTMAN ВСЕГДА правильно возвращает ответ с заголовком ETag;
Из наблюдений я вполне уверен, что наш микро-сервис в порядке.
С здесь ,
Примечание. При работе в веб-браузере политика одного и того же происхождения позволяет Chai HTTP читать только определенные заголовки, что может привести к утверждению сбой.
(Хотя мы не работаем в браузере, я думаю, что принцип все еще действует). Я попытался добавить заголовок access-control-expose-headers к ответу микросервиса (который включает etag), но это не решает проблему.
Я предполагаю, что это проблема CORS другие возможности: chai-http не нравится значение etag; пример отсутствующего etag:
166-Kd4TGzdykcFKsmm2U4aTYxewdzA
Однако добавление произвольных заголовков, таких как 'Blah' с этим значением, всегда приводит к присутствию заголовка ...
Ответы включают следующее Заголовки CORS:
{
"server":"openresty/1.15.8.2",
"date":"Tue, 24 Mar 2020 13:21:37 GMT",
"content-type":"application/json; charset=utf-8",
"transfer-encoding":"chunked",
"connection":"close",
"vary":"Accept-Encoding",
"strict-transport-security":"max-age=15724800; includeSubDomains",
"x-powered-by":"Express",
"access-control-allow-origin":"*",
"access-control-expose-headers":"ETag,.....",
"access-control-allow-credentials":"true",
"access-control-allow-methods":"PUT, GET, POST, OPTIONS, DELETE",
"content-encoding":"gzip"
}
(я также пытался добавить заголовки access-control-allow-headers, но, похоже, они установлены неправильно: хотя я не думаю, что они актуальны здесь).
Мне было бы интересно, если кто-нибудь сталкивался с подобными проблемами с chai-http / ETag / CORS и придумал решение ??
Майк Бил