Mopidy: Header respons CORS tidak ada untuk aset file statis

Dibuat pada 28 Des 2020  ·  7Komentar  ·  Sumber: mopidy/mopidy

Jelaskan bugnya
Handler file statis dari plugin http tidak memiliki header tambahan untuk Access-Control-Allow-* . Ini sudah dilakukan dengan benar untuk penangan JSON-RPC.
Masalahnya adalah tidak mungkin mengambil aset statis karena masalah CORS bahkan asal permintaan masuk daftar putih.

Cara memperbanyak
Pastikan domain yang Anda gunakan masuk daftar putih dalam konfigurasi:

[http]
allowed_origins = localhost:8080

Luncurkan klien, buka konsol, dan coba lakukan pengambilan aset yang Anda ketahui:

fetch('http://localhost:6080/local/feecccb956b1764b8245244611a61e15-600x600.jpeg')

Ini akan memberikan kesalahan jenis berikut:

Access to fetch at 'http://localhost:6680/data/local/feecccb956b1764b8245244611a61e15-600x600.jpeg' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

Perilaku yang diharapkan
Permintaan lintas asal harus berfungsi untuk aset statis jika asal permintaan masuk daftar putih.

Lingkungan
Harap lengkapi informasi berikut:

  • Sistem operasi: 5.9.4-arch1-1
  • Menjalankan Mopidy sebagai layanan atau di terminal? service
  • Konfigurasi Anda (output dari sudo mopidyctl config ): perintah gagal
  • Versi perangkat lunak (output dari sudo mopidyctl deps ): perintah gagal

Konteks tambahan
Saya pikir masalah ini seharusnya cukup mudah untuk dipecahkan dengan memperluas fungsi set_extra_headers() dari StaticFileHandler seperti yang sudah dilakukan di sini . Apakah itu benar?

C-bug A-http good first issue

Komentar yang paling membantu

Saya pikir ini adalah perbaikan yang cukup terisolasi tetapi ya, memang perlu melihat Tornado jadi jangan khawatir, terima kasih telah melaporkannya.

Semua 7 komentar

Sayangnya header Access-Control-Allow-Origin hanya mengizinkan satu nilai. Ini menjadi sedikit lebih rumit ketika kami ingin mendukung banyak nilai dari daftar yang kami konfigurasikan:

Membatasi kemungkinan nilai Access-Control-Allow-Origin ke kumpulan asal yang diizinkan memerlukan kode di sisi server untuk memeriksa nilai header permintaan Asal, membandingkannya dengan daftar asal yang diizinkan, dan kemudian jika nilai Asal ada di daftar, untuk mengatur nilai Access-Control-Allow-Origin ke nilai yang sama dengan nilai Origin.

Dan itu bahkan lebih buruk karena, seperti yang saya pahami, Anda tidak dapat mengandalkan mereka sebagai tajuk permintaan Asal kecuali jika itu adalah permintaan CORS . Dan Anda juga tidak dapat mengandalkan adanya tajuk Referer untuk tidak ada permintaan HTTPS (yang akan menjadi tajuk alternatif untuk digunakan). Inilah yang menyebabkan kode perlindungan CSRF cukup rumit yang memastikan semuanya melakukan tarian CORS preflight (catatan: Saya pikir ini telah berubah dan semua POST browser sekarang mendapatkan header Origin?). Keraguan kami ingin itu di sini.

Karena StaticFileHandler hanya berurusan dengan permintaan GET 'aman', mungkin boleh saja mengatur header respons "Access-Control-Allow-Origin: *"?

Memikirkan hal ini lebih lanjut (meskipun tidak ingin), aman untuk mengatakan bahwa browser apa pun yang terkait dengan penegakan kebijakan CORS akan mengirimkan header Origin. Jadi kita bisa melakukan check_origin() kondisional berdasarkan header Origin yang disetel, dan kemudian jika diizinkan, salin nilai header ke header respons Access-Control-Allow-Origin seperti biasa. Jika tidak ada header Origin, perilaku kita tidak akan berubah.

Memikirkan hal ini lagi (walaupun tidak ingin)

Maafkan saya. :tidak melihat kejahatan:


Oke, jadi apa yang spesial dari aset statis? Mengapa kita tidak bisa menggunakan kembali semua logika keren yang sudah ada. Maksud saya semua pemeriksaan untuk header Origin dll pp sudah ada jika saya tidak salah. Tidak bisakah kita menggunakannya untuk mengatur tajuk secara kondisional? :pemikiran:

Hanya saja permintaan GET dan kebijakan CORS tidak sama dengan perlindungan CRSF untuk metode 'tidak aman' dengan efek samping seperti POST. Mereka adalah masalah yang berbeda dan solusinya tidak persis sama.

Tapi kami dapat menggunakan kembali sebagian besar ya, itulah yang saya coba katakan di pesan ke-2 saya.

Apakah pesan terakhir saya masuk akal? Apakah Anda suka menerapkan perbaikan atau haruskah saya menambahkannya ke daftar hal yang harus dilakukan?

Ya itu masuk akal. :senyum:

Akan lebih keren jika Anda bisa menambahkannya ke daftar. Meskipun saya dapat melihat ke dalam kode dan memahami apa yang hilang, saya memiliki terlalu sedikit pengetahuan tentang kerangka kerja yang digunakan di sini dan apa yang harus saya urus. Maaf. :tidak melihat kejahatan:

Saya pikir ini adalah perbaikan yang cukup terisolasi tetapi ya, memang perlu melihat Tornado jadi jangan khawatir, terima kasih telah melaporkannya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

kingosticks picture kingosticks  ·  12Komentar

simonsmiley picture simonsmiley  ·  9Komentar

flyingrub picture flyingrub  ·  15Komentar

ecoCuyo picture ecoCuyo  ·  3Komentar

jodal picture jodal  ·  13Komentar