Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use Content-Location header in bundle response as JS source URL #37501

Closed
wants to merge 1 commit into from

Commits on May 23, 2023

  1. Use Content-Location header in bundle response as JS source URL (fa…

    …cebook#37501)
    
    Summary:
    Pull Request resolved: facebook#37501
    
    This is the iOS side of the fix for facebook#36794.
    
    That issue aside for the moment, the high-level idea here is to conceptually separate the bundle *request URL*, which represents a request for the *latest* bundle, from the *source URL* passed to JS engines, which should represent the code actually being executed. In future, we'd like to use this to refer to a point-in-time snapshot of the bundle, so that stack traces more often refer to the code that was actually run, even if it's since been updated on disk (actually implementing this isn't planned at the moment, but it helps describe the distinction).
    
    Short term, this separation gives us a way to address the issue with JSC on iOS 16.4 by allowing Metro to provide the client with a [JSC-safe URL](react-native-community/discussions-and-proposals#646) to pass to the JS engine, even where the request URL isn't JSC-safe.
    
    We'll deliver that URL to the client on HTTP bundle requests via the [`Content-Location`](https://www.rfc-editor.org/rfc/rfc9110#name-content-location) header, which is a published standard for communicating a location for the content provided in a successful response (typically used to provide a direct URL to an asset after content negotiation, but I think it fits here too).
    
    For the long-term goal we should follow up with the same functionality on Android and out-of-tree platforms, but it's non-essential for anything other than iOS 16.4 at the moment.
    
    For the issue fix to work end-to-end we'll also need to update Metro, but the two pieces are decoupled and non-breaking so it doesn't matter which lands first.
    
    Changelog:
    [iOS][Changed] Prefer `Content-Location` header in bundle response as JS source URL
    
    Reviewed By: huntie
    
    Differential Revision: D45950661
    
    fbshipit-source-id: 35912ab0d4669709619b8b55d00a1b3491344ed3
    robhogan authored and facebook-github-bot committed May 23, 2023
    Configuration menu
    Copy the full SHA
    6d01773 View commit details
    Browse the repository at this point in the history