HTTP Requests

This test tries to detect online censorship based on a comparison of HTTP requests over Tor and over the network of the user.

HTTP is a protocol which allows communication between a client and a server. It does so by handling a client’s request to connect to a server, and a server’s response to a client’s request. Every time you connect to a website, your browser (the client) sends a request through the HTTP protocol to the server which is hosting that website. A server normally responds with the content of the website it is hosting. In some cases though, Internet Service Providers (ISP) prevent users from accessing certain websites by blocking or interfering with the connection between them and the server.

To detect such cases of censorship, we have developed a test which performs HTTP requests to given websites over the network of its user, and then over the Tor network. As Tor software is designed to circumvent censorship by making its user’s traffic appear to come from a different part of the world, we have chosen to use the Tor network as a baseline for comparing HTTP requests to websites. If the two results match, then there is no clear sign of network interference; but if the results are different, then the website that the user is testing is likely censored.

If one of the following is present in the results, then there is a sign of network interference:

  • The length of the body of the two websites (over Tor and over the user’s network) differs by some percentage

  • The HTTP request over the user’s network fails

  • The HTTP headers do not match

Note: False positives might occur when the Tor control connection is being discriminated by the server. This happens, for example, when a CloudFlare CAPTCHA page appears.

Read the HTTP Requests test specification.