如何处理PIC18和Firefox之间的http交换?

如何处理PIC18和Firefox之间的http交换?,http,networking,tcp,frames,pic18,Http,Networking,Tcp,Frames,Pic18,我在做一个http通信项目。目标是通过以太网链路在PIC18F67j60微控制器(PIC18搭载以太网模块)和主机之间交换http数据(例如JSON数据)。计算机作为客户端,PIC18作为服务器。我正在用C语言进行MPLABX IDE编程。 我还使用Wireshark对图片和计算机之间交换的帧进行精确查看。我已经设法在PIC18和主机之间建立了TCP连接(我可以在Wireshark上看到它,它正确地显示了三向握手过程)。为了简单起见,下面是我测试http通信的方法:我运行firefox,并在上面

我在做一个http通信项目。目标是通过以太网链路在PIC18F67j60微控制器(PIC18搭载以太网模块)和主机之间交换http数据(例如JSON数据)。计算机作为客户端,PIC18作为服务器。我正在用C语言进行MPLABX IDE编程。 我还使用Wireshark对图片和计算机之间交换的帧进行精确查看。我已经设法在PIC18和主机之间建立了TCP连接(我可以在Wireshark上看到它,它正确地显示了三向握手过程)。为了简单起见,下面是我测试http通信的方法:我运行firefox,并在上面键入:“我的微控制器的@IP:端口号”。这样firefox就可以发送一个http GET请求(“GET http/1.1..”),然后我的微控制器通过向firefox发送“http/1.1 200 OK…”来接收和回复。我可以在wireshark上清楚地看到这个回复(“HTTP/1.1200 OK…”),这表明从PIC18发送的回复帧是HTTP类型(见下图)。但是Firefox似乎不想显示数据内容(JSON数据),而是发送了一个我完全不理解的TCP保持活动请求有人知道为什么Firefox不想显示JSON数据,而是一直发送TCP保持活动请求吗?还是我在http交换中遗漏了什么?。PS:对于那些可能不知道的人来说,wireshark可以分析帧并指出这些帧所发生的问题,因此彩色线(见下图)与特定类型的问题相关联。更准确地说,根据Wireshark的说法,在图片上,紫色线与“坏TCP:TCP.analysis.flags”问题相关联。谢谢你的帮助


如果要在浏览器中将数据显示为文本,则需要在
内容类型
标题中使用正确的值。目前您使用的是
application/json
,它对浏览器没有固有的意义,即它不知道这些数据应该如何显示。相反,您需要使用
text/plain的
内容类型


除此之外,您似乎使用了一些损坏的HTTP堆栈。它不指定响应正文的大小(使用
内容长度
),但也不会在发送响应后关闭连接。这意味着当响应完成时,客户端(Firefox)不知道它,它将一直等待,并且不会显示任何内容。

TCP保持活动与此无关。您希望Firefox如何显示JSON?它可以直接显示HTML、文本和图像,但是使用JSON它应该做什么呢?JSON通常在一些web应用程序中使用,然后从中提取信息并将其呈现为HTML。感谢@SteffenUllrich的回复。我只想让Firefox以原始形式显示数据,如下所示:{“key”:“value”}因此在文本形式Thank you@SteffenUllrich中,我尝试了这个方法,但仍然不起作用。以下是我从WireShark看到的,Firefox似乎正确接收了所有内容,但仍然没有显示数据文本:“HTTP 200 OK\r\n连接:关闭\r\n内容类型:text/html\r\n缓存控制:无缓存\r\n\r\n{“key”:“OK”}@艾达什:虽然我清楚地说了
text/plain
,但为什么要使用
text/html
?而且,这看起来根本不是正确的HTTP响应(即,它应该是
HTTP/1.1200..
而不是
HTTP 200..
)。您也没有任何
内容长度
,但您似乎保持连接打开-这使得无法检测响应何时结束。这是PIC18上的某个自写(且已损坏)HTTP堆栈吗?非常抱歉,我只是键入了一个错误,以便正确的帧Wireshark看到响应(我一直从PIC18发送的)是:HTTP/1.1200 OK\r\n内容类型:text/plain\r\n缓存控制:no Cache\r\n\r\n{“key”:“OK”}尽管如此,firefox仍继续运行以搜索数据,并不断发送一些TCP请求,就好像他没有从PIC收到任何东西一样。最后firefox显示“Error”“@SteffenUllrich@Idash:再次:“您也没有任何内容长度,但您似乎保持连接打开-这使得无法检测响应何时结束。这是PIC18上的某个自写(和损坏)HTTP堆栈吗?”.Firefox正在等待更多,因为您的响应没有指定响应的结束位置。另请参阅更新的答案。