【问题标题】:HttpWebResponse "SeeOther" StatusCode returned instead of 404返回 HttpWebResponse "SeeOther" StatusCode 而不是 404
【发布时间】:2011-10-02 20:03:08
【问题描述】:

我正在执行一个应返回 404 状态代码的 Web 请求,因为该 URL 不存在,但它返回的是 303 (SeeOther) 状态。如果我查看它作为重定向 URL 返回的 URL,它是:

http://guide.opendns.com/?url=www.googuaoeuaoeu23p2le.com

有谁知道我可以如何防止这种情况并在没有 openDNS 重定向劫持的情况下查看原始 404?

我的代码:

        // create the HttpWebRequest object
        HttpWebRequest request = WebRequest.Create("www.googuaoeuaoeu23p2le.com") as HttpWebRequest;

        // don't allow redirect
        request.AllowAutoRedirect = false;

        request.Method = "GET";
        request.AllowWriteStreamBuffering = true;
        request.KeepAlive = false;
        request.ContentType = "application/x-www-form-urlencoded";
        request.SendChunked = false;
        request.Credentials = CredentialCache.DefaultCredentials;
        request.UserAgent = "NetMonitor";

        // set the timeout
        request.Timeout = 5000;

            // get the data as an HttpWebResponse object
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;

            // convert the data into a string (assumes that we are requesting text)
            StreamReader responseReader = new StreamReader(response.GetResponseStream());

            // get HTML from the response
            string responseHTML = responseReader.ReadToEnd();

            // close the response reader
            responseReader.Close();

            // at this point we successfully got a response and just need to determine what type -- get status code
            HttpStatusCode statusCode = response.StatusCode;

【问题讨论】:

    标签: asp.net httpwebrequest http-status-code-404 httpwebresponse


    【解决方案1】:

    不使用 OpenDNS?这是一个轻率的答案,但它是使用 OpenDNS 的缺点。他们永远不会返回没有必要的主机来让网络客户端检测到 404。

    虽然,如果您收到来自 OpenDNS 的响应,这意味着您的客户端无法找到服务器。一旦您连接到服务器,404 就会来自服务器,它找不到您请求的资源。

    您需要更改代码以首先进行 DNS 查找 - 在 System.Net 中查找 dnslookup 类 - 如果查找失败,则返回 404。

    现在实际发生的是:

    • 您的网络客户端对提供的主机名进行 dns 查找
    • dns 查找失败
    • OpenDNS 拦截失败并返回其服务器的 IP 地址
    • 然后,他们的服务器会返回您的初始主机名的搜索响应以及继续代码。

    你需要做的是以下场景

    • 您对主机名进行 dns 查找
    • 主机不存在所以返回404

    • 您对主机名进行 dns 查找
    • 主机存在,所以您提出请求
    • 主机找不到请求的路径所以返回404
    • 你返回 404

    • 您对主机名进行 dns 查找
    • 主机存在,所以您提出请求
    • 路径存在且主机返回请求的数据。
    • 您将此返回给您的客户

    【讨论】:

    • 您知道如何禁用 OpenDNS 吗?它是我的 DNS 提供商的服务吗?我不知道。
    • 这是一个网络设置,可以在机器上设置,也可以由机器连接的网络设置。但就像我说的,要验证您连接的主机名,您需要先进行 dns 查找。这将通过或失败,然后您可以返回 404。
    • 我不认为 DNS 查找会解决它,因为它不仅仅是一个域——它可能是一个深层 URL、js 文件等。
    • 您需要先确定主机存在,然后才能查询路径。如果主机不存在,您将无法得到回复。我已经添加了对正在发生的事情的额外解释。希望这会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-06-28
    • 2011-05-04
    • 2017-10-26
    • 2020-06-07
    • 2020-11-12
    • 2018-12-05
    • 2018-06-16
    • 1970-01-01
    相关资源
    最近更新 更多