Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CORS服务器端与客户端?为什么一个有效,但另一个无效';T_Javascript_C#_Angularjs_Asp.net Mvc_Cors - Fatal编程技术网

Javascript CORS服务器端与客户端?为什么一个有效,但另一个无效';T

Javascript CORS服务器端与客户端?为什么一个有效,但另一个无效';T,javascript,c#,angularjs,asp.net-mvc,cors,Javascript,C#,Angularjs,Asp.net Mvc,Cors,我不确定我是否理解这一点。我可以编写一个简单的服务器端代码来获取任何网站HTML内容。在我的本地PC或任何主机上运行,并从任何网站检索任何页面。但这不能通过javaScript实现吗 远程主机如何知道发出请求的是哪种应用程序?出于安全目的,不允许跨源请求?为什么我可以使用服务器端代码发出完全相同的请求?并在本地或远程任何地方运行此代码?下面是一个从天气网站抓取HTML页面内容的简单示例,效果很好。但我不能在JavaScript代码中实现这一点?没有道理 public static class W

我不确定我是否理解这一点。我可以编写一个简单的服务器端代码来获取任何网站HTML内容。在我的本地PC或任何主机上运行,并从任何网站检索任何页面。但这不能通过javaScript实现吗

远程主机如何知道发出请求的是哪种应用程序?出于安全目的,不允许跨源请求?为什么我可以使用服务器端代码发出完全相同的请求?并在本地或远程任何地方运行此代码?下面是一个从天气网站抓取HTML页面内容的简单示例,效果很好。但我不能在JavaScript代码中实现这一点?没有道理

public static class WeatherManager
{
    private static HtmlDocument document = new HtmlDocument();

    public static MyWeather GetWeather()
    {
        try
        {
            var web = new HtmlWeb();
            document = web.Load("http://www.weatheroffice.gc.ca/city/pages/on-143_metric_e.html");
        }
        catch (Exception ex)
        {
            throw new Exception("Weather is not loaded");
        }

        var mainContent = document.DocumentNode.SelectSingleNode("//*[@id='mainContent']");
        var nownode = mainContent.SelectSingleNode("//section[1]/details/div/div");
        var forecastnodes = mainContent.SelectNodes("//section[2]/details/table[1]/tr[2]/td");

        // Do some processing....
    }
}
但当我试图从Angular(或我认为的任何JS库)发出类似请求时

我得到了这样的东西

我知道。。。CORS还可以,但如果是出于安全目的,我怎么能以我喜欢的方式发出这些CORS请求,例如上面的服务器端代码?

但这不能通过javaScript实现吗

是的,它可以-只是不能在浏览器上。您可以使用节点中的JavaScript或JVM(因为JVM通过
javax.script
)支持JavaScript)或Windows上的Metro应用程序等发出请求

远程主机如何知道发出请求的是哪种应用程序

没有。浏览器强制执行同源策略,而不是服务器

为什么我可以使用服务器端代码发出完全相同的请求

…但如果是出于安全目的,我怎么能以我喜欢的方式发出这些CORS请求,例如上面的服务器端代码

因为您的服务器端代码无法访问潜在的机密客户端信息。发件人:

同源策略有助于保护使用已验证会话的站点。下面的示例说明了在没有同源策略的情况下可能出现的潜在安全风险。假设用户正在访问银行网站,但没有注销。然后,用户转到另一个站点,该站点在后台运行一些恶意JavaScript代码,从银行站点请求数据。由于用户仍在银行网站上登录,因此恶意代码可以执行用户在银行网站上可以执行的任何操作。例如,它可以获取用户上次交易的列表、创建新交易等。这是因为浏览器可以根据银行网站的域向银行网站发送和接收会话cookie

访问恶意站点的用户会认为他或她正在访问的站点没有访问银行会话cookie的权限。虽然JavaScript确实不能直接访问银行会话cookie,但它仍然可以使用银行站点的会话cookie向银行站点发送和接收请求。由于该脚本基本上可以执行与用户相同的操作,因此即使银行网站提供的CSRF保护也不会有效

但这不能通过javaScript实现吗

是的,它可以-只是不能在浏览器上。您可以使用节点中的JavaScript或JVM(因为JVM通过
javax.script
)支持JavaScript)或Windows上的Metro应用程序等发出请求

远程主机如何知道发出请求的是哪种应用程序

没有。浏览器强制执行同源策略,而不是服务器

为什么我可以使用服务器端代码发出完全相同的请求

…但如果是出于安全目的,我怎么能以我喜欢的方式发出这些CORS请求,例如上面的服务器端代码

因为您的服务器端代码无法访问潜在的机密客户端信息。发件人:

同源策略有助于保护使用已验证会话的站点。下面的示例说明了在没有同源策略的情况下可能出现的潜在安全风险。假设用户正在访问银行网站,但没有注销。然后,用户转到另一个站点,该站点在后台运行一些恶意JavaScript代码,从银行站点请求数据。由于用户仍在银行网站上登录,因此恶意代码可以执行用户在银行网站上可以执行的任何操作。例如,它可以获取用户上次交易的列表、创建新交易等。这是因为浏览器可以根据银行网站的域向银行网站发送和接收会话cookie

访问恶意站点的用户会认为他或她正在访问的站点没有访问银行会话cookie的权限。虽然JavaScript确实不能直接访问银行会话cookie,但它仍然可以使用银行站点的会话cookie向银行站点发送和接收请求。由于该脚本基本上可以执行与用户相同的操作,因此即使银行网站提供的CSRF保护也不会有效

getWeatherForecast() {
    const url = 'https://weather.gc.ca/city/pages/on-143_metric_e.html';
    return this.$http.get(url);
}