I'm working on updating a project from MQX 3.8.1 to MQX 4.1. The most major change is the new HTTPSRV API and the associated changes. With the old HTTPD server I was able to modify the response header like so:
/* Send the reply */
session->response.contenttype = CONTENT_TYPE_HTML;
session->response.statuscode = 302;
strncat(session->response.header, "Location: control.html\n", HTTPDCFG_MAX_HEADER_LEN);
httpd_sendhdr(session, 0, 0);
How can do the same with MQX 4.1? session->response no longer has a header field.
Thanks,
Paul
Hi Paul,
it is no longer possible to modify a header of HTTP response directly. However in your case you can use a redirection in HTML using the http-equip attribute of the <meta> tag (see HTML meta http-equiv Attribute). And compose response using this tag in your CGI. Here is an example:
response.content_type = HTTPSRV_CONTENT_TYPE_HTML;
response.data = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">"
"<html><head><title>My Title</title>"
"<meta http-equiv=\"REFRESH\" content=\"0;url=my_uri.html\"></head>\n<body></body></html>";
response.data_length = strlen(response.data);
response.content_length = 0;
HTTPSRV_cgi_write(&response);
Edit:
Regarding the content length: If it is set to zero, HTTP server will signalize end of response entity by closing the connection and thus ignoring keep-alive flag of session.
Edit2:
In MQX 4.2 there will be support for chunked transmission encoding so you will not have to worry about content length.
Best regards,
Karel
Hi Karel,
Thanks for the reply. I'll give the http-equip attribute a try. Looks like a good alternative as long as it works with IE, Firefox, Chrome, Safari.
Best regards,
Paul