| Preface | ix |
| 1. | Introduction | 1 |
| 1.1 | Web Architecture | 2 |
| 1.2 | Web Transport Protocols | 6 |
| 1.3 | Why Cache the Web? | 10 |
| 1.4 | Why Not Cache the Web? | 13 |
| 1.5 | Types of Web Caches | 14 |
| 1.6 | Caching Proxy Features | 17 |
| 1.7 | Meshes, Clusters, and Hierarchies | 18 |
| 1.8 | Products | 19 |
| 2. | How Web Caching Works | 21 |
| 2.1 | HTTP Requests | 21 |
| 2.2 | Is It Cachable? | 24 |
| 2.3 | Hits, Misses, and Freshness | 34 |
| 2.4 | Hit Ratios | 37 |
| 2.5 | Validation | 38 |
| 2.6 | Forcing a Cache to Refresh | 41 |
| 2.7 | Cache Replacement | 44 |
| 3. | Politics of Web Caching | 48 |
| 3.1 | Privacy | 49 |
| 3.2 | Request Blocking | 55 |
| 3.3 | Copyright | 57 |
| 3.4 | Offensive Content | 63 |
| 3.5 | Dynamic Web Pages | 64 |
| 3.6 | Content Integrity | 65 |
| 3.7 | Cache Busting and Server Busting | 66 |
| 3.8 | Advertising | 68 |
| 3.9 | Trust | 69 |
| 3.10 | Effects of Proxies | 70 |
| 4. | Configuring Cache Clients | 72 |
| 4.1 | Proxy Addresses | 73 |
| 4.2 | Manual Proxy Configuration | 73 |
| 4.3 | Proxy Auto-Configuration Script | 77 |
| 4.4 | Web Proxy Auto-Discovery | 83 |
| 4.5 | Other Configuration Options | 84 |
| 4.6 | The Bottom Line | 84 |
| 5. | Interception Proxying and Caching | 86 |
| 5.1 | Overview | 87 |
| 5.2 | The IP Layer: Routing | 89 |
| 5.3 | The TCP Layer: Ports and Delivery | 96 |
| 5.4 | The Application Layer: HTTP | 100 |
| 5.5 | Debugging Interception | 101 |
| 5.6 | Issues | 102 |
| 5.7 | To Intercept or Not To Intercept | 108 |
| 6. | Configuring Servers to Work with Caches | 109 |
| 6.1 | Important HTTP Headers | 110 |
| 6.2 | Being Cache-Friendly | 115 |
| 6.3 | Being Cache-Unfriendly | 127 |
| 6.4 | Other Issues for Content Providers | 128 |
| 7. | Cache Hierarchies | 132 |
| 7.1 | How Hierarchies Work | 132 |
| 7.2 | Why Join a Hierarchy? | 134 |
| 7.3 | Why Not Join a Hierarchy? | 136 |
| 7.4 | Optimizing Hierarchies | 142 |
| 8. | Intercache Protocols | 144 |
| 8.1 | ICP | 145 |
| 8.2 | CARP | 156 |
| 8.3 | HTCP | 158 |
| 8.4 | Cache Digests | 159 |
| 8.5 | Which Protocol to Use | 163 |
| 9. | Cache Clusters | 165 |
| 9.1 | The Hot Spare | 166 |
| 9.2 | Throughput and Load Sharing | 167 |
| 9.3 | Bandwidth | 168 |
| 10. | Design Considerations for Caching Services | 170 |
| 10.1 | Appliance or Software Solution | 170 |
| 10.2 | Disk Space | 173 |
| 10.3 | Memory | 175 |
| 10.4 | Network Interfaces | 175 |
| 10.5 | Operating Systems | 176 |
| 10.6 | High Availability | 177 |
| 10.7 | Intercepting Traffic | 178 |
| 10.8 | Load Sharing | 179 |
| 10.9 | Location | 180 |
| 10.10 | Using a Hierarchy | 180 |
| 11. | Monitoring the Health of Your Caches | 182 |
| 11.1 | What to Monitor? | 183 |
| 11.2 | Monitoring Tools | 186 |
| 12. | Benchmarking Proxy Caches | 191 |
| 12.1 | Metrics | 192 |
| 12.2 | Performance Bottlenecks | 194 |
| 12.3 | Benchmarking Tools | 197 |
| 12.4 | Benchmarking Gotchas | 203 |
| 12.5 | How to Benchmark a Proxy Cache | 206 |
| 12.6 | Sample Benchmark Results | 210 |
| A. | Analysis of Production Cache Trace Data | 215 |
| B. | Internet Cache Protocol | 235 |
| C. | Cache Array Routing Protocol | 246 |
| D. | Hypertext Caching Protocol | 254 |
| E. | Cache Digests | 266 |
| F. | HTTP Status Codes | 274 |
| G. | U.S.C. 17 Sec. 512. Limitations on Liability Relating to Material Online | 279 |
| H. | List of Acronyms | 282 |
| Bibliography | 288 |
| Index | 291 |