V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GaryZ
V2EX  ›  程序员

android 发 HTTP 请求上传图片时,用网站地址发不同,只能用 IP 地址发(经 Nginx)

  •  
  •   GaryZ · 2015-03-25 09:17:44 +08:00 · 3222 次点击
    这是一个创建于 3537 天前的主题,其中的信息可能已经有所发展或是发生改变。

    android 实现上传图片到服务端,用到了httpmime这个包,发送复杂格式的数据到服务端,正常测试环境都没有问题,但是在正式环境上HTTP求情就发送不过去,后来检查如果把http请求的地址改成服务器IP地址就没问题,请问这是什么原因? 是android 的原因还是Nginx的原因? 如何解决?

    第 1 条附言  ·  2015-03-25 09:59:51 +08:00
    抱歉,各位,可能描述的不太多,正文说“发送不过去” 说的不正确。

    应该改为“如果我用 域名发送请求,能到达Nginx,之后就没了。如果我用IP发请求,就会正常,啥问题都没有。"
    第 2 条附言  ·  2015-03-25 10:36:00 +08:00
    谢谢各位!问题找到了。Nginx1.3.9以下版本都存在当用户POST一个带有文件的请求的时候,出现HTTP 411错误。所以提交都失败了。需要打补丁。 资料:http://blog.prosight.me/blogs/1154/

    谢谢各位帮忙!
    18 条回复    2015-03-26 02:33:05 +08:00
    jokester
        1
    jokester  
       2015-03-25 09:21:15 +08:00
    did the request reached nginx? have you looked at the request?
    ETiV
        2
    ETiV  
       2015-03-25 09:23:31 +08:00 via iPhone
    服务器在哪?域名是否备案?
    GaryZ
        3
    GaryZ  
    OP
       2015-03-25 09:35:56 +08:00
    @jokester yes.it is.

    @ETiV 服务器就在隔壁,已备案,网站都已经上线了
    ETiV
        4
    ETiV  
       2015-03-25 09:44:26 +08:00 via iPhone
    在本地用curl之类的模拟提交一次?

    “发送不过去”的描述不是很准确,是断网后发不出去?还是域名解析不了发不出去?还是发出去了,服务器响应有问题?
    lfzyx
        5
    lfzyx  
       2015-03-25 09:47:59 +08:00
    看nginx 的日志
    GaryZ
        6
    GaryZ  
    OP
       2015-03-25 09:49:46 +08:00
    @ETiV 如果我用 域名发送请求,能到达Nginx,之后就没了。如果我用IP发请求,就会正常,啥问题都没有。
    jokester
        7
    jokester  
       2015-03-25 09:51:29 +08:00
    顶楼说"发送不过去"
    下面又说请求到nginx了
    找人帮忙至少把事情说清楚吧。。
    GaryZ
        8
    GaryZ  
    OP
       2015-03-25 10:00:11 +08:00
    @jokester 不好意思,描述的不太正确。见谅
    aru
        9
    aru  
       2015-03-25 10:05:39 +08:00
    先试试在android里面用域名下载网站里面的一个图片
    ETiV
        10
    ETiV  
       2015-03-25 10:06:33 +08:00 via iPhone
    那就看看nginx的log吧,都打开。

    其实你自己会诊断问题,一般都不需要求助别人了~
    virusdefender
        11
    virusdefender  
       2015-03-25 10:14:53 +08:00
    这种问题应该好解决~先写个html或者js上传试试
    thyrlian
        12
    thyrlian  
       2015-03-25 10:15:17 +08:00
    用CharlesProxy或者Wireshark监听, 看你的Request Payload和Response Header/Body返回信息究竟如何.
    ryd994
        13
    ryd994  
       2015-03-25 11:40:04 +08:00
    这是一个修复chunked支持的补丁,没有解释为什么用域名就不行啊?
    GaryZ
        14
    GaryZ  
    OP
       2015-03-25 12:25:57 +08:00
    @ryd994 错误码411 错误解释是(需要有效长度) 服务器不会接受包含无效内容长度标头字段的请求。也就是说这个版本的Nginx 不支持文件数据形式的HTTP请求吧
    aheadlead
        15
    aheadlead  
       2015-03-25 14:12:53 +08:00
    @icedx 来看看
    ryd994
        16
    ryd994  
       2015-03-25 15:01:29 +08:00   ❤️ 1
    @GaryZ 对,因为不支持chunked encoding。问题是,为什么域名就不行?为什么用IP就行?除了Host头,其他在http协议上应该都一样。说明你没找到实际原因啊。为什么对IP没用chunked encoding?还是说你test case没覆盖?
    GaryZ
        17
    GaryZ  
    OP
       2015-03-25 15:56:54 +08:00
    @ryd994 根本原因的确不是特别明白,用IP可以是因为用IP发请求,没经过Nginx转发啊。对吧?
    ryd994
        18
    ryd994  
       2015-03-26 02:33:05 +08:00
    @GaryZ 你是说你直接请求后端么?请求反代服务器的IP会怎么样?域名解析出来是哪个IP就往哪个IP发
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5238 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 03:45 · PVG 11:45 · LAX 19:45 · JFK 22:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.