mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-05-30 23:40:40 +02:00
[Bug]: PayloadTooLargeError (HTTP 413) when syncing mobile local sessions to server #3041
Open
opened 2026-04-25 00:13:13 +02:00 by adam
·
9 comments
No Branch/Tag Specified
master
book_tags_genres_dedupe
episode_download_fallback
Issue-4540-SortBy-StartedDate-and-FinishedDate
episode_meta_tagging
fix_authorize_race_condition
redirect_transcode_requests
progress_updated_sort
fix_ereader_socket_event
fix_change_empty_root_password
fix_podcast_session_track_index
fix_set_token
session_modal_user
localize_durations
fix_oidc_create_user
jwt_auth_refactor
fix_scanner_deleting_single_file_books
fix_mediaprogress_updatedat_2
experimental_next_client
podcast_episode_duration
episode-timestamps-clickable
book_author_secondary_sort_title
podcast_useragents
pathexists_user_access
fix_pathexists_join
book_author_secondary_sort
clean_duplicate_mediaprogress
sanitize_html_description
trix_prevent_attachments
check_path_api_fix
fix_mediaprogress_updatedat
increase_express_json_limit
fix_dockerfile_nunicode
search_episodes
audiobook_tools_update
episode_secondary_sorts
hls_stream_url_update
new_session_track_endpoint
audiobook_tools_enhancements
watcher_rescans_update
player_track_tooltip
fix_exclude_prefixes_crash
socket_item_events
fix_podcast_episode_scanner_promise
new_stats_controller
count_cache_for_userpermissions
parsing-opf-v3
validate_migration_files
fix-quick-match-all-crash
fix-chapter-end-sleep-timer
stringify_sequelize_query
remove-col-ambiguity
fix_next_prev_edit_description
details_trim_whitespace
fix_content_url_basepath
fix_logger_fatal
progress_bar_visibility
batch-edit-populate-map-details
feed_generator_updates
bookmark-modal-updates
migrate-library-item-in-scanner
migrate-new-library-items
migrate-podcasts-new-library-item-2
migrate-podcasts-new-library-item
fix-remove-episode-from-playlist
playback-session-use-new-library-item
refactor-library-item
fix-heatmap-caption
feed-episodes-upsert
share-media-player-media-session-api
remove-old-playlist
remove_old_collection_object
plugin-implementation-demo
feed_migration
refactor-feeds-from-item
fix_remove_authors_no_books
v2.17.3-fk-constraints-migration
migrations-first-upgrade
sqlite_2
feature/nuxt-target-server
waveform
sqlite
playlists
video
v2.35.1
v2.35.0
v2.34.0
v2.33.2
v2.33.1
v2.33.0
v2.32.1
v2.32.0
v2.31.0
v2.30.0
v2.29.0
v2.28.0
v2.27.0
v2.26.3
v2.26.2
v2.26.1
v2.26.0
v2.25.1
v2.25.0
v2.24.0
v2.23.0
v2.22.0
v2.21.0
v2.20.0
v2.19.5
v2.19.4
v2.19.3
v2.19.2
v2.19.1
v2.19.0
v2.18.1
v2.18.0
v2.17.7
v2.17.6
v2.17.5
v2.17.4
v2.17.3
v2.17.2
v2.17.1
v2.17.0
v2.16.2
v2.16.1
v2.16.0
v2.15.1
v2.15.0
v2.14.0
v2.13.4
v2.13.3
v2.13.2
v2.13.1
v2.13.0
v2.12.3
v2.12.2
v2.12.1
v2.12.0
v2.11.0
v2.10.1
v2.10.0
v2.9.0
v2.8.1
v2.8.0
v2.7.2
v2.7.1
v2.7.0
v2.6.0
v2.5.0
v2.4.4
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.3.5
v2.3.4
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.23
v2.2.22
v2.2.21
v2.2.20
v2.2.19
v2.2.18
v2.2.17
v2.2.16
v2.2.15
v2.2.14
v2.2.13
v2.2.12
v2.2.11
v2.2.10
v2.2.9
v2.2.8
v2.2.7
v2.2.6
v2.2.5
v2.2.4
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.5
v2.1.4
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.0.24
v2.0.23
v2.0.22
v2.0.21
v2.0.20
v2.0.19
v2.0.18
v2.0.17
v2.0.16
v2.0.15
v2.0.14
v2.0.13
v2.0.12
v2.0.11
v2.0.10
v2.0.9
v2.0.8
v2.0.7
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v1.7.2
v1.7.1
v1.7.0
v1.6.0
v1.5.5
v1.5.0
v1.4.11
v1.4.9
v1.4.7
v1.4.6
v1.4.4
v1.4.2
v1.4.0
v1.4.1
v1.3.4
v1.3.3
v1.3.1
v1.2.8
v1.2.6
v1.2.5
v1.2.4
v1.2.1
v1.1.15
v1.1.14
v1.1.13
v1.1.12
v1.1.11
v1.1.10
v1.1.9
v1.1.8
v1.0.0
0.9.61-beta.0
0.9.61-beta
Labels
Clear labels
authentication
backlog
bug
chapter editor
config-issue
ebooks
encoding/embedding
enhancement
help wanted
listening sessions & progress
planned
possible plugin
progress sync
pull-request
sorting/filtering/searching
unable to reproduce
upload
users & permissions
waiting
Mirrored from GitHub Pull Request
No Label
bug
Milestone
No items
No Milestone
Projects
Clear projects
No project
Assignees
adam (Adam Melkus)
Clear assignees
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/audiobookshelf#3041
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @Salvoxia on GitHub (Oct 18, 2025).
What happened?
After listening on the Android application without having a server connection for a while (not as in "a prolonged period of time" but "start and stop listening many times"), the next time the Android App establishes connection to server the listening progress made since the last connection is not synced.
What did you expect to happen?
The server should be able to handler a large amount of local sessions for syncing progress.
In any case, if the threshold for reporting local session payload size is exceeded (whatever that might be at the moment), the only way of getting it working again seems to clear the app's cache. Any listening progress made will not be synced to the server and thus is lost.
Steps to reproduce the issue
It might be more feasible to generate bogus listening sessions for any existing audiobook and manually calling the
/api/session/local-allserver API endpoint.Maybe the stack trace in the server logs is already enough to pinpoint where a (rather small) limit in payload size is configured in the server (or configuring a larger limit is missing)?
Audiobookshelf version
v2.30.0
How are you running audiobookshelf?
Docker
What OS is your Audiobookshelf server hosted from?
Linux
If the issue is being seen in the UI, what browsers are you seeing the problem on?
None
Logs
Additional Notes
No response
@Vito0912 commented on GitHub (Oct 18, 2025):
This is your RP not ABS afaik.
Please increase the payload size in your reverse proxy
I used this endpoint myself to sync thousands of sessions. ABS does not impose a limit
Edit: Even though you see the error in the ABS logs in the past it always was the RP
@Salvoxia commented on GitHub (Oct 18, 2025):
@Vito0912 Thanks for your quick reply. We touched the topic briefly before in #1668.
I don't suppose you could explain why
tcpdump/api/uploadendpoint through the same RP with no problemsAll of this implies for me that the reverse proxy is not the culprit. Otherwise I have to seriously doubt everything I believe to know about how networking and Docker works (which I might have to).
I'm using traefik as reverse proxy. According to traefik docs, you must explicitly use a buffering middleware to enforce size limits on requests forwarded to applications behind the RP, which I am not using.
Do you have any suggestions what else I could try to rule out it's one thing or the other?
@Vito0912 commented on GitHub (Oct 18, 2025):
Ah sorry! Totally my bad. I thought your issue was resolved by increasing the limit. I mixed things up!
But it's still very odd. You can see this code of my toolbox: https://github.com/Vito0912/absToolbox/blob/main/web/src/tools/migrateServer.ts#L283C1-L289C12
It uses the local-all endpoint and in my testing I migrated ~3500 sessions of my user. I have no exact since, but it should be way about the 270kb.
But I agree with you that it does not make any sense. Please give me a second to check the code.
@Vito0912 commented on GitHub (Oct 18, 2025):
ABS seems to set a limit of 10mb for JSON.
I also just tested by sending 10mb of payload and ideed it did not work. I assume this is to prevent (D)DOS. But 10MB should be plenty of sessions (My 3500 are around 5MB) - So near the limit
* h2h3 [content-length: 5473364]< HTTP/2 200 < server: openrestyThe only thing I can imagine, is that one of the books in your sessions is gigantic. Something like thousand of tracks and chapters. Then I could see how something like this might happen.
Do you have a book with many files and/or chapters?
@Salvoxia commented on GitHub (Oct 18, 2025):
Hm. not sure I follow here.
Yes, there is one book for which an offline session should be synced that has ~1600 chapters with a run time of 98 hours. But how would that affect syncing sessions if it's not thousands of sessions for that very long book?
@Vito0912 commented on GitHub (Oct 18, 2025):
I came across some comment that the internal json parser only allows 100kb of data by default. So that made me think to believe that if one session independent is bigger than 100kb, that it could trigger such behaviour.
But I am not sure if that parser is even used in ABS, but it would make sense to me ATM, as this would be the only different variable then from my setup.
I will look into it tomorrow
@jpeel commented on GitHub (Oct 23, 2025):
I think that Vito0912 is correct. The server is using express which defaults to 100kb for json unless the limit is overridden, but it is only overridden for internal-api routes using:
in server/Server.js. The limits on other routes need to be increased as well I think for json to fix this.
@Vito0912 commented on GitHub (Oct 23, 2025):
I also saw that, yet as I said, I was able to send a JSON payload that was 5mb big.
I am not even sure what the internal API is used for, but I am not really into express either.
@jpeel commented on GitHub (Oct 23, 2025):
Yes, quite right, there is also this set in Server.js:
and the error includes
at urlencodedParserso I'm assuming that it is exceeding this 5 MB limit when the JSON is url-encoded.