Replies: 10 comments 22 replies
-
I see @errantmind answered few questions about http so I hope can shred some light on this |
Beta Was this translation helpful? Give feedback.
-
Thanks @errantmind it helps!
For this, probably @nbrady-techempower can answer (or others of Techempower team), but I would be rather surprised; I understand that it's key for techempower to still allow some degree of freedom to interpret the rules (if any, on the subject), but ignoring any client headers looks to me (naive and new on the http land) a rather shocking practice, hardly recommended in real world usage. |
Beta Was this translation helpful? Give feedback.
-
I believe it would be good to have the requirement clarified |
Beta Was this translation helpful? Give feedback.
-
@franz1981 Yes, it was originally the intent of the Plaintext test to allow for more freedom and I think the rules we've settled on for it are probably "good enough" but I'm willing to re-evaluate. It'd be nearly impossible for us to identify all the frameworks that aren't obviously obeying rules like this because that's generally not happening in the implementation code. If you're intentionally "just a server that decode the initial http line, detect few CRLF patterns and send back a a bunch of bytes" to get in that top group of frameworks in the plaintext results, you're probably going to be marked as Stripped. We continue to have those discussions on a framework by framework basis as contributors bring it to our attention because we simply don't have the bandwidth (pun intended) to track those down. As far as:
If I had a nickel for every time I heard this, I wouldn't be here. ;) The benchmarks mean something different to everyone. There are maintainers of very popular frameworks that use these benchmarks to get better. To some, they've become a core part of the development process. It may be useless to most as a "competition" and I probably agree with that. It only looks like a competition because frameworks are sorted by RPS. That's how it makes sense to display the data. We don't hand out prize money or trophies. The real winners, imo, are the ones using the benchmarks to improve their production grade frameworks. |
Beta Was this translation helpful? Give feedback.
-
The difficulty would like be where we draw the line for rule of parsing. I would not throwing out any names but I've seen projects on leader board skip handling IMO I'm fine with current rule set of plaintext. People can do whatever trick they want to make their numbers better but it does not matter in real world since the category has so little weight. |
Beta Was this translation helpful? Give feedback.
-
Most (if not all) of the top Plaintext results are turning off (or not implementing) as many features as possible to score the highest. It is the nature of benchmarking efficiency that anything not included in the benchmark is dead weight. I don't think this is a bad thing either, as long as the benchmark results are meaningful. For example, Plaintext is almost meaningful as it comes close to testing real world static site (or any pure CSR site) performance, which is a major category of all web hosting. People who host static sites do not need all the extra functionality that many of these web servers provide and may just want the fastest web server for their particular use case. To be clear, the parsing of most/all headers on the server is not required (by Spec) but also not necessary for serving up what likely amounts to the majority of the web's public content, so why would it be strictly required to be considered 'production grade'? So, I don't think it is useful to use a one-size-fits-all definition of web servers to gatekeep the definition of what it means for a web server to be 'production ready'. Instead the question should be whether or not the benchmark categories are meaningful representations of the dominant real-world use cases of web servers. Also, to reiterate what I said in an above comment, I fully support the team here changing the requirements for their benchmarks, including requiring headers to be parsed, but I suggest these changes should be explicit and justified using real world use-cases, not around a vague idea of what makes a web server 'production grade/ready'. |
Beta Was this translation helpful? Give feedback.
-
@errantmind as I have previously stated, I am pretty new to the http world, but this comment is interesting
Assuming this to be correct, why sending them at this point? The benchmark could be changed to not send at all, or the risk is to benchmark how smart is a framework to avoid wasteful work according the benchmark rules (that can happen, but fall into the "Stripped" definition mentioned above, to me). |
Beta Was this translation helpful? Give feedback.
-
I don't want to go into too much detail because there has always been argument around the definition of "web framework" but these are some headers for http/1 I check in my framework:
But again I don't think these should be consider rules or something. It's just my practice and others may have different opinion on handling the http spec. |
Beta Was this translation helpful? Give feedback.
-
It seems to me that before starting the test, you need to check the server for the basic rules for processing HTTP requests.
You can see that the client Expected Behavior:
Note: file |
Beta Was this translation helpful? Give feedback.
-
Could this issue be investigated? It pop up again as #8205 IMHO we could sum up both issue as: "If the server doesn't properly respond to In practice, A quick source code check returned some problematic hard-coded headers (not exhaustive search - this is why we need an automated test): |
Beta Was this translation helpful? Give feedback.
-
@nbrady-techempower
I cannot find any rule that forbid this, but I am not sure is cheating or not (here -> https://github.com/TechEmpower/FrameworkBenchmarks/wiki/Project-Information-Framework-Tests-Overview#requirements-5).
In short, if plaintext endpoint doesn't requires any of the request HTTP headers, is legit to NOT decode them at all?
This will speed up performance a lot, but if users would change the
Connection
header value into something different fromkeep-alive
or just send a malformed header, it won't be detected; and that doesn't make a "production-grade" usage, that's instead, against the rule.I assume this thing to be forbidden, but given I cannot find any specific rule, I cannot say. any idea?
Beta Was this translation helpful? Give feedback.
All reactions