# Response headers is empty

**URL:** https://discourse.slimframework.com/t/response-headers-is-empty/4936
**Category:** Questions
**Created:** [August 31, 2021, 4:44pm UTC](https://discourse.slimframework.com/t/response-headers-is-empty/4936 "2021-08-31T16:44:46Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![Awilum](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.slimframework.com/awilum/32/900_2.png) [@Awilum](https://discourse.slimframework.com/u/Awilum)
#### Post date: [August 31, 2021, 4:44pm UTC](https://discourse.slimframework.com/t/response-headers-is-empty/4936/1 "2021-08-31T16:44:46Z")

</div>

```php
use Slim\Psr7\Response as R;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;

/**
 * Login page
 *
 * @param Request $request ServerRequestInterface
 * @param Response $response ResponseInterface.
 */
public function login(Request $request, Response $response): Response
{
    $r = new R();
    $r->withHeader('Location', 'http://localhost');
    
   dump($r);
   dd($r->getHeaders());
   
    ...
}

```

```php
^ Slim\Psr7\Response {#423 ▼
  #status: 200
  #reasonPhrase: ""
  #protocolVersion: "1.1"
  #headers: Slim\Psr7\Headers {#424 ▼
    #globals: []
    #headers: []
  }
  #body: Slim\Psr7\Stream {#425 ▼
    #stream: stream resource @508 ▶}
    #meta: null
    #readable: null
    #writable: null
    #seekable: null
    #size: null
    #isPipe: null
    #finished: false
    #cache: null
  }
}

```

```auto
[]

```

Why headers are empty for new response ?

Real code example, is that I am using redirect() helper inside method login() and it is not works because new response headers are empty for some reason.

```auto
"slim/slim": "^4.8.1",
"slim/psr7": "^1.4",

```

> <https://github.com/flextype/flextype/blob/dev/src/flextype/helpers/urls.php#L120-L126>

---

<div class="post-metadata">

### Author: ![Awilum](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.slimframework.com/awilum/32/900_2.png) [@Awilum](https://discourse.slimframework.com/u/Awilum)
#### Post date: [August 31, 2021, 6:02pm UTC](https://discourse.slimframework.com/t/response-headers-is-empty/4936/2 "2021-08-31T18:02:54Z")

</div>

```php
    function redirect(string $routeName, array $data = [], array $queryParams = []): Response
    {
        $response = new Response();
        $response->withHeader('Location', urlFor($routeName, $data, $queryParams));
        $response->getBody()->write("Hello");
        return $response;
    }

```

Added for test and it works

```php
$response->getBody()->write("Hello");

```

but `$response->withHeader` is not.

---

<div class="post-metadata">

### Author: ![odan](https://avatars.discourse-cdn.com/v4/letter/o/9de053/32.png) [@odan](https://discourse.slimframework.com/u/odan)
#### Post date: [August 31, 2021, 7:40pm UTC](https://discourse.slimframework.com/t/response-headers-is-empty/4936/3 "2021-08-31T19:40:57Z")

</div>

The headers are immutable. This should work:

```php
$response = $response->withHeader('Location', 'new url');

```

---

<div class="post-metadata">

### Author: ![Awilum](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.slimframework.com/awilum/32/900_2.png) [@Awilum](https://discourse.slimframework.com/u/Awilum)
#### Post date: [September 1, 2021, 5:01am UTC](https://discourse.slimframework.com/t/response-headers-is-empty/4936/4 "2021-09-01T05:01:34Z")

</div>

Thanks! it is works

but does this correct here:

> <https://github.com/slimphp/Slim/blob/4.x/Slim/Routing/RouteCollectorProxy.php#L204>

---

<div class="post-metadata">

### Author: ![odan](https://avatars.discourse-cdn.com/v4/letter/o/9de053/32.png) [@odan](https://discourse.slimframework.com/u/odan)
#### Post date: [September 1, 2021, 6:04am UTC](https://discourse.slimframework.com/t/response-headers-is-empty/4936/5 "2021-09-01T06:04:58Z")

</div>

Yes this is also correct in this context. It just returns the new instance directly.
