我正在创建一个 SublimeText 2 插件,将数据发布到我运行的服务器。我在火车上使用手机作为 WiFi 热点编写了基础知识,一切正常。然后,当我回到家时,无论我尝试发布什么内容,我的服务器都会收到 400 Bad Request 响应。我把我的笔记本电脑放回我的个人热点,错误就消失了。以下是详细信息:
本例中的“客户端”是 Sublime Text 2。如果您还不知道,他们的插件是用 Python 编写的,我使用 urllib、urllib2 和 httplib 来处理请求。这是发出请求的相关 Python:
params = urllib.urlencode({'title': 'ST2 Note', 'content': data, 'user': user, 'pass': pswd})
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
conn = httplib.HTTPConnection("staging.myserver.me:80")
conn.request("POST", "staging.myserver.me/st2", params, headers)
response = conn.getresponse()
data2 = response.read()
print data2
conn.close()
上面的代码发送一个 POST 请求就好了。如果我在某个连接上,我的服务器肯定会理解它,因为我将它设置为只是回显我在 POST 数据中发送的内容。该请求是针对 PHP(Codeigniter)应用程序的一部分发出的,是的,我已经专门设置了它,以便针对这个特定的 URL 关闭 CSRF 保护,所以我知道这不是问题。PHP 代码本身相当无趣,但我将其设置为回显服务器标头,这就是当我从有效的连接发出请求时它发送的内容:
Host: staging.myserver.me
Accept-Encoding: identity
Content-Length: 56
Content-type: application/x-www-form-urlencoded
Accept: text/plain
Via: HTTP/1.1 akrmspsrvz9ts212.wnsnet.attws.com
为什么服务器理解来自某些连接的请求而不理解其他连接的任何想法?