ส่งคืน“ 200 OK” ใน Apache บนคำขอ HTTP OPTIONS


12

ฉันพยายามใช้การควบคุมการเข้าถึง HTTPข้ามโดเมนโดยไม่ต้องแตะรหัสใด ๆ

ฉันมีเซิร์ฟเวอร์ Apache (2) ของฉันคืนส่วนหัวการควบคุมการเข้าถึงที่ถูกต้องด้วยบล็อกนี้:

Header set Access-Control-Allow-Origin "*"                   
Header set Access-Control-Allow-Methods "POST, GET, OPTIONS" 

ตอนนี้ผมต้องป้องกันไม่ให้ Apache จากการดำเนินการรหัสของฉันเมื่อเบราว์เซอร์ส่งHTTP OPTIONSคำขอ (มันเก็บไว้ในREQUEST_METHODตัวแปรสภาพแวดล้อม) 200 OKกลับ

ฉันจะกำหนดค่า Apache ให้ตอบสนอง "200 OK" เมื่อวิธีการร้องขอเป็นตัวเลือกได้อย่างไร

ฉันได้ลองmod_rewriteบล็อกนี้แล้ว แต่ส่วนหัวการควบคุมการเข้าถึงหายไป

RewriteEngine On                  
RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ $1 [R=200,L]       

คำตอบ:


12

คุณกำลังเพิ่มส่วนหัวในการตอบกลับที่ไม่สำเร็จ (ไม่ใช่ 2xx) เช่นการเปลี่ยนเส้นทางซึ่งในกรณีนี้จะใช้เฉพาะตารางที่สอดคล้องกับเสมอในการตอบกลับขั้นสุดท้าย

แก้ไข "ชุดส่วนหัว":

Header always set Access-Control-Allow-Origin "*"                   
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS"

7

หากคุณตั้งค่าไดเรกทอรีสำหรับการเข้าถึงที่ผ่านการรับรองความถูกต้องเบราว์เซอร์เช่น Chrome และ Safari (อาจเป็นคนอื่นด้วย) จะส่งคำขอ OPTIONS ที่ไม่น่าจะเป็นไปก่อนการโทร XmlHttpRequest เสมอซึ่งจะได้รับ 401 และล้มเหลวหากเราไม่ได้ตั้งค่า เพื่ออนุญาตให้ใช้วิธี OPTIONS โดยไม่ต้องมีการตรวจสอบสิทธิ์ นั่นทำให้ฉันสับสนเป็นเวลา 2 วันและนั่นเป็นข้อมูล "ความลับ" ที่ผู้ดูแลเว็บเก็บเป็นความลับฉันเดา! อย่างไรก็ตามฉันได้กำหนดค่า. htaccess เช่นนี้และตอนนี้ก็ใช้งานได้:

AuthUserFile <path to password file>
AuthName "Thou shalt not pass!"
AuthType Basic
Options -Indexes
<LimitExcept OPTIONS>
  Require valid-user
</LimitExcept>

จากนั้นคุณต้องตั้งค่าส่วนหัวอย่างถูกต้องในสคริปต์ PHP


1
บรรทัดสุดท้ายนั้นสำคัญ หากเว็บเซอร์วิสไม่สามารถจัดการกับOPTIONSคำร้องขอได้คุณจะได้รับข้อผิดพลาด 404
2297366

7

บางครั้งแอปนี้ช่วยได้:

<IfModule mod_headers.c>
    Header add Access-Control-Allow-Origin "*"
    Header add Access-Control-Allow-Headers "origin, content-type"
    Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
</IfModule>

RewriteEngine On                  
RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ blank.html [QSA,L]

มันมีประโยชน์เมื่อคุณมีเซิร์ฟเวอร์เหมือนอาปาเช่


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