This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3235MODSF:使 HTTP 标头变大

Guru**** 1127450 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1209559/cc3235modsf-making-http-header-larger

器件型号:CC3235MODSF

使用器件身份验证令牌。  令牌的大小约为1200字节。

当尝试使设备身份验证令牌的 HTTP 标头更大时、会出现以下结果:

 

  1. 根据建议将 httpclient.h、httpclient.c、httpclient.h、httpclient_internal.h 复制到 CCS 工程。

HttpClient_connect2返回错误代码-370

 

  1. 在 httpclient_internal.h 中将 HttpClient_BUF_LEN 修改为2048并重建库

HttpClient_connect2不返回并且编程出现 NMI 崩溃。  可能的堆栈溢出?

 

  1. 在 httpclient_internal.h 中将 HttpClient_BUF_LEN 修改为1408并重新编译库

HttpClient_connect2返回错误代码-2006

 

  1. 在 httpclient_internal.h 中将 HttpClient_BUF_LEN 修改回原始值256并重建库

HttpClient_connect2返回错误代码0并且成功连接至 BD 主机应用程序(网关)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    370与 HTTPIF_SetSecMethod 相关。 由于某种原因、在使用该函数时、我们会尝试使用 TLV1.0、但会被服务器拒绝。 我需要在这里检查问题是什么。

    如果避免此情况、它将成功连接(使用 TLS1.2)。

    Connect2()与  HttpClient_BUF_LEN 无关,因此无论如何都应该通过。

    当你调用 HttpClient_sendRequest 时、缓冲区大小会产生影响。

    如果增加 HttpClient_BUF_LEN ,则应增加"httpTask"的堆栈大小,因为缓冲区是在堆栈(!!)上分配的。

    请参阅  "platform.c"中的 task_stack_size。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我是使用 SlNetSock_secAttribSet ()来设置 TLS1.2的,所以我不知道为什么要尝试其他的东西。

    此外、今天早上早些时候我谈到了堆栈大小、并在 httpclient_internal.h 中将 task_stack_size 修改为4096并将 HttpClient_BUF_LEN 修改为2048并重新编译库

    HttpClient_connect2返回错误代码-3008

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    SlNetSock_secAttribSet (SLNETSOCK_SEC_ATTRIB_METHOD)中似乎存在问题-目前请勿使用它。 默认为 TLS1.2。

    如果您更新堆栈大小、则还需要更新堆(如果您使用 TIRTOS、这可以通过更新链接器 cmd 文件来实现、否则您应该 更新 FreeRTOSConfig.h)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我禁用了对   SlNetSock_secAttribSet (SLNETSOCK_SEC_ATTRIB_METHOD)的调用、HttpClient_connect2仍返回错误代码-3008。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    3008是 HttpClient_EBODYBUFSMALL。  

    您是否仍在使用2KB 缓冲区大小?

    我能够使用您提供给我的调试代码将其传递给我。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我使用的是2KB 缓冲区大小。  如果我将缓冲区改回256字节(唯一的变化)、我可以连接主机并获得响应。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否更新了堆大小?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我在 cc32xxxsf_tirtos.cmd 中将 HEAD 大小修改为7000KB。  此外,我错了以前的一些,它不是  HttpClient_connect2(),而是 HttpClient_readResponseBody (),返回错误代码-3008。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,我想是这样的。

    您可能需要增加 传递给 HttpClient_readResponseBody 的 HTTP_MIN_RECV (数据缓冲区大小)  。

    如果可以进入  HttpClient_readResponseBody——那么您应该能够找到根本原因。

    (如果需要-按照我们昨天讨论的那样将 httpclient.c 复制到您的项目-这可以在调试过程中提供帮助)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我现在收到 HTTP 响应状态代码401未授权。  但是、如果我使用 Curl 或 Postman 尝试相同的请求、我将得到预期的响应。  令牌似乎未正确发送。  我将设置 Wireshark、以验证可确保令牌正确发送的器件令牌。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可以使用 http 转储服务器来比较请求的内容。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    HTTP 转储表明 HTTP 标头中缺少关键字"Bearer"。  就像使用 HttpClient_HFIELD_REQ_Authorization 对 HttpClient_setHeader 进行调用一样、令牌字符串未将关键字添加到 HTTP 标头、而是仅存储令牌字符串并发送它。   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的。 app-token 应包含"Bearer"作为前缀。

    您可以在 mqtt_client 示例中检查 ota_if_dropbox.c:

      #define app_token "Bearer" Dropbox_user_token

    (这适用于静态用户令牌、在您的情况下、它应该是令牌缓冲区的一部分)。

    请告诉我们它是否适用于修复。