actix / actix/actix-web

get route macro does not result in HEAD request support

Aperta
#2,702 6 commenti 11 reazioni 0 assegnatari Vedi su GitHub
A-web C-improvement help-wanted
Lingua principale
Rust
Stelle
24.8k
Fork
1.9k
Merge medio
23h 10m
PR unite (30g)
26

Descrizione

## Example test case

```
#[get("/foo")]
async fn foo() -> impl Responder {
"foo\r\n"
}
```

## Current Behavior
```
$ curl -v http://localhost:8080/foo
...
* Trying 127.0.0.1...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x55e8ff381fb0)
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /foo HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 200 OK
< content-length: 5
< content-type: text/plain; charset=utf-8
< date: Sat, 19 Mar 2022 18:30:00 GMT
<
foo
* Connection #0 to host localhost left intact
$ curl -v -I http://localhost:8080/foo
...
* Expire in 0 ms for 1 (transfer 0x55f159685fb0)
* Trying 127.0.0.1...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x55f159685fb0)
* Connected to localhost (127.0.0.1) port 8080 (#0)
> HEAD /foo HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 404 Not Found
HTTP/1.1 404 Not Found
< content-length: 0
content-length: 0
< date: Sat, 19 Mar 2022 18:30:58 GMT
date: Sat, 19 Mar 2022 18:30:58 GMT

<
* Connection #0 to host localhost left intact
$
```

## Expected Behavior

The `HEAD` request is implemented according to the RFC specification.

I can obtain the expected behaviour by writing:
```
#[route("/foo", method="GET", method="HEAD")]
```
but this is not ergonomic.

## Possible Solutions

1. Make the `get` macro work like `#[route("/foo", method="GET", method="HEAD")]` (and adjust documentation accordingly). This would mean that if an application author writes the obvious code, it is also correct.

2. Provide a new macro that behaves like `#[route("/foo", method="GET", method="HEAD")]`, and try to discourage application authors from using `#[get]`.

## References

[MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/HEAD), [RFC7231 4.3.2](https://httpwg.org/specs/rfc7231.html#HEAD).

## Your Environment

- Rust Version (I.e, output of `rustc -V`): `rustc 1.61.0-nightly (1bfe40d11 2022-03-18)`
- Actix Web Version: 4.0.1

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.