GOOGLE ADS

Montag, 18. April 2022

Warum erlaubt das Hinzufügen von CORS-Headern zu einer OPTIONS-Route Browsern nicht, auf meine API zuzugreifen?

Ich versuche, CORS in meiner Node.js-Anwendung zu unterstützen, die das Express.js-Webframework verwendet. Ich habe eine Google-Gruppendiskussion darüber gelesen, wie man damit umgeht, und einige Artikel darüber gelesen, wie CORS funktioniert. Zuerst habe ich dies getan (Code ist in CoffeeScript-Syntax geschrieben):

app.options "*", (req, res) ->
res.header 'Access-Control-Allow-Origin', '*'
res.header 'Access-Control-Allow-Credentials', true
# try: 'POST, GET, PUT, DELETE, OPTIONS'
res.header 'Access-Control-Allow-Methods', 'GET, OPTIONS'
# try: 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept'
res.header 'Access-Control-Allow-Headers', 'Content-Type'
#...

Es scheint nicht zu funktionieren. Anscheinend sendet mein Browser (Chrome) die anfängliche OPTIONS-Anfrage nicht. Als ich gerade den Block für die Ressource aktualisiert habe, muss ich eine ursprungsübergreifende GET-Anfrage senden an:

app.get "/somethingelse", (req, res) ->
#...
res.header 'Access-Control-Allow-Origin', '*'
res.header 'Access-Control-Allow-Credentials', true
res.header 'Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS'
res.header 'Access-Control-Allow-Headers', 'Content-Type'
#...

Es funktioniert (in Chrome). Das funktioniert auch im Safari.

das habe ich gelesen...

In einem Browser, der CORS implementiert, geht jeder ursprungsübergreifenden GET- oder POST-Anforderung eine OPTIONS-Anforderung voraus, die prüft, ob GET oder POST in Ordnung ist.

Meine Hauptfrage ist also, warum scheint dies in meinem Fall nicht zu passieren? Warum wird mein app.options-Block nicht aufgerufen? Warum muss ich die Header in meinem Haupt-app.get-Block festlegen?


Lösung des Problems

Ich fand den einfachsten Weg, das node.js-Paket cors zu verwenden. Die einfachste Verwendung ist:

var cors = require('cors')
var app = express()
app.use(cors())

Es gibt natürlich viele Möglichkeiten, das Verhalten an Ihre Bedürfnisse anzupassen; Die oben verlinkte Seite zeigt einige Beispiele.

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...