как очистить кэшированные перенаправления http в Winsock (301 навсегда перемещен) - PullRequest
1 голос
/ 10 октября 2019

Я использую winsock для отправки http запросов в интернет. Я обнаружил, что что-то в системе на моем компьютере http 301 постоянно кеширует ответы. Поэтому, если я отправляю запрос GET для определенного URL, он возвращает старый ответ, не отправляя что-либо в Интернет. Проблема, потому что кешированный ответ неисправен. Я хочу очистить кеш, но даже не знаю, кто делает кеширование.

Я знаю, как очистить этот кеш в моем браузере. Кроме того, когда я использую wininet вместо winsock, проблем не возникает. Где кеш для winsock и как его очистить?

РЕДАКТИРОВАТЬ: ответ Андреас ниже приводит некоторые замечания. Моя программа работает в качестве прокси на локальном хосте, получает запросы от Firefox и отправляет их в Интернет. Таким образом, запросы устанавливаются Firefox, и заголовок хоста всегда там. Причина, по которой я думаю, что это как-то связано с winsock на моем собственном компьютере, заключается в том, что Firefox получит страницу правильно, если я не использую свой прокси-сервер. Нет 301 ответ тогда. Но у Firefox была и эта проблема (без прокси), пока я не очистил его историю (забудьте об этом сайте). Вот почему я думаю, что это должно быть проблема с кешем winsock.

Поскольку Firefox успешно (без прокси) удаляет кеш, он не может быть моим провайдером, выполняющим кеширование. Обратите внимание, что отправленный запрос идентичен независимо от того, идет он через мой прокси или нет. Я ничего не меняю. Также, как я сказал, wininet работает.

Я согласен, что winsock ничего не знает о http. Тем не менее, кажется, что-то среднее между winsock и сетью, имеющей функцию кэширования. Какое еще может быть объяснение? Мой прокси работает нормально на многих других сайтах, но на некоторых я получаю этот 301 навсегда перемещенный ответ с ошибочным заголовком местоположения. Как я могу узнать больше о том, что происходит?

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Winsock не кэширует веб-страницы. Он ничего не знает об HTTP, поэтому он не может кэшировать HTTP-ответы.

Если вы действительно используете Winsock только для отправки HTTP-запроса, и если вы делаете это напрямую (не через прокси-сервер), то это должно быть прозрачный прокси , который кэширует запросы. Некоторые провайдеры используют их, и это часто вызывает технические проблемы.

Однако я не уверен, что это проблема с кэшированием. Если вы используете Winsock для отправки HTTP-запроса, я подозреваю, что с вашим HTTP-запросом что-то не так. Например, в настоящее время многие серверы используют виртуальный хостинг и поэтому требуют, чтобы клиент отправил поле «Хост» в заголовке HTTP, чтобы запрос мог быть назначен правильному виртуальному серверу. Если вы этого не сделаете, вы будете обслуживаться не тем виртуальным сервером. Это может быть причиной того, что вы получаете HTTP 301 постоянно перемещенный ответ, а также причиной его работы с WinInet (поскольку он отправляет правильное поле заголовка «Host»).

Однако это противоречит вашему утверждению о том, чтоотправка запроса GET для определенного URL ничего не отправляет в интернет. Что именно заставляет вас думать, что это так? Вы используете сетевой анализатор пакетов?

0 голосов
/ 12 октября 2019

Я думаю, что нашел это сейчас. Это не проблема с кешем. В некоторых серверах или субсерверах есть ошибка. Некоторые распространенные серверные платформы, такие как PHP. Ошибка заключается в следующем: если я запрашиваю корневой документ сайта с полным URL-адресом (GET http://example.com), то он возвращает постоянно перемещенный ответ 301 с ошибочным заголовком местоположения. Если я запрашиваю его с помощью GET /, то он работает, и явернуть этот документ со статусом 200 OK.

Теперь я проверяю, является ли цель абсолютным URL-адресом. Если это так, я проверяю, является ли путь пустым. Если это так, я меняю цель на /.

Теперь это работает, и я больше не получаю 301 ответ.

...