ฉันจะตั้งค่า CORS ได้อย่างไร


12

Drupal 8 มีบริการเว็บสงบในการสร้างขึ้นในหลักและตั้งแต่ 8.2 เราไม่จำเป็นต้องโมดูลล

ตอนนี้เพื่อใช้บริการเราเพิ่งเปิดใช้งานและกำหนดค่าไฟล์ default.service.yml ตามที่ระบุไว้ที่นี่

อย่างไรก็ตามฉันไม่สามารถกำหนดค่าการตั้งค่านี้เพื่ออนุญาตการเข้าถึงบริการเว็บผ่านโดเมนอื่น

การตั้งค่า service.yml ปัจจุบันของฉันสำหรับ cors คือ:

cors.config:
    enabled: true
    # Specify allowed headers, like 'x-allowed-header'.
    allowedHeaders: ['x-csrf-token,authorization,content-type,accept,origin,x-requested-with']
    # Specify allowed request methods, specify ['*'] to allow all possible ones.
    allowedMethods: ['POST, GET, OPTIONS, DELETE, PUT']
    # Configure requests allowed from specific origins.
    allowedOrigins: ['*']
    # Sets the Access-Control-Expose-Headers header.
    exposedHeaders: false
    # Sets the Access-Control-Max-Age header.
    maxAge: 1000
    # Sets the Access-Control-Allow-Credentials header.
    supportsCredentials: false

ฉัน googled เพื่อหารายละเอียดเพิ่มเติมเกี่ยวกับการตั้งค่านี้ แต่ไม่สามารถหาได้

ฉันกำลังสร้างสิ่งนี้สำหรับการพัฒนาทดสอบในสองโดเมนที่ต่างกัน

การใช้สภาพแวดล้อม pantheon dev สำหรับเว็บเซอร์วิสและโดเมน. local แบบกำหนดเอง localhost สำหรับการใช้บริการเหล่านั้น

การเข้าถึงบริการทำงานได้ดีโดยใช้ส่วนขยาย chrome CORS


หากคุณเปลี่ยนไซต์ / default / services.yml ของคุณแล้วตามคำตอบก่อนหน้านี้และไม่ได้ผลตรวจสอบให้แน่ใจว่า CORS เปิดใช้งานในเว็บเซิร์ฟเวอร์ของคุณ ตัวอย่างเช่นใน Nginx คุณต้องเพิ่ม / แก้ไขตำแหน่งในการกำหนดค่าบล็อกเซิร์ฟเวอร์ของคุณดูhttps://enable-cors.org/server_nginx.html
ตรึง

คำตอบ:


16

ฉันวิ่งเข้าหา Pantheon เมื่อไม่นานมานี้และหวังว่าจะช่วยได้ถ้าคุณยังไม่ได้แก้ไข

cors.config:
    enabled: true
    # Specify allowed headers, like 'x-allowed-header'.
    allowedHeaders: ['x-csrf-token','authorization','content-type','accept','origin','x-requested-with', 'access-control-allow-origin','x-allowed-header','*']
    # Specify allowed request methods, specify ['*'] to allow all possible ones.
    allowedMethods: ['*']
    # Configure requests allowed from specific origins.
    allowedOrigins: ['http://localhost/','http://localhost:3000','http://localhost:3001','http://localhost:3002','*']
    # Sets the Access-Control-Expose-Headers header.
    exposedHeaders: false
    # Sets the Access-Control-Max-Age header.
    maxAge: false
    # Sets the Access-Control-Allow-Credentials header.
    supportsCredentials: true

สิ่งที่ควรทราบ ...

เกี่ยวกับตำแหน่งของไฟล์ใน Pantheon โปรดตรวจสอบว่าไฟล์ service.yml ของคุณอยู่ใน / sites / default เทียบกับ just / sites ฉันผิดภายใต้ความประทับใจว่ามันจะทำงานได้จากทั้งสองแห่ง มันจะทำงานเฉพาะในไดเรกทอรี / sites / default

สังเกตเห็นรายการที่ได้รับอนุญาตคั่นด้วยเครื่องหมายจุลภาคแต่ละหัวในชุดราคาของตนเอง ฉันมีสตริงเดียวเหมือนที่คุณทำในตัวอย่างข้างต้นและมันล้มเหลวนับไม่ถ้วนก่อนที่ฉันจะพบความแตกต่างที่ลึกซึ้ง ฉันได้รับอนุญาตอย่างเป็นธรรมวิธีการทำงานในลักษณะเดียวกันหากคุณต้องการแสดงรายการวิธีการของคุณโดยเฉพาะ

โปรดทราบว่าในขณะที่ข้อมูลโค้ดของฉันจะทำงานได้ดีสำหรับการพัฒนาเทียบกับ Sandbox ของ Pantheon คุณอาจต้องการล็อคสิ่งต่าง ๆ ลงอีกเล็กน้อยก่อนที่จะเริ่มผลิต ด้วย Pantheon ที่เสนอ HTTPS คุณจะต้องแน่ใจว่าได้ใช้มันหากคุณกำลังจะส่งผ่านข้อมูลไปยังส่วนหัว หวังว่าสิ่งนี้จะช่วยคุณได้ถ้าคุณยังมีปัญหาหรือคนอื่นที่สะดุดลงไปตามถนน


4
ทำไมต้องระบุ AllowOrigins จากนั้นจึงส่ง '*' ด้วย
Christian

เพียงเพื่อแสดงตัวเลือกทั้งสอง โปรดละไว้อย่างใดอย่างหนึ่ง
Shawn Matthews

เปิดเผยผู้อ่านควรเป็นเท็จหรืออาร์เรย์ต่อdrupal.org/project/drupal/issues/2905848
John

หากใครสนใจฉันไม่เชื่อว่าฟิลด์ที่อนุญาตให้รับ Regex ฉันพยายามใช้รูปแบบ regex เพื่ออนุญาตโดเมนย่อยหลายโดเมนและอนุญาตให้ drupal บ่น ฉันต้องใช้รายการโดเมนที่ชัดเจนคั่นด้วยเครื่องหมายจุลภาคเช่นในตัวอย่างนี้ ฉันหวังว่ามันจะทำงานเหมือนการตั้งค่าโฮสต์ที่ไว้ใจได้ใน settings.php
Tony Stecca

9

ค้นหา: ... / sites / default / default.services.yml

ทำสำเนาและเปลี่ยนชื่อสำเนาเป็น:

... / เว็บไซต์ / default / services.yml

ค้นหาส่วนนี้ของรหัส: cors.config: enabled: false

และแทนที่ด้วย - cors.config: enabled: true

ล้างแคช


ฉันควรพยายามทุกอย่างจนเห็นคำตอบของคุณขอบคุณสำหรับการแสดงจุดที่สำคัญที่สุดซึ่งเป็นล้างแคช (REBUILD Cache): D
Emy

3

การตั้งค่าต่อไปนี้ใช้งานได้สำหรับฉัน

cors.config:
  enabled: true
  # Specify allowed headers, like 'x-allowed-header'.
  allowedHeaders: ['x-csrf-token','authorization','content-type','accept','origin','x-requested-with']
  # Specify allowed request methods, specify ['*'] to allow all possible ones.
  allowedMethods: ['*']
  # Configure requests allowed from specific origins.
  allowedOrigins: ['*']
  # Sets the Access-Control-Expose-Headers header.
  exposedHeaders: false
  # Sets the Access-Control-Max-Age header.
  maxAge: false
  # Sets the Access-Control-Allow-Credentials header.
  supportsCredentials: false

0

exposedHeaders: true ไม่ถูกต้องและจะทำให้เกิดคำเตือน: implode (): อาร์กิวเมนต์ไม่ถูกต้องถูกส่งผ่านใน Asm89 \ Stack \ CorsService-> addActualRequestHeaders () (สาย 94 จาก / ผู้ขาย / asm89 / stack-cors / src / Asm89 / Stack / CorsService php) # 0 /web/core/includes/bootstrap.inc(584) มันต้องเป็นเท็จหรืออาร์เรย์ที่มีส่วนหัวที่ได้รับอนุญาตให้แสดงให้เห็นhttps://developer.mozilla.org/en-US/docs/Web/ HTTP / หัว / ควบคุมการเข้าถึง-เปิดเผย-ส่วนหัว

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