Charles HTTP抓包原理

前言: Web代理服务器

来自参考链接2

对客户端/浏览器来说Web代理服务器是服务器
对服务器来说Web代理服务器是客户端

环境

WireShark
Charles
macOS 10.13.6

解释

根据参考链接1中的这段话

Web proxy servers
Web proxies forward HTTP requests. The request from the client is the same as a regular HTTP request except the full URL is passed, instead of just the path.[17]

GET http://en.wikipedia.org/wiki/Proxy_server HTTP/1.1
Proxy-Authorization: Basic encoded-credentials
Accept: text/html

Web代理服务器在转发HTTP请求时与正常的HTTP是一样的,除了请求头某个字段要传递全路径(full URL)而不是简单的路径(path)。继续追踪,通过rfc7230,就能知道这个这个字段就是absolute-form

为什么会有这个变化呢? 原来只要传路径是因为,服务器知道自己的host是什么,但是代理服务器是充当了客户端的服务器后,我们必须要告诉代理服务器,接下去要访问谁,光提供路径是不够的。

证明

准备

iTerm ping Blog的域名,获得ip

1
2
3
4
% sudo ping www.iosugar.com
PING ishepherdminer.github.io (185.199.111.153): 56 data bytes
64 bytes from 185.199.111.153: icmp_seq=0 ttl=52 time=141.981 ms
...

打开 WireShark 监听 en0 网卡,当前状态下就是无线网卡

设置过滤条件http and ip.addr == 185.199.111.153

未设置代理

Chrome直接访问www.iosugar.com

设置代理

手机设置代理,用Safari访问

过滤条件设置为 http and ip.addr == 185.199.110.153 or ip.dst == 192.168.31.191

其中192.168.31.191是计算机的地址

参考

  1. Web_proxy_servers
  2. Thick Client Proxying - Part 6: How HTTP(s) Proxies Work
  3. rfc7230