作者:打篮球的乔巴 | 来源:互联网 | 2023-05-28 14:42
| Q | A| ------------------- | -----| Bug report? | yes| Swoft version
| Q | A
| ------------------- | -----
| Bug report? | yes
| Swoft version | 2.0.6
| Swoole version | 4.4.4
| PHP version | 7.2.20
在使用一些第三方的WS客户端库时候,发现swoft2的ws连接失败,使用其他框架可以正常连接。
抓包发现唯一差异在WS头信息KEY的大小写不同上,(Sec-WebSocket-Accept,Sec-WebSocket-Version,Sec-WebSocket-Protocol等)。
研究了下代码发现header方法的第三个参数$ucwords无效,默认null时还是默认做了KEY转换处理。
否则ucwords在true、false、null三种情况,为null时默认原始请求头。
1 2
| php
public function header(string $key, $value, $ucwords = null){} |
quickSend返还时header默认ucwords = null
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| php
public function quickSend(Response $response = null): void
{
$response = $response ?: $this;
// Ensure coResponse is right
$coResponse = $response->getCoResponse();
// Write Headers to co response
foreach ($response->getHeaders() as $key => $value) {
$headerLine = implode(';', $value);
if ($key === ContentType::KEY) {
$headerLine .= '; charset=' . $response->getCharset();
$coResponse->header($key, $headerLine);
} else {
$coResponse->header($key, $headerLine);
}
}
// Write COOKIEs
foreach ($response->COOKIEs as $n => $c) {
$coResponse->COOKIE($n, $c['value'], $c['expires'], $c['path'], $c['domain'], $c['secure'], $c['httpOnly']);
}
// Set status code
$coResponse->status($response->getStatusCode());
// Set body
$content = $response->getBody()->getContents();
$coResponse->end($content);
// Ensure sent
$this->sent = true;
} |
该提问来源于开源项目:swoft-cloud/swoft
ok 谢谢。 我这考虑下怎么改