У меня есть API, который должен использовать accept a Веб-сайт
заголовок, предоставленный клиентом, чтобы отвечать по-разному в зависимости от того, для какого веб-сайта запрашивается.
Я внес этот заголовок в белый список в AWS Cloudfront. Насколько я понимаю, это должно означать, что Cloudfront включает его в ключ кеша.
Когда я повторяю одинаковые вызовы curl на свою конечную точку, я получаю разные результаты от Cloudfront.
Заголовки ответов всегда указывают на попадание в кэш из Cloudfront, но тело ответа иногда относится не к тому веб-сайту. Другими словами, Cloudfront не включает заголовок веб-сайта в ключ кеша и возвращает текст ответа для другого ключа запроса.
Вот пример вывода скрипта ниже:
$ хвост -f one.txt
23245 - x-cache: попадание из облака
56138 - x-cache: попадание из облака
56138 - x-cache: попадание из облака
56138 - x-cache: попадание из облака
23245 - x-cache: попадание из облака
Обратите внимание, что «всего» отличается (это ключ JSON в ответе, который я получаю)
Я использую скрипт для повторения вызовов, поэтому я ожидаю, что запрос будет идентичным.
Почему Cloudfront иногда возвращает неверный ответ?
Я уверен, что источник всегда возвращает правильный ответ для заголовка веб-сайта. Я проверил это, запустив свой скрипт в источнике без Cloudfront перед ним, и я также убедился, что мой источник не срабатывает, когда я запускаю этот скрипт в Cloudfront.
Как я могу отладить это дальше? Я подумал, что, возможно, я мог бы использовать «через», чтобы увидеть, всегда ли один конкретный пограничный узел возвращает неправильный ответ, но это не сработало.
#!/бин/баш
files=("один итог.txt" "два итога.txt")
для i в "${files[@]}"
делать
rm $i >& /dev/null
сделано
callWebsiteOne () {
curl --location --request ПОЛУЧИТЬ 'https://my-api.example.com' \
--header 'Авторизация: Bearer 123abc' \
--header 'веб-сайт: один' \
-i > temp.txt
total=$(cat temp.txt | sed s/[^{]*// | jq -r .total)
edgenode=$(cat temp.txt | grep через:)
echo $total "-" $edgenode >> one-edges.txt
echo $total >> один-totals.txt
rm temp.txt
}
callWebsiteTwo () {
curl --location --request ПОЛУЧИТЬ 'https://my-api.example.com' \
--header 'Авторизация: Bearer 123abc' \
--header 'веб-сайт: два' \
-i > temp.txt
total=$(cat temp.txt | sed s/[^{]*// | jq -r .total)
edgenode=$(cat temp.txt | grep через:)
echo $total "-" $edgenode >> two.txt
echo $total >> два-totals.txt
rm temp.txt
}
callRandomWebsite (){
случайный=$[СЛУЧАЙНЫЙ%4+1]
случай $ случайный в
1)
callWebsiteOne
;;
2)
callВеб-сайтДва
;;
эсак
}
для значения в {1..100}
делать
callRandomВеб-сайт
сон 0,25 с
сделано
для i в "${files[@]}"
делать
уникальный=$(сортировка $i | uniq | wc -l)
всего=$(кот $i | wc -l)
echo $i " имеет " $unique " уникальные значения в " $total " общее количество строк"
сделано