用B-U585I-IOT02A开发板,并基于IOT_HTTP_WebServer示例进行自己的演示扩展。我使用的STM32CubeIDE版本为1.9.0,并通过"STM32 Project"向导中的"Example Selector"创建了IOT_HTTP_WebServer项目。在IOT_HTTP_WebServer源码中发现了一个Bug。
当我添加新的内容类型及其对应的HTTP请求头时发现了这个问题。我按照IOT_HTTP_WebServer/Demonstration/User/WebServer/App/http/webserver_http_response.c文件中http_send_headers_response()函数的现有模式扩展了源码,但在Chrome开发者工具中查看HTTP响应时,这些请求头并未显示。
这个问题在未修改的源码中也能复现,例如通过Chrome开发者工具查看IOT_HTTP_WebServer应用发送的CSS文件的HTTP响应头时,会发现这些请求头实际上没有接收。
具体原因是http_send_response()向http_send_headers_response()传递参数时,有两个参数的顺序出现了错误:
static WebServer_StatusTypeDef http_send_response(uint32_t headers_id,
uint32_t socket,
char *headers_buff,
const char *body_buff,
uint32_t data_size)
{
/* Send HTTP header response */
if (http_send_headers_response(headers_id, socket, headers_buff, data_size) != WEBSERVER_OK)
{
return HTTP_ERROR;
}
/* Send HTTP body response */
if (http_send(socket, (const char *)body_buff, data_size) != WEBSERVER_OK)
{
return HTTP_ERROR;
}
return WEBSERVER_OK;
}
/**
* @brief HTTP send headers responses data via socket
* @param socket : connection socket
* @param headers_id : specifies the header ID
* @param headers_buff : pointer to headers buffer
* @param data_size : size of body web resources
* @retval Web Server status
*/
static WebServer_StatusTypeDef http_send_headers_response(uint32_t socket,
uint32_t headers_id,
char *headers_buff,
uint32_t data_size)
{
...
}
|
|