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

Recognize text/javascript as valid js mimetype for caching purposes #5746

Merged
merged 3 commits into from Jun 8, 2022

Conversation

bmd3k
Copy link
Contributor

@bmd3k bmd3k commented Jun 7, 2022

Recently the test core_plugin_test.py::test_js_cache began to fail in some environments with the following error:

... core_plugin_test.py", line 196, in test_js_cache
self.assertEqual(
AssertionError: 
- private, max-age=86400
+ no-cache, must-revalidate

The root cause is that these systems have now been configured to return 'text/javascript' as the mimetype for js files, where they were previously returning 'application/javascript'. This means the 'Cache-Control' header was not set by this line:

https://cs.opensource.google/tensorflow/tensorboard/+/master:tensorboard/plugins/core/core_plugin.py;l=137;drc=c061b659f50cde9dd9da5aa906ecb682ecdc68d4

        expires = (
            JS_CACHE_EXPIRATION_IN_SECS
            if request.args.get("_file_hash")
            and mimetype == "application/javascript"
            else 0
        )

After further investigation (thanks @nfelt!) we determined that the change in mimetype is likely intentional after the recent publishing of RFC 9239 (https://www.rfc-editor.org/rfc/rfc9239), where 'text/javascript' becomes the standard mimetype for js files.

We decided, therefore, to change the Cache-Control-setting logic to also recognize 'text/javascript'.

Note, in practice, the change in mimetype had no impact on running tensorboards thanks to the logic added in #3128, which always ensures ".js" is mapped to mimetype "application/javascript" but does it at a higher level (ie outside either core plugin or the http utils).

@bmd3k bmd3k requested a review from nfelt June 7, 2022 20:39
@bmd3k bmd3k changed the title Recognize text/javascript as valid js mimetype for caching purposes Recognize text/javascript as valid and preferred js mimetype. Jun 7, 2022
@bmd3k bmd3k changed the title Recognize text/javascript as valid and preferred js mimetype. Recognize text/javascript as valid js mimetype for caching purposes Jun 7, 2022
@bmd3k bmd3k merged commit 98a8c00 into tensorflow:master Jun 8, 2022
bmd3k added a commit to bmd3k/tensorboard that referenced this pull request Jun 8, 2022
…ensorflow#5746)

Recently the test core_plugin_test.py::test_js_cache began to fail in some environments with the following error:

```
... core_plugin_test.py", line 196, in test_js_cache
self.assertEqual(
AssertionError: 
- private, max-age=86400
+ no-cache, must-revalidate
```

The root cause is that these systems have now been configured to return 'text/javascript' as the mimetype for js files, where they were previously returning 'application/javascript'. This means the 'Cache-Control' header was not set by this line:

https://cs.opensource.google/tensorflow/tensorboard/+/master:tensorboard/plugins/core/core_plugin.py;l=137;drc=c061b659f50cde9dd9da5aa906ecb682ecdc68d4

```
        expires = (
            JS_CACHE_EXPIRATION_IN_SECS
            if request.args.get("_file_hash")
            and mimetype == "application/javascript"
            else 0
        )
```

After further investigation (thanks @nfelt!) we determined that the change in mimetype is likely intentional after the recent publishing of RFC 9239 (https://www.rfc-editor.org/rfc/rfc9239), where 'text/javascript' becomes the standard mimetype for js files.

We decided, therefore, to change the Cache-Control-setting logic to also recognize 'text/javascript'.

Note, in practice, the change in mimetype had no impact on running tensorboards thanks to the logic added in tensorflow#3128, which always ensures ".js" is mapped to mimetype "application/javascript" but does it at a higher level (ie outside either core plugin or the http utils).
bmd3k added a commit that referenced this pull request Jun 8, 2022
…5746)

Recently the test core_plugin_test.py::test_js_cache began to fail in some environments with the following error:

```
... core_plugin_test.py", line 196, in test_js_cache
self.assertEqual(
AssertionError: 
- private, max-age=86400
+ no-cache, must-revalidate
```

The root cause is that these systems have now been configured to return 'text/javascript' as the mimetype for js files, where they were previously returning 'application/javascript'. This means the 'Cache-Control' header was not set by this line:

https://cs.opensource.google/tensorflow/tensorboard/+/master:tensorboard/plugins/core/core_plugin.py;l=137;drc=c061b659f50cde9dd9da5aa906ecb682ecdc68d4

```
        expires = (
            JS_CACHE_EXPIRATION_IN_SECS
            if request.args.get("_file_hash")
            and mimetype == "application/javascript"
            else 0
        )
```

After further investigation (thanks @nfelt!) we determined that the change in mimetype is likely intentional after the recent publishing of RFC 9239 (https://www.rfc-editor.org/rfc/rfc9239), where 'text/javascript' becomes the standard mimetype for js files.

We decided, therefore, to change the Cache-Control-setting logic to also recognize 'text/javascript'.

Note, in practice, the change in mimetype had no impact on running tensorboards thanks to the logic added in #3128, which always ensures ".js" is mapped to mimetype "application/javascript" but does it at a higher level (ie outside either core plugin or the http utils).
bmd3k added a commit that referenced this pull request Jun 8, 2022
While investigating the test failure that lead to #5746, we realized that RFC 9239 (https://www.rfc-editor.org/rfc/rfc9239) has changed the preferred js mimetype to 'text/javascript' from 'application/javascript'.

To be a good citizen of the internet, this change modifies the logic introduced in #3128 to force the mapping of js files to mimetype 'text/javascript'. We must also modify http_util.py to ensure that the proper charset is included in the Content-Type header. And, finally, we modify the example plugin to use 'text/javascript' as mimetype.

To Test:
* I ran local tensorboard and used the chrome developer tools to verify that the Content-Type for js files fetched by the browser was 'text/javascript; charset=utf-8'.  I did a basic sanity test ensuring both Angular and Polymer portions of the application are running.
* I ran a tensorboard with the example plugin installed and verified that index.js is returned with Content-Type 'text/javascript'.
yatbear pushed a commit to yatbear/tensorboard that referenced this pull request Mar 27, 2023
…ensorflow#5746)

Recently the test core_plugin_test.py::test_js_cache began to fail in some environments with the following error:

```
... core_plugin_test.py", line 196, in test_js_cache
self.assertEqual(
AssertionError: 
- private, max-age=86400
+ no-cache, must-revalidate
```

The root cause is that these systems have now been configured to return 'text/javascript' as the mimetype for js files, where they were previously returning 'application/javascript'. This means the 'Cache-Control' header was not set by this line:

https://cs.opensource.google/tensorflow/tensorboard/+/master:tensorboard/plugins/core/core_plugin.py;l=137;drc=c061b659f50cde9dd9da5aa906ecb682ecdc68d4

```
        expires = (
            JS_CACHE_EXPIRATION_IN_SECS
            if request.args.get("_file_hash")
            and mimetype == "application/javascript"
            else 0
        )
```

After further investigation (thanks @nfelt!) we determined that the change in mimetype is likely intentional after the recent publishing of RFC 9239 (https://www.rfc-editor.org/rfc/rfc9239), where 'text/javascript' becomes the standard mimetype for js files.

We decided, therefore, to change the Cache-Control-setting logic to also recognize 'text/javascript'.

Note, in practice, the change in mimetype had no impact on running tensorboards thanks to the logic added in tensorflow#3128, which always ensures ".js" is mapped to mimetype "application/javascript" but does it at a higher level (ie outside either core plugin or the http utils).
yatbear pushed a commit to yatbear/tensorboard that referenced this pull request Mar 27, 2023
…5747)

While investigating the test failure that lead to tensorflow#5746, we realized that RFC 9239 (https://www.rfc-editor.org/rfc/rfc9239) has changed the preferred js mimetype to 'text/javascript' from 'application/javascript'.

To be a good citizen of the internet, this change modifies the logic introduced in tensorflow#3128 to force the mapping of js files to mimetype 'text/javascript'. We must also modify http_util.py to ensure that the proper charset is included in the Content-Type header. And, finally, we modify the example plugin to use 'text/javascript' as mimetype.

To Test:
* I ran local tensorboard and used the chrome developer tools to verify that the Content-Type for js files fetched by the browser was 'text/javascript; charset=utf-8'.  I did a basic sanity test ensuring both Angular and Polymer portions of the application are running.
* I ran a tensorboard with the example plugin installed and verified that index.js is returned with Content-Type 'text/javascript'.
dna2github pushed a commit to dna2fork/tensorboard that referenced this pull request May 1, 2023
…ensorflow#5746)

Recently the test core_plugin_test.py::test_js_cache began to fail in some environments with the following error:

```
... core_plugin_test.py", line 196, in test_js_cache
self.assertEqual(
AssertionError: 
- private, max-age=86400
+ no-cache, must-revalidate
```

The root cause is that these systems have now been configured to return 'text/javascript' as the mimetype for js files, where they were previously returning 'application/javascript'. This means the 'Cache-Control' header was not set by this line:

https://cs.opensource.google/tensorflow/tensorboard/+/master:tensorboard/plugins/core/core_plugin.py;l=137;drc=c061b659f50cde9dd9da5aa906ecb682ecdc68d4

```
        expires = (
            JS_CACHE_EXPIRATION_IN_SECS
            if request.args.get("_file_hash")
            and mimetype == "application/javascript"
            else 0
        )
```

After further investigation (thanks @nfelt!) we determined that the change in mimetype is likely intentional after the recent publishing of RFC 9239 (https://www.rfc-editor.org/rfc/rfc9239), where 'text/javascript' becomes the standard mimetype for js files.

We decided, therefore, to change the Cache-Control-setting logic to also recognize 'text/javascript'.

Note, in practice, the change in mimetype had no impact on running tensorboards thanks to the logic added in tensorflow#3128, which always ensures ".js" is mapped to mimetype "application/javascript" but does it at a higher level (ie outside either core plugin or the http utils).
dna2github pushed a commit to dna2fork/tensorboard that referenced this pull request May 1, 2023
…5747)

While investigating the test failure that lead to tensorflow#5746, we realized that RFC 9239 (https://www.rfc-editor.org/rfc/rfc9239) has changed the preferred js mimetype to 'text/javascript' from 'application/javascript'.

To be a good citizen of the internet, this change modifies the logic introduced in tensorflow#3128 to force the mapping of js files to mimetype 'text/javascript'. We must also modify http_util.py to ensure that the proper charset is included in the Content-Type header. And, finally, we modify the example plugin to use 'text/javascript' as mimetype.

To Test:
* I ran local tensorboard and used the chrome developer tools to verify that the Content-Type for js files fetched by the browser was 'text/javascript; charset=utf-8'.  I did a basic sanity test ensuring both Angular and Polymer portions of the application are running.
* I ran a tensorboard with the example plugin installed and verified that index.js is returned with Content-Type 'text/javascript'.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants