|
8 | 8 | * - Please do NOT serve this file on production.
|
9 | 9 | */
|
10 | 10 |
|
11 |
| -const PACKAGE_VERSION = '2.6.2' |
12 |
| -const INTEGRITY_CHECKSUM = '07a8241b182f8a246a7cd39894799a9e' |
| 11 | +const PACKAGE_VERSION = '2.7.0' |
| 12 | +const INTEGRITY_CHECKSUM = '00729d72e3b82faf54ca8b9621dbb96f' |
13 | 13 | const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
|
14 | 14 | const activeClientIds = new Set()
|
15 | 15 |
|
@@ -192,12 +192,26 @@ async function getResponse(event, client, requestId) {
|
192 | 192 | const requestClone = request.clone()
|
193 | 193 |
|
194 | 194 | function passthrough() {
|
195 |
| - const headers = Object.fromEntries(requestClone.headers.entries()) |
| 195 | + // Cast the request headers to a new Headers instance |
| 196 | + // so the headers can be manipulated with. |
| 197 | + const headers = new Headers(requestClone.headers) |
| 198 | + |
| 199 | + // Remove the "accept" header value that marked this request as passthrough. |
| 200 | + // This prevents request alteration and also keeps it compliant with the |
| 201 | + // user-defined CORS policies. |
| 202 | + const acceptHeader = headers.get('accept') |
| 203 | + if (acceptHeader) { |
| 204 | + const values = acceptHeader.split(',').map((value) => value.trim()) |
| 205 | + const filteredValues = values.filter( |
| 206 | + (value) => value !== 'msw/passthrough', |
| 207 | + ) |
196 | 208 |
|
197 |
| - // Remove internal MSW request header so the passthrough request |
198 |
| - // complies with any potential CORS preflight checks on the server. |
199 |
| - // Some servers forbid unknown request headers. |
200 |
| - delete headers['x-msw-intention'] |
| 209 | + if (filteredValues.length > 0) { |
| 210 | + headers.set('accept', filteredValues.join(', ')) |
| 211 | + } else { |
| 212 | + headers.delete('accept') |
| 213 | + } |
| 214 | + } |
201 | 215 |
|
202 | 216 | return fetch(requestClone, { headers })
|
203 | 217 | }
|
|
0 commit comments