3.1.4.2.1 Sending the PushStart Request

If the TCP connection that was used for sending the most recent HTTP request to the server was closed, the client MUST establish a new TCP connection to the server by using the IP address and port number obtained by parsing the URL (this is the same URL that was used for the PushSetup request). Using HTTP proxy servers is permitted, in which case the TCP connection is made to the proxy server instead of to the server specified in the URL. If a proxy server is used, the value of the UsingProxy flag in the abstract data model MUST be set to 1.

The PushStart request MUST adhere to the syntax specified in section 2.2.2.2.

The request sent by the client MUST NOT specify any of the headers and tokens specified in section 2.2.1 that are defined only for use in responses.

The client MUST specify the User-Agent (section 2.2.1.8) header in the request.

The client MUST specify the Content-Type (section 2.2.1.1) header.

If the value of the UsingProxy variable in the abstract data model is 1, the value of the Length-Remaining variable in the abstract data model SHOULD be set to approximately the number of bytes that the client expects to stream to the server in a 60-second period. Length-Remaining MAY be set to 2147483647, which is the maximum positive value for a 32-bit signed integer. If the duration and size of the stream being encoded and/or transmitted is unknown, then Length-Remaining SHOULD be set to 2147483647.

If the value of the UsingProxy variable in the abstract data model is 0, the value of the Length-Remaining variable SHOULD be set to 2147483647.

Under any circumstances, the value of Length-Remaining MUST NOT be set to a value that is less than the size of three maximum-size $D packets or less than the maximum size of an $H or $C packet that the client intends to send plus 4. A maximum-size $D packet is a $D packet where the ASF data packet did not have a Padding Data field to remove prior to encapsulation in the $D packet. Details are specified in section 2.2.3.3.

The client MUST specify the Content-Length header (as specified in [RFC2616] section 14.13), and the numerical value specified on that header MUST be equal to the value of the Length-Remaining variable. It follows from the use of a Content-Length header that chunked transfer coding (as specified in [RFC2616] section 3.6.1) MUST NOT be used.

The client SHOULD specify the X-Accept-Authentication (section 2.2.1.9)  header.<3>

If the client is responding to an HTTP authentication challenge, it MUST include the Authorization header (as specified in [RFC2616] section 14.8) if the challenge is from a server, or the Proxy-Authorization header (as specified in [RFC2616] section 14.34) if the challenge is from a proxy.

The Cookie (section 2.2.1.3) header MUST be included in the request. The push-id cookie MUST be included on the Cookie header, and the value of Push-ID variable in the abstract data model MUST be used as the value for that cookie.

Next, the client MUST send the request line and headers of the PushStart request but not the message body.

If a PushStart request has not been previously and successfully sent, then the client MUST send the $H packet at this time, as specified in section 3.1.4.2, and Length-Remaining MUST be decreased by the number of bytes in the $H packet.

The client MUST then notify the higher layer that it has sent the PushStart request because the sending of this request might trigger events from the higher layer.

The client MUST then wait for a higher-layer triggered event or for the response to the PushStart request to be received. How to process the response is specified in section 3.1.5.2.