mirror of
https://github.com/PrivateBin/PrivateBin.git
synced 2025-08-19 03:27:50 -04:00
Add response header X-Uncompressed-Content-Length
for JSON API
Because the response from the API is PHP output, the usual `Content-Length` header is absent.
This [custom header technique](32799706 (32799706)
) allows the client to know the total length of the data being received, in order to display a progress indicator.
Here's a code example with `XMLHttpRequest`:
```
xhr.addEventListener("progress", (e) => {
if (e.lengthComputable) {
onDownloadProgress({
loaded: e.loaded,
total: e.total,
});
} else {
const uncompressedContentLength = xhr.getResponseHeader(
"X-Uncompressed-Content-Length",
);
if (uncompressedContentLength) {
onDownloadProgress({
loaded: e.loaded,
total: Number(uncompressedContentLength),
});
}
}
});
```
Notes:
- `Fetch` can be used as well (only reason I use `XMLHttpRequest` is because `fetch` doesn't allow to track the progress of uploaded data (when creating a paste); whereas `XMLHttpRequest` does).
- `e.loaded` can be different between browsers; Firefox reports the length of the compressed data, Chrome reports the length of uncompressed data (see https://github.com/whatwg/xhr/issues/388). A workaround for this is to manually set our progress indicator to 100% when the request finishes.
This commit is contained in:
parent
776030c08a
commit
6130547ca6
1 changed files with 2 additions and 0 deletions
|
@ -151,6 +151,8 @@ class Controller
|
|||
header('Access-Control-Allow-Origin: *');
|
||||
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
|
||||
header('Access-Control-Allow-Headers: X-Requested-With, Content-Type');
|
||||
header('X-Uncompressed-Content-Length: ' . strlen($this->_json));
|
||||
header('Access-Control-Expose-Headers: X-Uncompressed-Content-Length');
|
||||
echo $this->_json;
|
||||
} else {
|
||||
$this->_view();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue