【问题标题】:Webserver parsing chrome input from post requestWeb服务器解析来自发布请求的chrome输入
【发布时间】:2010-04-11 13:07:08
【问题描述】:

我正在开发一个小型嵌入式 Web 服务器。我想添加对发布请求的解析,但我在 Chrome 输入密码字段时遇到问题。 Firefox 和 IE 完美运行。

HTML:

<form action="start.webem" method="post"> 
<input value="START" type="submit" /><!--#webem start --> 

Password: <input type="password" name="yourname"  autocomplete="off" /> 
</form> 

我从 Firefox 得到

POST /stop.webem HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://127.0.0.1:8080/
Content-Type: application/x-www-form-urlencoded
Content-Length: 13

yourname=test

但是在 Chrome 中,大约 90% 的情况下,yourname=test 是缺失的

POST /start.webem HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.1.249.1045 Safari/532.5
Referer: http://127.0.0.1:8080/
Content-Length: 13
Cache-Control: max-age=0
Origin: http://127.0.0.1:8080
Content-Type: application/x-www-form-urlencoded
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

不过,有时它确实有效!!!

POST /start.webem HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.1.249.1045 Safari/532.5
Referer: http://127.0.0.1:8080/start.webem
Content-Length: 13
Cache-Control: max-age=0
Origin: http://127.0.0.1:8080
Content-Type: application/x-www-form-urlencoded
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

yourname=test

我找不到导致它有时工作的原因。

【问题讨论】:

  • 这在基本测试工具中对我来说 100% 有效...您在页面上的其他任何地方是否还有另一个名为“yourname”的输入元素?
  • 不,页面上没有其他输入元素。

标签: google-chrome


【解决方案1】:

您可能没有从 Web 服务器的套接字中读取数据的第二部分。这可能说明了为什么有时它会起作用。

【讨论】:

  • 这听起来很合理。 Chrome 会拆分请求吗?
  • 无法保证在一个数据包中获取所有发送的数据。数据可以在网络堆栈的任何级别进行分段。 1) 浏览器可以通过两次单独调用send函数来发送数据; 2)由于MTU限制,OS网络栈可以将一次调用发送的数据分成两个数据包; 3)同样的情况也可能发生在路由器等网络设备上; 4)这两个数据块可以在网络堆栈中加入并作为一个数据包发送。
  • 是的,这就是解决方案。奇怪的是Chrome发了两个包,而FF和IE发了一个。但是,显然(在阅读了 loislo 的评论之后)最好不要假设只有一个数据包。一旦我重写了我的后解析器以处理多个数据包中的请求,那么一切都适用于所有浏览器。谢谢。
【解决方案2】:

可能是因为您的 HTML 非常无效。解决这个问题,你的问题就会消失...

<form action="start.webem" method="post"> 
<input value="Start" type="submit" />

<p>
  <label for="yourname">Password:</label>
  <input id="yourname" name="yourname" type="password" autocomplete="off" />
</p>
</form>

对您的评论:

HTML 在技术上不区分大小写,但您永远不应该使用大写的标签/属性名称。那只是不好的做法。

我认为它有时会起作用的原因是因为您有一个打开的段落标签,但从未关闭它,因此 Chrome 有时可能会将段落放在您的表单之外。

【讨论】:

  • 我注意到 Chrome 比其他浏览器对 html 格式敏感得多,所以我可以相信这是问题所在。您似乎已将所有内容都转换为小写,并用引号将值括起来。 Chrome 是否区分大小写!!!!你能解释一下为什么它有时会起作用吗?
  • 乍一看,它看起来像是之前的有效 HTML 5(不是好的 HTML 5,但有效)。
  • “修复”段落标签没有帮助。也没有全部删除。
  • 在值周围加上引号并使用小写字母并没有帮助。我已经编辑了原始问题以显示我现在使用的 HTML。
猜你喜欢
  • 2013-11-11
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多