NGINX add_header เพิ่มหลายส่วนหัว


21

ฉันกำลังพยายามส่งหลายหัว

add_header Access-Control-Allow-Origin http://dev.anuary.com;
add_header Access-Control-Allow-Origin https://dev.anuary.com;

อย่างไรก็ตามแทนที่จะเป็น NGINX

Access-Control-Allow-Origin: http://dev.anuary.com, https://dev.anuary.com

ทางออกคืออะไร?

คำตอบ:


28

ใช่แล้ว nginx กำลังรวมส่วนหัวที่มีชื่อเหมือนกัน แต่ก็เป็นไปตาม HTTP spec ส่วนดู 4.2

ส่วนหัว:

Access-Control-Allow-Origin: http://dev.anuary.com, https://dev.anuary.com

ตามข้อมูลจำเพาะ HTTP / 1.1 เทียบเท่ากับหน้าที่:

Access-Control-Allow-Origin: http://dev.anuary.com
Access-Control-Allow-Origin: https://dev.anuary.com

หากคุณมีระบบหรือแอพพลิเคชั่นที่สามารถอ่านรูปแบบหนึ่งได้และไม่ใช่รูปแบบอื่นแสดงว่าเป็นปัญหา nginx ทำถูกต้องแล้ว


แก้ไข :

เอกสาร Mozillaระบุว่ามีเพียงสามารถเป็นหนึ่งในAccess-Control-Allow-Originหัว

การจัดรูปแบบของมัน ( ดูที่นี่ ) ควรเป็นรายการที่คั่นด้วยช่องว่างของต้นกำเนิด:

add_header Access-Control-Allow-Origin "http://dev.anuary.com https://dev.anuary.com";

แต่จริงๆแล้วคุณควรจะสะท้อนOriginส่วนหัวที่ได้รับจากลูกค้าแทนที่จะสร้างหนึ่งจากสีน้ำเงิน นี่น่าจะเหมาะสมกว่า:

if ($http_origin ~* "^https?://dev\.anuary\.com$" ) {
    add_header Access-Control-Allow-Origin $http_origin;
}

อย่างหลังอันนี้ใช้ไม่ได้กับ FireFox 9 หรือเวอร์ชั่นอื่น ๆ ซึ่งเป็นปัญหา
Gajus

1
@ ซื้อหรือไม่ควร ดูการแก้ไข
เชนแมดเดน

หมายเหตุ:หากการแก้ปัญหาที่ได้รับไม่ได้ทำงานให้คุณอ่านนี้และนี้ มันเป็นความสว่างและคุณอาจพบเหตุผลที่มันไม่ทำงาน
its_me

สามารถควบคุมค่าของ Access-Control-Allow-Origin ได้หรือไม่?
haxpanel

คุณจะช่วยขยายตัวอย่างของคุณไปที่จุดกำเนิดหลายจุด (เช่นhttp://example.comและhttp://localhost:3000) ได้ไหม
Augustin Riedinger


-1

ฉันประสบปัญหาเดียวกันกับหลายโดเมนย่อยในเครือข่ายของฉันพยายามเข้าถึงทรัพยากรและnginxตั้งค่าไม่ถูกต้อง นี่คือวิธีที่ฉันแก้ไขมัน

add_header Access-Control-Allow-Origin https://*.your-domain-name.com;

ฉันหวังว่านี่จะช่วยได้.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.