文档章节

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

Freewheel
 Freewheel
发布于 2015/03/24 22:17
字数 505
阅读 57
收藏 0

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

© 著作权归作者所有

Freewheel
粉丝 11
博文 83
码字总数 48265
作品 0
普陀
程序员
私信 提问
10053 您的主机中的软件中止了一个已建立的连接

场景 在不同的开发机器上,建立HTTP1.1连接,有的机器会进行一两次交互后,会检测到断开连接。这种情况下,会需要重连服务器。一般断开的原因包括硬件/路由/代理服务器。 目前尝试添加Keep-...

fengyuzaitu
2018/05/19
0
0
swoole http server 性能优化

上线了一个基于 swoole http server 的服务以后,发现这个服务的请求耗时监控毛刺十分严重,接口耗时波动比较大,经过一段时间的分析,发现这个服务 response 包十分大,有些 response 包高达...

anoty
2018/08/21
190
0
取消掉Transfer-Encoding:chunked

有时候,Web服务器生成HTTP Response是无法在Header就确定消息大小的,这时一般来说服务器将不会提供Content-Length的头信息,而采用Chunked编码动态的提供body内容的长度。 进行Chunked编码...

晨曦之光
2012/03/09
8.2K
0
13.python中web框架概念的引入。

一、什么是web框架? 框架,就是一个为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演。 对于所有...

苏浩智
2017/06/12
0
0
play2.0文档-面向java开发者(3)

Manipulating the response 处理应答 Changing the default Content-Type 改变默认内容类型 The result content type is automatically inferred from the Java value you specify as body.......

老盖
2012/04/09
628
0

没有更多内容

加载失败,请刷新页面

加载更多

家庭作业——苗钰婷

2 编写一个程序,发出一声警报,然后打印下面的文本: Startled by the sudden sound, Sally shouted, "By the Great Pumpkin, what was that! #include<stdio.h>int main(){......

OSC_Okruuv
16分钟前
1
0
经典系统设计面试题解析:如何设计TinyURL(一)

原文链接: https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
17分钟前
1
0
2.面向对象设计原则(7条)

开闭原则 开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。 实现方法 可以通过“抽象约束、封装变化”来实...

Eappo_Geng
19分钟前
2
0
8086汇编基础 debug P命令 一步完成loop循环

    IDE : Masm for Windows 集成实验环境 2015     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   ......

志成就
23分钟前
2
0
使用nodeJS实现前端项目自动化之项目构建和文件合并

本文转载于:专业的前端网站➜使用nodeJS实现前端项目自动化之项目构建和文件合并 前面的话   一般地,我们使用构建工具来完成项目的自动化操作。本文主要介绍如何使用nodeJS来实现简单的项...

前端老手
37分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部