• HTTP/1.1 100 Continue


    今天用 c 的 socket() 模拟发送http请求:上传一张图片到服务器。

    在本地测试,本地电脑: xp, iis5.1

    经过半天时间对 http post file 协议的了解,代码已经写好,测试发现,socket使用http协议上传文件,服务器端已经可以正常的接收,并保存数据到新生成的文件中,但是 客户端 socket 发送完所有数据,然后读取服务器端返回的数据时,显示结果:

    HTTP/1.1 100 Continue

    Server: Microsoft-IIS/5.1

    Date: Mon, 31 Mar 2014 05:52:22 GMT

    X-Powered-By: ASP.NET

    并不是我所期望的 HTTP/1.1 200 OK

    在网上不断的搜索相关资料,找到原因:

    100状态码 的目的在于允许客户端判定服务器是否愿意接受客户端发来的消息主体(基于请求头域)在客户端发送此请求消息主体前。 在有些情况下,如果服务器拒绝查看消息主体,这时客户端发送消息主体是不合适的或会降低效率。)

    就是说 ‍Expect:100-Continue的作用是,设定Client 和 Server在Post数据前需要进行 ‍“请求头域” 的数据匹配,相当于是握手。如果匹配则开始进行body 的内容,Post数据。否则,报错(417) Unkown。

    来源: http://hi.baidu.com/leo_han/item/9bdd1068bc6f7131ad3e8333

    其他相关资料:http://zhidao.baidu.com/question/396434329.html

                  http://www.laruence.com/2011/01/20/1840.html

    我仔细检查了源代码,发送的http header中没有与 Expect:100-Continue 相关的任何数据。

    我后来测试上传图片到 win2003(iis6.0)上,就可以正常的返回 HTTP/1.1 200 OK

    这就是说,上传到不同的系统不同的服务器上,有可能返回 HTTP/1.1 100 Continue,也有可能不返回。

    那在代码中,send()完 http header 部分后,我该怎么办?

    我测试了,如果发送完 http header 部分,然后先 recv(), 如果遇到 iis5.1 会马上接收到 HTTP/1.1 100 Continue

    可遇到 iis6.0,就会阻塞住,直到 recv timeout, 这会严重影响处理的性能。

    接收也不是,不接收也不是。

    解决办法就是,发送完数据后,接收到两段消息,写程序过滤掉 HTTP/1.1 100 Continue,检查是否有HTTP/1.1 200 OK:

    HTTP/1.1 100 Continue

    Server: Microsoft-IIS/5.1

    Date: Mon, 31 Mar 2014 07:12:52 GMT

    X-Powered-By: ASP.NET

    HTTP/1.1 200 OK

    Server: Microsoft-IIS/5.1

    Date: Mon, 31 Mar 2014 07:12:52 GMT

    X-Powered-By: ASP.NET

    Connection: close

    Content-Length: 18

    Content-Type: text/html; Charset=utf-8

    Set-Cookie: ASPSESSIONIDAQDQBASB=APILENHAPOJMNCDIANAHGHJM; path=/

    Cache-control: private

    abc123131abcefgkad

    ----------------------------------------------------------------------------------------------

    http post file 简单协议,我的了解是这样:

    POST /up/test.asp?action=submit HTTP/1.1

    Accept: */*

    Accept-Language: zh-cn

    User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA)

    Host: www

    Content-Type: multipart/form-data; boundary=x580xo3z1x2yemam

    Content-Length: 144

    Connection: close

    --x580xo3z1x2yemam

    Content-Disposition: form-data; name="pic"; filename="x.txt"

    Content-Type: image/jpeg

    文件内容[二进制数据]

    --x580xo3z1x2yemam--

    其中这里的 Content-Length: 144 特别需要注意, 这个 144 = 上面黑色粗体的所有内容加起来的 size

    来源:http://blog.csdn.net/ruixj/article/details/5986063#t2

    来源:http://www.cnblogs.com/cswuyg/archive/2013/07/11/3185164.html

    来源:http://blog.csdn.net/xiaojianpitt/article/details/6856536

    关于 http header 详细的介绍:

    http://www.cnblogs.com/pipelone/archive/2009/03/26/1422140.html

    2014-03-31

  • 相关阅读:
    平面几何-9 (海边直播目标2017全国初中数学竞赛班第14周作业题)
    数学奥林匹克问题解答:平面几何-8
    数学奥林匹克问题解答:平面几何-7
    lazyload懒加载插件
    Vue的生命周期
    用Vue来实现音乐播放器(九):歌单数据接口分析
    axios的详细用法以及后端接口代理
    用Vue来实现音乐播放器(八):自动轮播图啊
    Vue实现音乐播放器(七):轮播图组件(二)
    Vue实现音乐播放器(六):jsonp的应用+抓取轮播图数据
  • 原文地址:https://www.cnblogs.com/personnel/p/4584930.html
Copyright © 2020-2023  润新知