1<?php 2 3namespace Psr\Http\Message; 4 5/** 6 * Representation of an outgoing, client-side request. 7 * 8 * Per the HTTP specification, this interface includes properties for 9 * each of the following: 10 * 11 * - Protocol version 12 * - HTTP method 13 * - URI 14 * - Headers 15 * - Message body 16 * 17 * During construction, implementations MUST attempt to set the Host header from 18 * a provided URI if no Host header is provided. 19 * 20 * Requests are considered immutable; all methods that might change state MUST 21 * be implemented such that they retain the internal state of the current 22 * message and return an instance that contains the changed state. 23 */ 24interface RequestInterface extends MessageInterface 25{ 26 /** 27 * Retrieves the message's request target. 28 * 29 * Retrieves the message's request-target either as it will appear (for 30 * clients), as it appeared at request (for servers), or as it was 31 * specified for the instance (see withRequestTarget()). 32 * 33 * In most cases, this will be the origin-form of the composed URI, 34 * unless a value was provided to the concrete implementation (see 35 * withRequestTarget() below). 36 * 37 * If no URI is available, and no request-target has been specifically 38 * provided, this method MUST return the string "/". 39 * 40 * @return string 41 */ 42 public function getRequestTarget(): string; 43 44 /** 45 * Return an instance with the specific request-target. 46 * 47 * If the request needs a non-origin-form request-target — e.g., for 48 * specifying an absolute-form, authority-form, or asterisk-form — 49 * this method may be used to create an instance with the specified 50 * request-target, verbatim. 51 * 52 * This method MUST be implemented in such a way as to retain the 53 * immutability of the message, and MUST return an instance that has the 54 * changed request target. 55 * 56 * @link http://tools.ietf.org/html/rfc7230#section-5.3 (for the various 57 * request-target forms allowed in request messages) 58 * @param string $requestTarget 59 * @return static 60 */ 61 public function withRequestTarget(string $requestTarget): RequestInterface; 62 63 64 /** 65 * Retrieves the HTTP method of the request. 66 * 67 * @return string Returns the request method. 68 */ 69 public function getMethod(): string; 70 71 /** 72 * Return an instance with the provided HTTP method. 73 * 74 * While HTTP method names are typically all uppercase characters, HTTP 75 * method names are case-sensitive and thus implementations SHOULD NOT 76 * modify the given string. 77 * 78 * This method MUST be implemented in such a way as to retain the 79 * immutability of the message, and MUST return an instance that has the 80 * changed request method. 81 * 82 * @param string $method Case-sensitive method. 83 * @return static 84 * @throws \InvalidArgumentException for invalid HTTP methods. 85 */ 86 public function withMethod(string $method): RequestInterface; 87 88 /** 89 * Retrieves the URI instance. 90 * 91 * This method MUST return a UriInterface instance. 92 * 93 * @link http://tools.ietf.org/html/rfc3986#section-4.3 94 * @return UriInterface Returns a UriInterface instance 95 * representing the URI of the request. 96 */ 97 public function getUri(): UriInterface; 98 99 /** 100 * Returns an instance with the provided URI. 101 * 102 * This method MUST update the Host header of the returned request by 103 * default if the URI contains a host component. If the URI does not 104 * contain a host component, any pre-existing Host header MUST be carried 105 * over to the returned request. 106 * 107 * You can opt-in to preserving the original state of the Host header by 108 * setting `$preserveHost` to `true`. When `$preserveHost` is set to 109 * `true`, this method interacts with the Host header in the following ways: 110 * 111 * - If the Host header is missing or empty, and the new URI contains 112 * a host component, this method MUST update the Host header in the returned 113 * request. 114 * - If the Host header is missing or empty, and the new URI does not contain a 115 * host component, this method MUST NOT update the Host header in the returned 116 * request. 117 * - If a Host header is present and non-empty, this method MUST NOT update 118 * the Host header in the returned request. 119 * 120 * This method MUST be implemented in such a way as to retain the 121 * immutability of the message, and MUST return an instance that has the 122 * new UriInterface instance. 123 * 124 * @link http://tools.ietf.org/html/rfc3986#section-4.3 125 * @param UriInterface $uri New request URI to use. 126 * @param bool $preserveHost Preserve the original state of the Host header. 127 * @return static 128 */ 129 public function withUri(UriInterface $uri, bool $preserveHost = false): RequestInterface; 130} 131