在这里你可以控制 Proxomitron 对 浏览器和服务器之间的 HTTP header 消息进行修改。点击图片不同部分可以获得该部分的解释。
揭开 HTTP Headers 的神秘面纱...
HTTP Headers 是当你请求一个页面时在浏览器和服务器之间传递的消息。这些消息包含各种各样的信息 - 一些是必要的,一些不是很必要。此外还包括你可能听说过的恶心的"web cookies"。通常这些消息是不会被看见的,但通过Proxomitron 的记录窗口,你可以看到浏览器和服务器之间的对话。
Headers 有两种形式 - 请求 Header 是从浏览器发往服务器的消息;应答 Header 是从服务器发回浏览器的消息。记录窗口分别用绿色和黄色来显示它们。Header 的顺序可以随意调整,而且相同的 header 有可能会出现两次(虽然这不太常见)。浏览器和服务器不能理解的 header 都会被忽略。
使用 HTTP header 过滤,你可以添加,删除,或根据具体内容改变这些 header。要修改或创建规则,使用 HTTP Header 过滤规则编辑器。
警告: 小心编辑 HTTP header - 发送不正确的数据或删除必要的 header 都可能影响浏览器的正常操作。
让 URL 自杀
一个最新加入的 header 过滤规则有特殊的功能。"URL-Killer:" 使用新的替换文本 "\k" 来屏蔽不必要的 URL。当匹配指定的 URL 时,Proxomitron 甚至都不会给远程服务器发出连接。对于图片 URL,Proxomitron 会返回 "killed.gif" (默认是一个空白的透明 gif) 替换原始图片,对于其他形式的 URL,Proxomitron 会返回 "killed.html" 的内容。killed.gif 和 killed.html 都在 Proxomitron 的程序目录下的 "html" 子目录里,你可以随意修改它们。
除了 URL,你可以使用相同的技巧根据 header 内容过滤其他东西。Content-Length: 和 Content-Type: 是不错的候选。注意对于应答 header 的规则,Proxomitron 必须先与远程服务器通信以取得必要的信息。当然,根据应答 header 屏蔽 URL 也可以防止接收实际数据。
文件寿司 - 如果修复不正确的 MIME Content-Type
服务器使用 "Content-Type:" header 来告诉浏览器它正在接收的是什么文件。例如,一个网页的 Content-Type 是 "text/html",jpeg 图片的 Content-Type 是 "image/jpeg"。但是,当服务器不知道某个文件的类型,它通常会默认为 "text/plain"。一般这时浏览器会把它当作文本文件来读取并有可能擅自添加 CR/LF 而对数据造成损坏 - 又叫 "cooking" a file.
Proxomitron 可以通过 URL 的扩展名赋予 "text/plain" 文件正确的 Content-Type (这其实是服务器应该在发送 header 前就做好的事情)。默认的规则设置包含一些例子像是 JavaScript, MIDI 和 MP3 文件 (自行查找 "Content-Type" header 规则) - 你可以仿照这些加入其他的文件类型。
分享你的 header 过滤规则
右键点击规则部分时弹出的右键菜单会允许你 导入 或 到处 选定的规则到剪贴板。这是一个很简单的分享特定规则的方法。例如,要分享一些规则,只要先选中你需要的规则,右键然后选择 "Export filters to clipboard",然后在 email 或论坛上粘贴就行了。导出的规则是和配置文件一样的纯文本,别人可以很方便地导入。分享规则时,不要删除任何东西,否则 Proxomitron 有可能会无法导入它们。
要导入一个规则,只要从 email 或论坛上或其他地方复制对应的文本到剪贴板,右键选择 "Import filters from clipboard"。如果 Proxomitron 找到可以导入的新规则,它会添加它们并高亮为 红色。
普通状态下的 HTTP headers
如果想要一份完整的 Proxomitron 的 header 过滤规则的功能描述,点这里跳转到 默认 Header 过滤规则 部分。另外如果你想知道更多关于 header 的东西,这里是一些常见的 HTTP header 和它们的用处...
请求 Headers
If-Modified-Since: | 它包含浏览器最后一次访问该网页的时间。基本上它是用来告诉服务器 "如果网页在这个时间之后有改变的话才发给我新的页面"。删除这个 header 会导致即使浏览器里有缓存也会强制完全重新载入网页 (IE 的话还需要删除 "Last-Modified" header)。 |
Referer: | 它包含转向前的网页 URL。出于安全因素,浏览器应该向用户提供选项不发送这个信息,但是很少有浏览器这样做。直接删除这个值一般没事,但是这会对一些免费的网页统计 (常常用 Referer 来跟踪页面点击量) 有古怪的影响。如果为 outgoing 信息开启相关过滤规则,Proxomitron 会在这里发送网页本身的 URL。 |
User-Agent: | 它包含你的浏览器通常还有操作系统,的信息。一般来说它只是提供一个信息 - 你可以删除这个 header 甚至发送你自定义的信息。(译注: 不了解的情况下不要随便修改此信息,否则会导致部分网站显示或功能不正常) |
Host: | 它包含正在连接的网页的主机名 (就是 URL 的 "www.somewhere.com" 部分)。它通常被许多网页服务用作 "虚拟主机",也就是不同的站点有同样的网页服务。一般不要修改这个。 |
Accept: | 它包含一个浏览器能理解的文件或图片类型的列表。这个一般也不要修改。 |
Accept-Language: | 它包含一个偏好语言的列表 - 目的是允许多语言网页自动选择你的语言 (虽然很少用来做这个)。这又是一个 初始 HTTP 协议声明的应该由用户控制的选项。有时你也许希望所有人都能懂你的母语。 |
Accept-Charset: | 浏览器能理解的字符集。通常不用修改。 |
Cookie: | 这也许是最恶心也是最容易误解的 header 之一。Cookie 包含一行之前服务器发送给浏览器的信息。浏览器所做的仅仅是把它原封不动的再发给服务器。大多数时候 Cookie 包含一些服务器用以区分访客和用户的鉴别,但这在服务器创建 Cookie 前就应该通过其他方式得知的。改动 Cookie 会导致 "干扰服务器的思维",让它不知道你到底是谁。根据情况不同,这有时有用有时反而碍事;-)。 你可以使用 Proxomitron 的 cookie 过滤来阻止所有发送的 cookie,或是通过一个 URL 匹配来只发送给信任网站 Cookie。 |
Pragma: no-cache | 通常浏览器在刷新/重新载入网页时发出的消息,目的是告诉远程代理服务器发送一个最新版本的页面 (而不是从代理服务器的缓存里复制一份)。Proxomitron 使用它来检测浏览器是否正在 "刷新/重新载入" 某个页面。 |
应答 Headers
Server: | 包含服务器的名字和版本。这是个简单的提示,也不会被浏览器使用。可以算作是服务器版本的 "User-Agent"。 |
Cache-control: | 影响网页在浏览器缓存里储存的方式。如果值是 "Private",表示内容不允许被缓存;如果值是 "max-age",则表示网页应该被缓存多久 (有点像是牛奶上的 "有效日期" ;-)。 |
Pragma: no-cache | 在应答 header 中,它表示浏览器不可以缓存网页。通常用于临时网页像是搜索引擎结果。 |
Expires: | 另一个用于浏览器缓存的 header - 包含网页内容大约的改动时间。它通常只是一个预计。 |
Date: | 服务器版本的本地时间。 |
Last-Modified: | 网页的最后修改时间。也是用于浏览器缓存。在早期版本的 Internet Explorer 里,你可以把它和 "If-Modified-Since" 都删除来 "强制" 浏览器一直重新请求页面。 |
Content-Type: | 包含服务器发送的数据类型,例如网页是 "text/html","image/gif" 是 GIF 文件。 |
Accept-Ranges: | HTTP 1.1 的一部分 - "Bytes" 表示服务器支持回收任意部分的文件,用下载续传。 |
ETag: | 有点像校验和 (只是有点像)。它包含一个每当页面更新时就会改变的字符串。这个字符串没有任何意义。这也是用于服务器缓存的。 |
Connection: | 另一个 HTTP 1.1 header - "close" 表示该连接不会再有任何数据传输了 (这在 HTTP 1.0 是唯一值)。HTTP 1.1 支持 "持续连接" 的概念。同一个连接可以被 "重新使用" 以发送多个项目。通过改动这个 header,你可以控制 Proxomitron 本身是否使用持续连接。例如,永远发送 "Conntection: close" 来完全禁止持续连接。 |
Content-Location: | 数据来源的 URL - 这个 header 不一定有。 |
Location: | 它用于服务器重定向连接到一个不同的 URL (使用 302 重定向应答)。Proxomitron 的 $JUMP( ) 命令就是给你的浏览器发送这个 header。 |
Content-Length: | 发送网页或文件的长度,单位是 byte。 |
Set-cookie: | 请求浏览器储存此 header 包含的信息并在下次浏览同样页面时返回给服务器。删除它,浏览器就 永远不会 接收任何 cookie。在 Set-Cookie 规则里,URL 匹配可以用来选择性地接收 cookie。另外,Proxomitron 可以使 cookie "仅当前进程有效 (session only)",这样它们不会永远被浏览器储存。通常这样会比较好,因为完全禁止 cookie 会造成一些网站出现问题。 |
