Saya kesulitan mendapatkan permintaan CORS lintas domain untuk bekerja dengan benar menggunakan Chrome.
Minta Header:
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:origin, content-type
Access-Control-Request-Method:POST
Connection:keep-alive
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4
Header respons:
Access-Control-Allow-Headers:*
Access-Control-Allow-Origin:*
Allow:GET, POST, OPTIONS
Content-Length:0
Date:Tue, 30 Oct 2012 20:04:28 GMT
Server:BaseHTTP/0.3 Python/2.7.3
Kesalahan:
XMLHttpRequest cannot load domain. Request header field Content-Type is not allowed by Access-Control-Allow-Headers.
Dan kode python yang melayani permintaan opsi adalah:
self.send_response(200)
self.send_header('Allow', 'GET, POST, OPTIONS')
self.send_header('Access-Control-Allow-Origin', '*')
self.send_header('Access-Control-Allow-Headers', '*')
self.send_header('Content-Length', '0')
self.end_headers()
Sepertinya karakter Access-Control-Allow-Origin
pengganti sedang diabaikan?
Header CORS tersebut tidak mendukung
*
sebagai nilai, satu-satunya cara adalah menggantinya*
dengan ini:Accept, Accept-CH, Accept-Charset, Accept-Datetime, Accept-Encoding, Accept-Ext, Accept-Features, Accept-Language, Accept-Params, Accept-Ranges, Access-Control-Allow-Credentials, Access-Control-Allow-Headers, Access-Control-Allow-Methods, Access-Control-Allow-Origin, Access-Control-Expose-Headers, Access-Control-Max-Age, Access-Control-Request-Headers, Access-Control-Request-Method, Age, Allow, Alternates, Authentication-Info, Authorization, C-Ext, C-Man, C-Opt, C-PEP, C-PEP-Info, CONNECT, Cache-Control, Compliance, Connection, Content-Base, Content-Disposition, Content-Encoding, Content-ID, Content-Language, Content-Length, Content-Location, Content-MD5, Content-Range, Content-Script-Type, Content-Security-Policy, Content-Style-Type, Content-Transfer-Encoding, Content-Type, Content-Version, Cookie, Cost, DAV, DELETE, DNT, DPR, Date, Default-Style, Delta-Base, Depth, Derived-From, Destination, Differential-ID, Digest, ETag, Expect, Expires, Ext, From, GET, GetProfile, HEAD, HTTP-date, Host, IM, If, If-Match, If-Modified-Since, If-None-Match, If-Range, If-Unmodified-Since, Keep-Alive, Label, Last-Event-ID, Last-Modified, Link, Location, Lock-Token, MIME-Version, Man, Max-Forwards, Media-Range, Message-ID, Meter, Negotiate, Non-Compliance, OPTION, OPTIONS, OWS, Opt, Optional, Ordering-Type, Origin, Overwrite, P3P, PEP, PICS-Label, POST, PUT, Pep-Info, Permanent, Position, Pragma, ProfileObject, Protocol, Protocol-Query, Protocol-Request, Proxy-Authenticate, Proxy-Authentication-Info, Proxy-Authorization, Proxy-Features, Proxy-Instruction, Public, RWS, Range, Referer, Refresh, Resolution-Hint, Resolver-Location, Retry-After, Safe, Sec-Websocket-Extensions, Sec-Websocket-Key, Sec-Websocket-Origin, Sec-Websocket-Protocol, Sec-Websocket-Version, Security-Scheme, Server, Set-Cookie, Set-Cookie2, SetProfile, SoapAction, Status, Status-URI, Strict-Transport-Security, SubOK, Subst, Surrogate-Capability, Surrogate-Control, TCN, TE, TRACE, Timeout, Title, Trailer, Transfer-Encoding, UA-Color, UA-Media, UA-Pixels, UA-Resolution, UA-Windowpixels, URI, Upgrade, User-Agent, Variant-Vary, Vary, Version, Via, Viewport-Width, WWW-Authenticate, Want-Digest, Warning, Width, X-Content-Duration, X-Content-Security-Policy, X-Content-Type-Options, X-CustomHeader, X-DNSPrefetch-Control, X-Forwarded-For, X-Forwarded-Port, X-Forwarded-Proto, X-Frame-Options, X-Modified, X-OTHER, X-PING, X-PINGOTHER, X-Powered-By, X-Requested-With
.htaccess
Contoh (Termasuk CORS):FAQ:
Mengapa
Access-Control-Allow-Headers
,Access-Control-Expose-Headers
,Access-Control-Allow-Methods
nilai-nilai yang super panjang?Mereka tidak mendukung
*
sintaks, jadi saya telah mengumpulkan tajuk yang paling umum (dan eksotis) dari seluruh web, dalam berbagai format # 1 # 2 # 3 (dan saya akan memperbarui daftar dari waktu ke waktu)Mengapa Anda menggunakan
Header unset ______
sintaks?Server GoDaddy (tempat situs web saya dihosting ..) memiliki bug aneh di mana jika tajuk sudah disetel, nilai sebelumnya akan bergabung dengan yang sudah ada .. (bukan menggantikannya) dengan cara ini saya "membersihkan" nilai yang ada (benar-benar hanya solusi cepat && kotor )
Apakah aman bagi saya untuk menggunakan 'apa adanya'?
Yah .. sebagian besar jawabannya adalah YA karena
.htaccess
membatasi header ke skrip (PHP, HTML, ...) dan sumber daya (.JPG, .JS, .CSS) disajikan dari "folder" -lokasi berikut. Anda secara opsional mungkin ingin menghapusAccess-Control-Allow-Methods
garis. JugaConnection
,Time-Zone
,Keep-Alive
danDNT
,Accept-Ranges
,Vary
,X-UA-Compatible
,X-Frame-Options
,X-Content-Type-Options
danX-Xss-Protection
hanya saran saya menggunakan untuk saya secara online-layanan .. merasa bebas untuk menghapus mereka juga ...diambil dari komentar saya di atas
sumber
Access-Control-Allow-Origin "*"
tetapi tidak ada yang berhasil sampai saya menggunakan ini. Bahkan penyedia CDN tidak punya jawaban untuk kami. Saya menjalankan situs web di Siteground , mungkin, sebagai GoDaddy , wajib untuk menghapus semuanya terlebih dahulu.Access-Control-Allow-Methods
semua metode ini: HTTP / 0.9, HTTP / 1.0, HTTP / 1.1, HTTP / 2Saya menemukan bahwa
Access-Control-Allow-Headers: *
harus disetel HANYA untuk permintaan OPTIONS. Jika Anda mengembalikannya untuk permintaan POST maka browser membatalkan permintaan (setidaknya untuk chrome)Kode PHP berikut berfungsi untuk saya
Saya menemukan pertanyaan serupa dengan beberapa tanggapan yang menyesatkan:
Access-Control-Allow-Headers
tidak cocok dengan localhost. Ini salah: Saya dapat menggunakan CORS ke server lokal saya dengan Post secara normalAccess-Control-Allow-Headers
menerima wildcard. Itu juga salah, wildcard berfungsi untuk saya (saya hanya menguji dengan Chrome)Ini membutuhkan waktu setengah hari untuk mencari tahu masalahnya.
Selamat membuat kode
sumber
*
padaAccess-Control-Allow-Headers
bahkan untukOPTIONS
.Dikutip dari monsur,
Jadi inilah solusi php saya.
sumber
header('Access-Control-Allow-Headers: ' . $_SERVER['HTTP_ACCESS_CONTROL_ALLOW_HEADERS']);
inilah mantra untuk nginx, di dalam a
sumber