Skip to content

Tracing headers are attached to protocol-relative URLs by default, causing CORS errors #8099

Closed

Description

@gongpeione

Is there an existing issue for this?

How do you use Sentry?

Sentry Saas (sentry.io)

Which SDK are you using?

@sentry/browser

SDK Version

7.48.0

Framework Version

No response

Link to Sentry event

No response

SDK Setup

const options = {
    ...
    tracesSampleRate: 1,
    integrations: [
        new Sentry.BrowserTracing()
    ]
}

Steps to Reproduce

  1. import and setup Sentry
  2. add a request like fetch('//xxx.xxx.com/xxx')
  3. run the code
  4. custom headers added to requests and causes CORS error

Expected Result

Based on my understanding of the line const DEFAULT_TRACE_PROPAGATION_TARGETS = ['localhost', /^\//]; Link, I would expect custom headers to only be added to non-cross-origin requests by default. This would be the case if the requests are targeting 'localhost' or if the request URL starts with a '/'.

However, I've noticed that this logic might not account for protocol-relative URLs (those starting with //, like //example.com). If my understanding is correct, this could potentially result in custom headers being added to these types of requests, which might not be the intended behavior

Actual Result

custom headers added to requests and cause CORS error.

If possible, I can submit a pull request to address this issue.

Activity

  1. Lms24 commented on May 11, 2023

    @Lms24
    Member

    Hi @gongpeione thanks for writing in!

    Based on my understanding of the line const DEFAULT_TRACE_PROPAGATION_TARGETS = ['localhost', /^//]; Link, I would expect custom headers to only be added to non-cross-origin requests by default

    Yes, that's exactly how the default value should behave.

    However, I've noticed that this logic might not account for protocol-relative URLs (those starting with //, like //example.com).

    Hmm you're right, this would match with the /^\// default regex. But to be honest, I didn't know that this is a valid and usable URL. Can you show us a concrete reproduction? Would fetch('//example.com') be one of them?

  2. gongpeione commented on May 12, 2023

    @gongpeione
    Author

    Hi @gongpeione thanks for writing in!

    Based on my understanding of the line const DEFAULT_TRACE_PROPAGATION_TARGETS = ['localhost', /^//]; Link, I would expect custom headers to only be added to non-cross-origin requests by default

    Yes, that's exactly how the default value should behave.

    However, I've noticed that this logic might not account for protocol-relative URLs (those starting with //, like //example.com).

    Hmm you're right, this would match with the /^\// default regex. But to be honest, I didn't know that this is a valid and usable URL. Can you show us a concrete reproduction? Would fetch('//example.com') be one of them?

    Yes, fetch('//example.com') could reproduce this situation.

    image
  3. self-assigned this
    on May 14, 2023
  4. changed the title [-]`sentry-trance` and `baggage` header for request url like `//xxx.com` causes cors error[/-] [+]`sentry-trace` and `baggage` header for request url like `//xxx.com` causes cors error[/+] on May 15, 2023
  5. changed the title [-]`sentry-trace` and `baggage` header for request url like `//xxx.com` causes cors error[/-] [+]Tracing headers are attached to protocol-relative URLs by default, causing CORS errors[/+] on May 15, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions