【发布时间】:2014-07-07 14:47:36
【问题描述】:
我使用 Charles 代理(在 OS X 10.9.3,Mavericks 下)修改 Origin 标头,以便我连接的 API(开发中)接受来自开发环境的传入请求。
我设法通过一个简单的重写规则完成了这项工作,直到今天一切正常。
目前的问题是浏览器没有连接到代理(由Charles设置)。请求中的“失败”字段显示:“未提出请求。可能 SSL 证书被拒绝。”,在下方的备注字段中:“您可能需要配置浏览器以信任 Charles CA SSL 证书。” .
我已经这样做了,而且效果很好。从那以后我没有改变查尔斯的配置。我试图让它工作的事情:
- 卸载并重新安装the Charles certificate。
- 在以下浏览器中尝试相同的操作:Chrome Canary、Chrome stable、Safari 和 Firefox
- 使用 HTTP 代理而不是更高级的 SOCKS 代理。
我还确保无论默认设置如何,Charles 证书始终是受信任的:
不确定这是否是解决方案的线索,但是当我在 Charles 打开的情况下直接导航到 api 时,我看到了这个:
该 API 确实托管在 Windows Azure 平台上,但我不明白为什么 Charles 证书(因为 Charles 充当中间人,向浏览器显示其证书)是 *. azurewebsites.com 而不是实际的主机。
请务必注意,实际主机(例如 api.example.com)具有购买的有效 *.example.com 通配符证书。
如果有人对如何解决此问题或到底发生了什么有任何提示,我将非常感谢她的建议。
谢谢。
ps。如果我调整直接请求以获得正确的 Origin 标头(修改/清除敏感信息):
GET /xxx HTTP/1.1
主机:api.example.com
连接:保持活动
缓存控制:max-age=0
接受:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
用户代理:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36
接受编码:gzip、deflate、sdch
接受语言:en-US,en;q=0.8,hu;q=0.6
饼干:...
来源:https://acceptable.host.com
我收到以下回复:
HTTP/1.1 400 错误请求
内容长度 46
内容类型应用程序/json;字符集=utf-8
服务器 Microsoft-IIS/8.0
X-Powered-由 ASP.NET
Set-Cookie ARRAffinity=secret-token;Path=/;Domain=api.example.com
日期 2014 年 5 月 21 日星期三 07:58:02 GMT
【问题讨论】:
-
“当我在 Charles 打开的情况下直接导航到 api 时”是什么意思?与第一种情况有什么区别,因为在这两种情况下查尔斯都在?
-
对不起,我不清楚。在第一种情况下,我导航到 localhost:8000 并从那里向 API(上面的 api.example.com)发出 XHR 请求。在第二种情况下,我直接导航到 API 服务器的根目录,api.example.com。
-
那么在第二种情况下,如果你'继续',你在查尔斯身上看到了什么?如果 Charles 确实在代理请求,您至少应该看到服务器返回的内容,其标头会为您提供一些线索,说明为什么它看到的是 *.azurewebsites.net 而不是您自己的域。
-
是的,我很确定如果直接请求给你这个警告,你会得到一个 XHR 请求的错误。如果您在 Firefox 中打开开发人员调试控制台,您应该能够看到错误。
-
我设法通过了直接请求并将响应标头作为 ps 粘贴到我原来的问题中。
标签: charles-proxy