Comments (6)
Hey @vicb, long time no see. How are you doing?
I don't see how you want to improve setHeaders actually. withAddedHeader and withHeader keep immutability. And setHeaders doesn't and it is basically only used in the constructor. Can you create a PR with what you had in mind?
from psr7.
@Tobion I'm doing very, working on the client side ATM - happy to hear about / see some of the PHP community members from time to time.
I mean SetHeaders
should not concat
but "Set" the header
So something along the line
public function withHeader($header, $value)
{
return $this->withHeaderClone($header, $value, /* clone */ true);
}
private function setHeaders(array $headers)
{
foreach ($headers as $header => $value) {
$this->withHeaderClone($header, $value, /* clone */ false);
}
}
An other thing I notice (actually why I look at the code first) is that:
// sends Content-Type: b
->withHeader('content-type', 'a')
->withHeader('Content-Type', 'b')
// sends content-type: b
->withHeader('Content-Type', 'a')
->withHeader('content-type', 'b')
It seems weird to me that we use the last name - and the spec is not deterministic on this point.
why the last, why not the first ?
I was looking at node.js and it seems that it normalizes the names
from psr7.
A possible refactoring would always mean to introduce more methods to the trait, which makes it slightly slower and adds more extension points that need to be maintainted (because you cannot hide methods in a trait). I think that is way worse than a few lines of duplicated code.
It seems weird to me that we use the last name - and the spec is not deterministic on this point.
True, AFAIK it's not clearly specified. But I think it makes more sense the way it is. There might a use-case to actually change the header case because of legacy clients or whatever. So this allows to do that. If you really need to keep the original case is kinda strange because that would mean you rely on the fact that the header has been specified before at all. So either you care about the header case, then you write it the way you want. Or you don't care (because it shouldn't matter), then you also do not care what the case was before.
from psr7.
A possible refactoring would always mean to introduce more methods to the trait, which makes it slightly slower and adds more extension points that need to be maintainted (because you cannot hide methods in a trait). I think that is way worse than a few lines of duplicated code.
Couldn't you call a function outside of the trait (oh... long time no PHP...)
But I think it makes more sense the way it is
The original bug report on Angular could be triggered with
->withHeader('authorization', 'b') // Apache will ignore this
so I think normalization is slighty less worse...
from psr7.
Well, automatic normalization is a completely different topic and definitely not implied in PSR-7.
Couldn't you call a function outside of the trait
That would be an extension point as well.
from psr7.
Makes sense, closing then.
from psr7.
Related Issues (20)
- Error when $version parameter is null in Message:parseRequest HOT 8
- PHP 8.2 Deprecated Messages HOT 3
- GuzzleHttp\Psr7\Message::bodySummary() incorrect cut off characters in unicode encoding HOT 1
- Missing typehints HOT 1
- GuzzleHttp\Psr7\Uri Incorrectly filled port, when converted to a string HOT 2
- Message::toString throw error when headers is list array HOT 1
- Content-Type assumption not done if the file don't have extension HOT 4
- $response->getBody()->getContents() returns empty string HOT 4
- "HTTP/2 200 is not valid header value" on 2.5.0 HOT 11
- AAC MimeType has a Typo HOT 5
- Remove ralouphie/getallheaders dependency ? HOT 5
- Exception in \GuzzleHttp\Psr7\Message::toString with poor (numeric) header HOT 3
- `Uri::__toString()` can yield malformed URIs HOT 1
- Header::parse loosing cookies with same name
- Declaration Error in GuzzleHttp\Psr7\Uri because of missing type hint for arguments. HOT 5
- summarize the multibytes(utf8) payload stream maybe cause the content unreadable
- Cross Origin - Allow optional protocol upgrade HOT 4
- StreamWrapper::stream_stat() should not always return an array
- Parsing Link header doesnโt handle URLs with commas HOT 1
- Header validation (InvalidArgumentException : ":<header>" is not valid header name) HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. ๐๐๐
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google โค๏ธ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from psr7.