ฉันมี API ที่ควรใช้ยอมรับ a เว็บไซต์
ส่วนหัวที่จัดทำโดยไคลเอนต์เพื่อตอบสนองแตกต่างกันไปขึ้นอยู่กับเว็บไซต์ที่ร้องขอ
ฉันได้อนุญาตส่วนหัวนี้ใน AWS Cloudfront แล้ว ตามความเข้าใจของฉัน นี่ควรหมายความว่า Cloudfront รวมไว้ในคีย์แคช
เมื่อฉันเรียก curl ที่เหมือนกันซ้ำๆ ไปยังปลายทาง ฉันจะได้รับผลลัพธ์ที่แตกต่างจาก Cloudfront
ส่วนหัวของการตอบสนองจะระบุการเข้าชมแคชจาก Cloudfront เสมอ แต่บางครั้งเนื้อหาการตอบสนองนั้นใช้สำหรับเว็บไซต์ที่ไม่ถูกต้อง กล่าวอีกนัยหนึ่ง Cloudfront ดูเหมือนจะไม่รวมส่วนหัวของเว็บไซต์ในรหัสแคชและส่งคืนเนื้อหาการตอบสนองสำหรับรหัสคำขออื่น
นี่คือตัวอย่างเอาต์พุตจากสคริปต์ด้านล่าง:
$ หาง -f one.txt
23245 - x-cache: เข้าชมจาก cloudfront
56138 - x-cache: เข้าชมจาก cloudfront
56138 - x-cache: เข้าชมจาก cloudfront
56138 - x-cache: เข้าชมจาก cloudfront
23245 - x-cache: เข้าชมจาก cloudfront
โปรดสังเกตว่า "ผลรวม" นั้นแตกต่างกัน (นี่คือคีย์ JSON ในการตอบกลับที่ฉันได้รับกลับมา)
ฉันใช้สคริปต์เพื่อโทรซ้ำ ดังนั้นฉันคาดว่าคำขอจะเหมือนกัน
เหตุใด Cloudfront จึงตอบกลับผิดในบางครั้ง
ฉันแน่ใจว่าต้นทางส่งคืนคำตอบที่ถูกต้องสำหรับส่วนหัวของเว็บไซต์เสมอ ฉันได้ตรวจสอบสิ่งนี้ด้วยการเรียกใช้สคริปต์ของฉันกับต้นทางโดยไม่มี Cloudfront อยู่ข้างหน้า และฉันได้ยืนยันด้วยว่าต้นทางของฉันไม่โดนโจมตีเมื่อฉันเรียกใช้สคริปต์นี้กับ Cloudfront
ฉันจะแก้ปัญหานี้ต่อไปได้อย่างไร ฉันคิดว่าบางทีฉันอาจใช้ "ผ่าน" เพื่อดูว่าโหนดขอบใดโหนดหนึ่งส่งคืนการตอบสนองที่ไม่ถูกต้องอยู่เสมอ แต่ก็ไม่ได้ผล
#!/bin/bash
ไฟล์=("หนึ่ง-totals.txt" "สองผลรวม.txt")
สำหรับฉันใน "${files[@]}"
ทำ
rm $i >& /dev/null
เสร็จแล้ว
callWebsiteOne () {
curl --location --request GET 'https://my-api.example.com' \
--ส่วนหัว 'การอนุญาต: Bearer 123abc' \
--ส่วนหัว 'เว็บไซต์: หนึ่ง' \
-i > temp.txt
รวม=$(cat temp.txt | sed s/[^{]*// | jq -r .total)
edgenode=$(cat temp.txt | grep ผ่าน :)
echo $total " - " $edgenode >> one-edges.txt
echo $total >> one-totals.txt
rm temp.txt
}
callWebsiteTwo () {
curl --location --request GET 'https://my-api.example.com' \
--ส่วนหัว 'การอนุญาต: Bearer 123abc' \
-- ส่วนหัว 'เว็บไซต์: สอง' \
-i > temp.txt
รวม=$(cat temp.txt | sed s/[^{]*// | jq -r .total)
edgenode=$(cat temp.txt | grep ผ่าน :)
echo $total " - " $edgenode >> two.txt
echo $total >> two-totals.txt
rm temp.txt
}
โทรสุ่มเว็บไซต์ (){
สุ่ม=$[สุ่ม%4+1]
กรณี $random in
1)
โทรเว็บไซต์หนึ่ง
;;
2)
โทรเว็บไซต์สอง
;;
เอสแซค
}
สำหรับมูลค่าใน {1..100}
ทำ
โทรสุ่มเว็บไซต์
นอน0.25วิ
เสร็จแล้ว
สำหรับฉันใน "${files[@]}"
ทำ
ไม่ซ้ำกัน = $ (เรียง $i | uniq | wc -l)
รวม = $ (แมว $i | wc -l)
echo $i " มี " $unique " ค่าเฉพาะใน " $total " รวมบรรทัด"
เสร็จแล้ว