我有另一台计算机的网址服务,我在使用IP地址访问其他计算机的响应时收到此错误。
$http({method : 'post',
url : 'http://xxx.xxx.0.xxx:8080/hms/spring/user/users'
data : ''}).then(function(response) {
$scope.patient_data = response.data;
});
出现此错误:
XMLHttpRequest cannot load http://xxx.xxx.0.xxx:8080/hms/spring/user/users. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.
答案 0 :(得分:0)
Access-Control-Allow-Origin是CORS (Cross-Origin Resource Sharing) header。
当站点A尝试从站点B获取内容时,站点B可以发送一个Access-Control-Allow-Origin响应头来告诉浏览器该页面的内容可以访问某些来源。 (原点是域,加上方案和端口号。)默认情况下,站点B的页面不能被任何其他来源访问;使用Access-Control-Allow-Origin标题为特定请求来源的跨域访问打开了一扇门。
对于站点B想要访问站点A的每个资源/页面,站点B应该为其页面提供响应头:
Access-Control-Allow-Origin: http://siteA.com
现代浏览器不会直接阻止跨域请求。如果站点A从站点B请求页面,则浏览器将实际获取网络级别上的请求页面,并检查响应头是否将站点A列为允许的请求者域。如果站点B未指示允许站点A访问此页面,则浏览器将触发XMLHttpRequest的错误事件,并拒绝响应请求的JavaScript代码的响应数据。
非简单请求:
网络级别的情况可能比上面解释的要复杂一些。如果请求是"non-simple" request,则浏览器首先发送无数据“预检”OPTIONS请求,以验证服务器是否接受请求。当(或两者):
时,请求是非简单的使用非简单请求标头使用GET或POST以外的HTTP动词(例如PUT,DELETE);唯一简单的请求标头是:接受Accept-Language Content-Language Content-Type(当它的值为application / x-www-form-urlencoded,multipart / form-data或text / plain时,这很简单)如果服务器使用适当的响应标头响应OPTIONS预检(非简单标头的Access-Control-Allow-Headers,非简单动词的Access-Control-Allow-Methods),与非简单动词和/或非简单标题匹配,然后浏览器发送实际请求。
假设站点A想要发送/ somePage的PUT请求,使用非简单的Content-Type值application / json,浏览器将首先发送预检请求:
OPTIONS /somePage HTTP/1.1
Origin: http://siteA.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: Content-Type
请注意,浏览器会自动添加Access-Control-Request-Method
和Access-Control-Request-Headers
;你不需要添加它们。此OPTIONS预检获得成功的响应标题
Access-Control-Allow-Origin:http://siteA.com 访问控制允许方法:GET,POST,PUT Access-Control-Allow-Headers:Content-Type 发送实际请求时(在预检完成后),行为与处理简单请求的方式相同。换句话说,预检成功的非简单请求与简单请求相同(即,服务器仍必须再次发送Access-Control-Allow-Origin作为实际响应)。
浏览器发送实际请求:
PUT / somePage HTTP / 1.1 来源:http://siteA.com Content-Type:application / json
{“myRequestContent”:“JSON太棒了”} 并且服务器发回一个Access-Control-Allow-Origin,就像它对一个简单的请求一样:
Access-Control-Allow-Origin:http://siteA.com 有关非简单请求的更多信息,请参阅Understanding XMLHttpRequest over CORS。
我相信它会帮助您更好地理解CORS问题和解决方案。