html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,issue,performed_via_github_app https://github.com/simonw/datasette/issues/712#issuecomment-604193362,https://api.github.com/repos/simonw/datasette/issues/712,604193362,MDEyOklzc3VlQ29tbWVudDYwNDE5MzM2Mg==,9599,2020-03-26T02:32:57Z,2020-03-26T02:32:57Z,OWNER,"Weird... the unit test I just added passes. So suggested facets look like they're OK. And yet the demo in https://mybinder.org/v2/gh/wragge/datasette-test/master?urlpath=lab doesn't work.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428, https://github.com/simonw/datasette/issues/712#issuecomment-604194598,https://api.github.com/repos/simonw/datasette/issues/712,604194598,MDEyOklzc3VlQ29tbWVudDYwNDE5NDU5OA==,9599,2020-03-26T02:37:46Z,2020-03-26T02:37:46Z,OWNER,"Here's the truncatted HTML for https://hub.gke.mybinder.org/user/wragge-datasette-test-czqms2oy/proxy/8001/results/articles ```html results: articles: 400 rows /head>

articles

400 rows

...

View and edit SQL

This data as json, CSV (advanced)

Suggested facets: newspaper_id, newspaper_title, page, category, illustrated, corrections, date (date)

```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428, https://github.com/simonw/datasette/issues/712#issuecomment-604194872,https://api.github.com/repos/simonw/datasette/issues/712,604194872,MDEyOklzc3VlQ29tbWVudDYwNDE5NDg3Mg==,9599,2020-03-26T02:38:48Z,2020-03-26T04:04:04Z,OWNER,"I have a hunch about this: maybe the URLs that work are the ones that use `{{ base_url }}` directly in the template, while the ones that break are the ones that reconstruct the URL based on the incoming path?","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428, https://github.com/simonw/datasette/issues/712#issuecomment-604195244,https://api.github.com/repos/simonw/datasette/issues/712,604195244,MDEyOklzc3VlQ29tbWVudDYwNDE5NTI0NA==,9599,2020-03-26T02:40:23Z,2020-03-26T04:17:57Z,OWNER,"Here's the output of the `/-/asgi-scope` plugin: ``` {'client': ('10.12.3.15', 0), 'headers': [(b'cookie', b''), (b'upgrade-insecure-requests', b'1'), (b'dnt', b'1'), (b'accept-encoding', b'gzip'), (b'accept-language', b'en-US,en;q=0.5'), (b'accept', b'text/html,application/xhtml+xml,application/xml;q=0.9,image/' b'webp,*/*;q=0.8'), (b'user-agent', b'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:74.0) Gecko' b'/20100101 Firefox/74.0'), (b'x-scheme', b'https'), (b'x-original-uri', b'/user/wragge-datasette-test-czqms2oy/proxy/8001/-/asgi-scope'), (b'x-forwarded-proto', b'https,http'), (b'x-forwarded-port', b'443,80'), (b'x-forwarded-host', b'hub.gke.mybinder.org'), (b'x-forwarded-for', b'148.64.98.14,10.12.3.15'), (b'x-real-ip', b'148.64.98.14'), (b'connection', b'close'), (b'host', b'hub.gke.mybinder.org'), (b'x-forwarded-context', b'/user/wragge-datasette-test-czqms2oy/proxy/8001'), (b'x-proxycontextpath', b'/user/wragge-datasette-test-czqms2oy/proxy/8001')], 'http_version': '1.1', 'method': 'GET', 'path': '/-/asgi-scope', 'query_string': b'', 'raw_path': b'/-/asgi-scope', 'root_path': '', 'scheme': 'https,http', 'server': ('127.0.0.1', 8001), 'type': 'http'} ``` From this output... it looks like the `path` being passed through to Datasette is still `/-/asgi-scope` here when I though it would be `/user/wragge-datasette-test-czqms2oy/proxy/8001/-/asgi-scope` The original URL path (the one I want) is passed in the `x-original-uri` HTTP header.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428, https://github.com/simonw/datasette/issues/712#issuecomment-604195577,https://api.github.com/repos/simonw/datasette/issues/712,604195577,MDEyOklzc3VlQ29tbWVudDYwNDE5NTU3Nw==,9599,2020-03-26T02:41:40Z,2020-03-26T02:41:40Z,OWNER,Aha! It turns out my demo at https://github.com/simonw/jupyterserverproxy-datasette-demo suffers from the same bug.,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428, https://github.com/simonw/datasette/issues/712#issuecomment-604196158,https://api.github.com/repos/simonw/datasette/issues/712,604196158,MDEyOklzc3VlQ29tbWVudDYwNDE5NjE1OA==,9599,2020-03-26T02:43:47Z,2020-03-26T04:20:15Z,OWNER,"I think the solution here may be to let the incoming `x-original-uri` header over-ride the `raw_path` used by Datasette. This may require a new Datasette setting - maybe this: --config path_from_header:x-original-uri","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428, https://github.com/simonw/datasette/issues/712#issuecomment-604218449,https://api.github.com/repos/simonw/datasette/issues/712,604218449,MDEyOklzc3VlQ29tbWVudDYwNDIxODQ0OQ==,9599,2020-03-26T04:12:59Z,2020-03-26T04:15:18Z,OWNER,"I'm running this latest release like so: Launch this binder: https://mybinder.org/v2/gh/wragge/datasette-test/master?urlpath=lab Open the notebook. In the notebook run this: !pip install datasette-debug-asgi https://github.com/simonw/datasette/archive/7b205af0b53c92d17b69f8c95d70a24a0c06ebce.zip And use this block to run Datasette: ``` # Get current running servers servers = list_running_servers() # Get the current base url base_url = next(servers)['base_url'] # Create a base url for Datasette suing the proxy path proxy_url = f'{base_url}proxy/8001/' # Display a link to Datasette display(HTML(f'

View Datasette (Click on the stop button to close the Datasette server)

')) # Launch Datasette !datasette -- results.db --port 8001 --config base_url:$proxy_url --config path_from_header:x-original-uri --config template_debug:1 ```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428, https://github.com/simonw/datasette/issues/712#issuecomment-604219753,https://api.github.com/repos/simonw/datasette/issues/712,604219753,MDEyOklzc3VlQ29tbWVudDYwNDIxOTc1Mw==,9599,2020-03-26T04:18:13Z,2020-03-26T04:18:13Z,OWNER,"Woohoo that worked! ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428, https://github.com/simonw/datasette/issues/712#issuecomment-604225034,https://api.github.com/repos/simonw/datasette/issues/712,604225034,MDEyOklzc3VlQ29tbWVudDYwNDIyNTAzNA==,127565,2020-03-26T04:40:08Z,2020-03-26T04:40:08Z,CONTRIBUTOR,"Great! Yes, can confirm that this works on Binder. However, when I try to run the same code locally, I get an Internal Server Error when I try to access Datasette. ``` ERROR: Exception in ASGI application Traceback (most recent call last): File ""/Volumes/Workspace/mycode/datasette-test/lib/python3.7/site-packages/uvicorn/protocols/http/httptools_impl.py"", line 385, in run_asgi result = await app(self.scope, self.receive, self.send) File ""/Volumes/Workspace/mycode/datasette-test/lib/python3.7/site-packages/uvicorn/middleware/proxy_headers.py"", line 45, in __call__ return await self.app(scope, receive, send) File ""/Volumes/Workspace/mycode/datasette-test/lib/python3.7/site-packages/datasette_debug_asgi.py"", line 24, in wrapped_app await app(scope, recieve, send) File ""/Volumes/Workspace/mycode/datasette-test/lib/python3.7/site-packages/datasette/utils/asgi.py"", line 174, in __call__ await self.app(scope, receive, send) File ""/Volumes/Workspace/mycode/datasette-test/lib/python3.7/site-packages/datasette/tracer.py"", line 75, in __call__ await self.app(scope, receive, send) File ""/Volumes/Workspace/mycode/datasette-test/lib/python3.7/site-packages/datasette/app.py"", line 746, in __call__ raw_path = dict(scope[""headers""])[path_from_header.encode(""utf8"")].split(b""?"")[0] KeyError: b'x-original-uri' INFO: 127.0.0.1:49320 - ""GET / HTTP/1.1"" 500 Internal Server Error ```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428, https://github.com/simonw/datasette/issues/712#issuecomment-604249402,https://api.github.com/repos/simonw/datasette/issues/712,604249402,MDEyOklzc3VlQ29tbWVudDYwNDI0OTQwMg==,127565,2020-03-26T06:11:44Z,2020-03-26T06:11:44Z,CONTRIBUTOR,"Following on from @betatim's suggestion on Twitter, I've changed the proxy url to include 'absolute'. ``` python proxy_url = f'{base_url}proxy/absolute/8001/' ``` This works both on Binder and locally, without using the `path_from_header` option. I've updated the demo repository. Sorry @simonw if I've led you down the wrong path!","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428, https://github.com/simonw/datasette/issues/712#issuecomment-604466523,https://api.github.com/repos/simonw/datasette/issues/712,604466523,MDEyOklzc3VlQ29tbWVudDYwNDQ2NjUyMw==,9599,2020-03-26T14:35:43Z,2020-03-26T14:35:43Z,OWNER,"Hooray! This is a really great fix, thanks.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428, https://github.com/simonw/datasette/issues/712#issuecomment-604486651,https://api.github.com/repos/simonw/datasette/issues/712,604486651,MDEyOklzc3VlQ29tbWVudDYwNDQ4NjY1MQ==,9599,2020-03-26T15:11:49Z,2020-03-26T15:11:49Z,OWNER,"And for https://github.com/simonw/jupyterserverproxy-datasette-demo setting `""absolute_url"": True` appears to fix the bug as well (it previously caused an infinite redirect loop but that seems not to happen any more with the latest `base_url` setting): https://github.com/simonw/jupyterserverproxy-datasette-demo/commit/880f9d50566357160b793557f145c99e74ad759a","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428,
Link rowid ▼