Am un API care ar trebui să folosească accept a site-ul web
antetul furnizat de client pentru a răspunde diferit în funcție de site-ul web pentru care este solicitată.
Am trecut acest antet pe lista albă în AWS Cloudfront. După înțelegerea mea, acest lucru ar trebui să însemne că Cloudfront îl include în cheia cache.
Când repet apeluri curl identice la punctul meu final, primesc rezultate diferite de la Cloudfront.
Antetele răspunsului indică întotdeauna o accesare în cache de la Cloudfront, dar corpul răspunsului este uneori pentru site-ul web greșit. Cu alte cuvinte, Cloudfront nu pare să includă antetul site-ului web în cheia cache și returnează corpul răspunsului pentru o cheie de cerere diferită.
Iată un exemplu de rezultat din scriptul de mai jos:
$ coada -f unu.txt
23245 - x-cache: Lovitură din cloudfront
56138 - x-cache: Lovitură din cloudfront
56138 - x-cache: Lovitură din cloudfront
56138 - x-cache: Lovitură din cloudfront
23245 - x-cache: Lovitură din cloudfront
Observați că „totalul” este diferit (aceasta este o cheie JSON în răspunsul pe care îl primesc)
Folosesc un script pentru a repeta apelurile, așa că mă aștept ca cererea să fie identică.
De ce Cloudfront returnează uneori răspunsul greșit?
Sunt sigur că originea returnează întotdeauna răspunsul corect pentru antetul site-ului. Am verificat acest lucru rulând scriptul meu împotriva originii fără Cloudfront în fața ei și, de asemenea, am verificat că originea mea nu este lovită atunci când rulez acest script împotriva Cloudfront.
Cum pot depana acest lucru în continuare? M-am gândit că poate aș putea folosi „via” pentru a vedea dacă un anumit nod de margine returnează întotdeauna un răspuns greșit, dar asta nu a funcționat.
#!/bin/bash
fișiere=(„unul-totals.txt” „două-totals.txt”)
pentru i în „${fișiere[@]}”
do
rm $i >& /dev/null
Terminat
callWebsiteOne () {
curl --location --request GET „https://my-api.example.com” \
--header „Autorizare: purtător 123abc” \
--header 'site: unul' \
-i > temp.txt
total=$(cat temp.txt | sed s/[^{]*// | jq -r .total)
edgenode=$(cat temp.txt | grep prin:)
echo $total " - " $edgenode >> one-edges.txt
echo $total >> one-totals.txt
rm temp.txt
}
callWebsiteTwo () {
curl --location --request GET „https://my-api.example.com” \
--header „Autorizare: purtător 123abc” \
--header 'site: două' \
-i > temp.txt
total=$(cat temp.txt | sed s/[^{]*// | jq -r .total)
edgenode=$(cat temp.txt | grep prin:)
echo $total " - " $edgenode >> doi.txt
echo $total >> două-totaluri.txt
rm temp.txt
}
callRandomWebsite (){
aleatoriu=$[RANDOM%4+1]
caz $aleatoriu în
1)
apelațiWebsiteOne
;;
2)
sunați pe site-ul webDoi
;;
esac
}
pentru valoarea în {1..100}
do
apelațiRandomWebsite
dormi 0,25 secunde
Terminat
pentru i în „${fișiere[@]}”
do
unic=$(sort $i | unic | wc -l)
total=$(cat $i | wc -l)
echo $i " are valori unice " $unique " în liniile totale " $total "
Terminat