-
-
Notifications
You must be signed in to change notification settings - Fork 67
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
Don't send the Set-Cookie
header multiple times for the same cookie
#237
Conversation
This reverts commit f69221b.
I think we should discuss how we handle overwriting cookies. I think it is error prone to merge the attributes. |
Agreed, maybe a shallow comparison of the opts, or just domain and path |
What do you think of this? |
Dont expect much from me. I am on vacation with my wife on crete and have limited access to my laptop. :)) Most stuff i currently do is with my phone. I will see if i can review it with my laptop. |
It’s all good, have a great vacation 🏖️ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm
I think this is worthwhile for a semver-major. Wdyt?
I agree with @mcollina |
I agree, this is a behavior change at the API level as well. |
Can we avoid a change of the API? This module has quite a few dependencies and I fear it would be harder to update them all. |
By API behavior change I meant this very specific scenario: user registers In this case, the We can revert it by simply appending to the header instead of setting it manually during |
Probably would be better, thx! |
Thanks! |
Is it the code coverage or is it the linter saying an else is mssing? @gurgunday @mcollina |
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm
I would still ship as semver-major but this looks very good now. |
Latest results for 1 cookie PR, OLD: 100 connections
┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬────────┐
│ Stat │ 2.5% │ 50% │ 97.5% │ 99% │ Avg │ Stdev │ Max │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼────────┤
│ Latency │ 1 ms │ 1 ms │ 2 ms │ 2 ms │ 1.05 ms │ 0.76 ms │ 127 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴────────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬─────────┬─────────┐
│ Stat │ 1% │ 2.5% │ 50% │ 97.5% │ Avg │ Stdev │ Min │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Req/Sec │ 69375 │ 69375 │ 75967 │ 76991 │ 75429.82 │ 2068.17 │ 69367 │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Bytes/Sec │ 15.1 MB │ 15.1 MB │ 16.5 MB │ 16.7 MB │ 16.4 MB │ 447 kB │ 15.1 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴─────────┴─────────┘
Req/Bytes counts sampled once per second.
# of samples: 11
830k requests in 11.01s, 180 MB read PR, NEW: 100 connections
┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐
│ Stat │ 2.5% │ 50% │ 97.5% │ 99% │ Avg │ Stdev │ Max │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤
│ Latency │ 1 ms │ 1 ms │ 2 ms │ 2 ms │ 1.04 ms │ 0.59 ms │ 75 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬──────────┬─────────┬─────────┐
│ Stat │ 1% │ 2.5% │ 50% │ 97.5% │ Avg │ Stdev │ Min │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Req/Sec │ 73471 │ 73471 │ 81023 │ 81535 │ 79956.37 │ 2286.45 │ 73442 │
├───────────┼─────────┼─────────┼─────────┼─────────┼──────────┼─────────┼─────────┤
│ Bytes/Sec │ 15.9 MB │ 15.9 MB │ 17.6 MB │ 17.7 MB │ 17.3 MB │ 495 kB │ 15.9 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴──────────┴─────────┴─────────┘
Req/Bytes counts sampled once per second.
# of samples: 11
880k requests in 11.01s, 191 MB read master: 100 connections
┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐
│ Stat │ 2.5% │ 50% │ 97.5% │ 99% │ Avg │ Stdev │ Max │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤
│ Latency │ 0 ms │ 1 ms │ 2 ms │ 2 ms │ 1.03 ms │ 0.56 ms │ 79 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘
┌───────────┬─────────┬─────────┬───────┬─────────┬──────────┬────────┬─────────┐
│ Stat │ 1% │ 2.5% │ 50% │ 97.5% │ Avg │ Stdev │ Min │
├───────────┼─────────┼─────────┼───────┼─────────┼──────────┼────────┼─────────┤
│ Req/Sec │ 76351 │ 76351 │ 83135 │ 83775 │ 82196.37 │ 2105 │ 76308 │
├───────────┼─────────┼─────────┼───────┼─────────┼──────────┼────────┼─────────┤
│ Bytes/Sec │ 16.6 MB │ 16.6 MB │ 18 MB │ 18.2 MB │ 17.8 MB │ 457 kB │ 16.6 MB │
└───────────┴─────────┴─────────┴───────┴─────────┴──────────┴────────┴─────────┘
Req/Bytes counts sampled once per second.
# of samples: 11
904k requests in 11.01s, 196 MB read |
The numbers budge, but Here is why I think that is: Anyway I think we're good |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [@fastify/cookie](https://github.com/fastify/fastify-cookie) | [`8.3.0` -> `9.0.4`](https://renovatebot.com/diffs/npm/@fastify%2fcookie/8.3.0/9.0.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@fastify%2fcookie/9.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@fastify%2fcookie/9.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@fastify%2fcookie/8.3.0/9.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@fastify%2fcookie/8.3.0/9.0.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>fastify/fastify-cookie (@​fastify/cookie)</summary> ### [`v9.0.4`](https://github.com/fastify/fastify-cookie/releases/tag/v9.0.4) [Compare Source](https://github.com/fastify/fastify-cookie/compare/v9.0.3...v9.0.4) #### What's Changed - Fix support for response that does not set a cookie by [@​mcollina](https://github.com/mcollina) in [https://github.com/fastify/fastify-cookie/pull/247](https://github.com/fastify/fastify-cookie/pull/247) **Full Changelog**: fastify/fastify-cookie@v9.0.3...v9.0.4 ### [`v9.0.3`](https://github.com/fastify/fastify-cookie/releases/tag/v9.0.3) [Compare Source](https://github.com/fastify/fastify-cookie/compare/v9.0.2...v9.0.3) #### What's Changed - Do not crash if responding from a previously-registered onRequest hook by [@​mcollina](https://github.com/mcollina) in [https://github.com/fastify/fastify-cookie/pull/245](https://github.com/fastify/fastify-cookie/pull/245) **Full Changelog**: fastify/fastify-cookie@v9.0.2...v9.0.3 ### [`v9.0.2`](https://github.com/fastify/fastify-cookie/releases/tag/v9.0.2) [Compare Source](https://github.com/fastify/fastify-cookie/compare/v9.0.1...v9.0.2) #### What's Changed - use for loop instead of for...of by [@​gurgunday](https://github.com/gurgunday) in [https://github.com/fastify/fastify-cookie/pull/239](https://github.com/fastify/fastify-cookie/pull/239) - Check if onSend ran and keep resetting the map by [@​gurgunday](https://github.com/gurgunday) in [https://github.com/fastify/fastify-cookie/pull/242](https://github.com/fastify/fastify-cookie/pull/242) - perf: only clear map when it's populated by [@​gurgunday](https://github.com/gurgunday) in [https://github.com/fastify/fastify-cookie/pull/243](https://github.com/fastify/fastify-cookie/pull/243) - perf: only call removeHeader when needed by [@​gurgunday](https://github.com/gurgunday) in [https://github.com/fastify/fastify-cookie/pull/244](https://github.com/fastify/fastify-cookie/pull/244) **Full Changelog**: fastify/fastify-cookie@v9.0.1...v9.0.2 ### [`v9.0.1`](https://github.com/fastify/fastify-cookie/releases/tag/v9.0.1) [Compare Source](https://github.com/fastify/fastify-cookie/compare/v9.0.0...v9.0.1) #### What's Changed - Fix [@​fastify/session](https://github.com/fastify/session) by [@​mcollina](https://github.com/mcollina) in [https://github.com/fastify/fastify-cookie/pull/240](https://github.com/fastify/fastify-cookie/pull/240) **Full Changelog**: fastify/fastify-cookie@v9.0.0...v9.0.1 ### [`v9.0.0`](https://github.com/fastify/fastify-cookie/releases/tag/v9.0.0) [Compare Source](https://github.com/fastify/fastify-cookie/compare/v8.3.0...v9.0.0) #### What's Changed - fix(docs): msecs to seconds ([#​219](https://github.com/fastify/fastify-cookie/issues/219)) by [@​seia-soto](https://github.com/seia-soto) in [https://github.com/fastify/fastify-cookie/pull/220](https://github.com/fastify/fastify-cookie/pull/220) - chore(deps-dev): bump sinon from 14.0.2 to 15.0.0 by [@​dependabot](https://github.com/dependabot) in [https://github.com/fastify/fastify-cookie/pull/222](https://github.com/fastify/fastify-cookie/pull/222) - chore(deps-dev): bump tsd from 0.24.1 to 0.25.0 by [@​dependabot](https://github.com/dependabot) in [https://github.com/fastify/fastify-cookie/pull/223](https://github.com/fastify/fastify-cookie/pull/223) - chore(.gitignore): add clinic by [@​Fdawgs](https://github.com/Fdawgs) in [https://github.com/fastify/fastify-cookie/pull/226](https://github.com/fastify/fastify-cookie/pull/226) - chore(.gitignore): add bun lockfile by [@​Fdawgs](https://github.com/Fdawgs) in [https://github.com/fastify/fastify-cookie/pull/228](https://github.com/fastify/fastify-cookie/pull/228) - chore(deps-dev): bump tsd from 0.25.0 to 0.26.0 by [@​dependabot](https://github.com/dependabot) in [https://github.com/fastify/fastify-cookie/pull/229](https://github.com/fastify/fastify-cookie/pull/229) - chore(deps-dev): bump tsd from 0.26.1 to 0.27.0 by [@​dependabot](https://github.com/dependabot) in [https://github.com/fastify/fastify-cookie/pull/230](https://github.com/fastify/fastify-cookie/pull/230) - chore(deps-dev): bump tsd from 0.27.0 to 0.28.0 by [@​dependabot](https://github.com/dependabot) in [https://github.com/fastify/fastify-cookie/pull/231](https://github.com/fastify/fastify-cookie/pull/231) - ci: only trigger on pushes to main branches by [@​Fdawgs](https://github.com/Fdawgs) in [https://github.com/fastify/fastify-cookie/pull/232](https://github.com/fastify/fastify-cookie/pull/232) - chore(deps-dev): bump [@​types/node](https://github.com/types/node) from 18.16.5 to 20.1.0 by [@​dependabot](https://github.com/dependabot) in [https://github.com/fastify/fastify-cookie/pull/233](https://github.com/fastify/fastify-cookie/pull/233) - Fix typo from 'node' to 'none' in CookieSerializeOptions for sameSite attribute by [@​Mihai-MCW](https://github.com/Mihai-MCW) in [https://github.com/fastify/fastify-cookie/pull/236](https://github.com/fastify/fastify-cookie/pull/236) - Don't send the `Set-Cookie` header multiple times for the same cookie by [@​gurgunday](https://github.com/gurgunday) in [https://github.com/fastify/fastify-cookie/pull/237](https://github.com/fastify/fastify-cookie/pull/237) #### New Contributors - [@​seia-soto](https://github.com/seia-soto) made their first contribution in [https://github.com/fastify/fastify-cookie/pull/220](https://github.com/fastify/fastify-cookie/pull/220) - [@​Mihai-MCW](https://github.com/Mihai-MCW) made their first contribution in [https://github.com/fastify/fastify-cookie/pull/236](https://github.com/fastify/fastify-cookie/pull/236) - [@​gurgunday](https://github.com/gurgunday) made their first contribution in [https://github.com/fastify/fastify-cookie/pull/237](https://github.com/fastify/fastify-cookie/pull/237) **Full Changelog**: fastify/fastify-cookie@v8.3.0...v9.0.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - "after 4pm on friday,before 9am on monday,every weekend" in timezone Europe/Paris, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/specfy/specfy). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi4yNy4xIiwidXBkYXRlZEluVmVyIjoiMzYuMjcuMSIsInRhcmdldEJyYW5jaCI6ImNob3JlL3Jlbm92YXRlQmFzZUJyYW5jaCJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Hey everyone!
This PR closes #218 by decorating the reply with a Map to check if a cookie was already set during the lifecycle of a request. If that's the case, instead of multiplying the header, we now just update it.
Please let me know if there is an even better/more performant way to achieve the same outcome.
Finally, I got inspired (as usual) by @Uzlopak's suggestion.
Checklist
npm run test
andnpm run benchmark
and the Code of conduct