socket编写HTTP response header的一个小问题

  怎么用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

转载于:https://my.oschina.net/Bruce370/blog/391040

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值