aio-libs / aio-libs/aiohttp-cors

Routing hierarchy confusion with CORs

Aperta
#343 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Python
Stelle
220
Fork
61
Merge medio
2m
PR unite (30g)
3

Descrizione

We just encountered a strange CORS bug that that we found a solution to. Our solution is this git commit:

```
diff --git a/prism_orchestrator_server/router.py b/prism_orchestrator_server/router.py
index 58dfd83..34262f7 100644
--- a/prism_orchestrator_server/router.py
+++ b/prism_orchestrator_server/router.py
@@ -106,6 +106,15 @@ def register_routes(container):
visual_classes = router.add_resource("/visual-classes/")
visual_classes.add_route("GET", resources["visual_classes"].index)

+ visual_class_merge = router.add_resource("/visual-classes/merge")
+ visual_class_merge.add_route("PUT", resources["visual_classes"].merge)
+
+ visual_class_move = router.add_resource("/visual-classes/move")
+ visual_class_move.add_route("PUT", resources["visual_classes"].move)
+
+ visual_class_extract = router.add_resource("/visual-classes/extract")
+ visual_class_extract.add_route("PUT", resources["visual_classes"].extract)
+
visual_class = router.add_resource("/visual-classes/{visual_class_id}")
visual_class.add_route("GET", resources["visual_classes"].get)

@@ -119,15 +128,6 @@ def register_routes(container):
)
visual_class_history.add_route("GET", resources["visual_classes"].get_history)

- visual_class_merge = router.add_resource("/visual-classes/merge")
- visual_class_merge.add_route("PUT", resources["visual_classes"].merge)
-
- visual_class_move = router.add_resource("/visual-classes/move")
- visual_class_move.add_route("PUT", resources["visual_classes"].move)
-
- visual_class_extract = router.add_resource("/visual-classes/extract")
- visual_class_extract.add_route("PUT", resources["visual_classes"].extract)
-
router.add_route("GET", "/instances", redirect_perm("/instances/"))
router.add_route("POST", "/instances", redirect_perm("/instances/"))
instances = router.add_resource("/instances/")
```

Basically the problem was that `/visual-classes/merge`, `/visual-classes/move` and `/visual-classes/extract` routes were defined **after** `/visual-classes/{visual_class_id}`, and while aiohttp was able to handle this routing order with no problems, it appears that aiohttp-cors cannot.

That is aiohttp-cors fixes the `GET` for `/visual-classes/{visual_class_id}` and later when I try to enable CORS for `/visual-classes/merge` for `PUT`, it doesn't work, because it thinks that `GET` cors options have already been set for `/visual-classes/{visual_class_id}`.

After some debugging. The only solution was to move the more specific routes on top of the generic route. And then CORS worked beautifully.

I think this is a bug in aiohttp-cors, and it's particularly nasty because it's very silent, and when you think aiohttp routing works fine, but cors doesn't, it can be difficult to realize this.

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.