当使用带有https的tomcat7时,我发现数据包的内容应该在一个数据包中,但它会被传输到两个数据包。
我认为ssl的设置还可以。我可以使用htpps访问web,或者使用wget --ca-certificate=/home/alice/root.crt https://IP:8443
,它显示200 ok。
这是与tomcat对话的日志。
Thu Sep 2 10:17:24 2015,comm.c[336](func_send): release qbuf to empty_qbuf_head ok.
Thu Sep 2 10:17:24 2015,comm.c[279](func_send): wait SEM_SEND.
Thu Sep 2 10:17:24 2015,comm.c[702](sock_recv): result=1 Recv Data _pdb: H
Thu Sep 2 10:17:24 2015,comm.c[432](func_recv): res=1 Recv Data p_data: H
Thu Sep 2 10:17:24 2015,comm.c[435](func_recv): colin bbb TO func_recv countqn=1
Thu Sep 2 10:17:24 2015,comm.c[436](func_recv): insert qbuf to recv_qbuf_head ok.
Thu Sep 2 10:17:24 2015,comm.c[493](func_recv): post SEM_RECV.
Thu Sep 2 10:17:24 2015,comm.c[402](func_recv): colin aaa TO func_recv countqn=2
Thu Sep 2 10:17:24 2015,comm.c[410](func_recv): get qbuf from empty_qbuf_head ok.
Thu Sep 2 10:17:24 2015,comm.c[418](func_recv): colin ready to sock_recv.
Thu Sep 2 10:17:24 2015,comm.c[702](sock_recv): result=1285 Recv Data _pdb: TTP/1.1 200 OK
Server: Apache-Coyote/1.1
SOAPAction:
Content-Type: text/xml;charset=ISO-8859-1
Content-Length: 1124
Date: 02 Sep 2015 02:16:51 GMT
“Recv Data _pdb”是我收到的数据包。我收到H
然后TPP/1.1 ...
,它会出错。如果收到HTTP/1.1 ...
,一切都很好。
通常,数据包应为HTTP/1.1 ...
,但它表明tomcat发送数据包H
和数据包TTP/1.1 ...
。
我找到了一些HTTP连接器https://tomcat.apache.org/tomcat-7.0-doc/config/http.html
的设置,但没有任何关系。
Tomcat版本:Apache Tomcat / 7.0.52(Ubuntu) OS: 分销商ID:Ubuntu 描述:Ubuntu 14.04.2 LTS 发布:14.04 代号:可信赖
这是server.xml的部分内容。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
redirectPort="8443" />
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/home/jack/example.pkcs12"
keystoreType="PKCS12"
keystorePass="password" />
有人有想法吗?让我知道哪一方是错的。感谢。
2015/09/03更新: 在服务器端,我使用tcpdump来捕获数据包,并打开wireshark来解析它。因为设备收到H和TPP / 1.1,所以会话不完全;因此,我们不能使用带有私钥的wireshark来解密数据包.I只能看到数据长度来猜测它。如前所示,tomcat发送两个数据包。
答案 0 :(得分:0)
他们都是对的。 HTTP协议未在数据包中定义,而是作为字节流。底层的TCP / IP协议必须将流选择为数据包,但它们会在接收端按顺序重新组装。
如果您的代码读取HTTP,则必须等待更多输入。它不能假设数据一起或以某些块的形式到达。
数据结束在HTTP中定义明确。当收到2对CR LF
(CR LF CR LF
)时,HTTP标头结束。如果标头指示有效负载,则标头必须:
Content-Length
)Transfer-Encoding: chunked
)keep-alive
。连接关闭时数据结束。