Implement library support for Angular-style single page applications
This commit is contained in:
parent
f08165b0f1
commit
d5b4fcf0be
2 changed files with 60 additions and 2 deletions
32
README.md
32
README.md
|
|
@ -28,3 +28,35 @@ else will be ignored.
|
|||
The interaction between range handling and compression also seems a little
|
||||
ill-defined; as we have pre-compressed data, however, we can consistently
|
||||
serve the exact same byte data for compressed files.
|
||||
|
||||
## Angular-style single-page application handling
|
||||
|
||||
If you wish to support an angular.js-style single page application, in which
|
||||
a Javascript application uses the browser's history API to create a set of
|
||||
virtual paths ("routes"), it is necessary to somehow intercept HTTP 404 errors
|
||||
being returned from the handler and instead return an HTTP 200 with an HTML
|
||||
document.
|
||||
|
||||
This can be achieved with a number of methods.
|
||||
|
||||
If you have an nginx instance reverse proxying in front of `htpack`, then you
|
||||
can use a couple of extra directives, for example:
|
||||
|
||||
# prevent page loaded at "http://server.example/my-application" from
|
||||
# requesting resources at "/*" when it should request them at
|
||||
# "/my-application/*" instead
|
||||
location = /my-application {
|
||||
return 308 /my-application/;
|
||||
}
|
||||
|
||||
location /my-application/ {
|
||||
proxy_to http://htpack-addr:8080/;
|
||||
proxy_intercept_errors on;
|
||||
error_page 404 =200 /my-application/;
|
||||
}
|
||||
|
||||
If you are using the handler as a library, then you may call
|
||||
`handler.SetNotFound(filename)` to select a resource to return (with HTTP 200)
|
||||
if a request is made for a resource that is not found. The filename must match
|
||||
a packed resource, so it will be preceded with a `/` (for example it may be
|
||||
`"/index.html"`).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue