socket编写HTTP response header的一个小问题
socket编写HTTP response header的一个小问题
Freewheel 发表于3年前
socket编写HTTP response header的一个小问题
  • 发表于 3年前
  • 阅读 14
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: HTTP response header,chrome,兼容性,问题,content_length

  怎么用socket编程编写一个HTTP response header?其实没什么特别的,只要了解HTTP response header的构成就行。关于HTTP request/response header的fields的介绍和详解——http://my.oschina.net/Bruce370/admin/new-blog 既有解释又有例子,很好的一个博客。

举个例子,我正在写的一个程序:

strcpy(s_header, "HTTP/1.1 200 Ok\r\nConnection: close\r\n");//必须以HTTP协议版本和状态码开头,其他的field顺序不重要
strcat(s_header, "Content-Type:text/html; charset=utf-8\r\nContent-Length:");//我打算发个html文件给客户端,所以Content-Type:text/html
itoa(fp_len, fp_len_char, 10);//fp_len_char是个字符串,存放html文件的长度
strcat(s_header, fp_len_char);
strcat(s_header, "\r\n");
strcat(s_header, s_buffer);//s_buffer是html文件读取后所在的buffer



HTTP  header 是以text明文形式进行编写的。


接下来说说遇到的问题——

在firefox上测试连接了我的server,可以成功接收到html文件并成功打开网页;

但是在Chrome上,却只能看见网页一直是一片空白,小圆圈一直转,最后显示没有接收到任何回复。

打开网页信息控制台(快捷键 ctrl+shift+j)后发现,显示以下错误

错误信息 net::ERR_CONTENT_LENGTH_MISMATCH

意思是,HTTP response header提供的内容长度信息和Chrome实际收到的不一致,因此浏览器将其判定为不合法的包,不进行显示。

网上查找之后,在stackoverflow里发现一些答案——



即浏览器的一些代理插件或者去广告工具可能导致修改了包的一些内容,但是并没有更改Header里Content Length的值,导致这种情况发生·······

我最后的解决办法就是·····················把Content Length这个属性去掉!于是成功debug~

(题外话,HTTP response Header 里,除了协议版本号和状态码,其他属性基本都不是一定要写的···stackoverflow里找到的一个帖子—— http://stackoverflow.com/questions/4726515/what-http-response-headers-are-required

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 8
博文 79
码字总数 48265
×
Freewheel
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: