我正在从我正在开发的PHP网站向Java(服务器)webservice发出两个HTTP GET请求。我使用相同的函数来发出GET请求。服务器拒绝一个请求&返回null作为响应,而它接受另一个&返回正确的响应。从Google Chrome的扩展程序POSTMAN尝试这两个GET请求都会返回正确的响应。 为什么服务器表现得如此奇怪?对于服务器拒绝的请求,它表示请求的资源上没有“Access-Control-Allow-Origin”标头。为什么会这样?因此,这意味着对于服务器接受的请求,存在此特定标头。我很困惑。
答案 0 :(得分:0)
Access-Control-Allow-Origin
是服务器发送的某种安全标头,用于防止服务器被随机的其他服务器调用,但这些标头的所有处理都留给客户端。这意味着您的客户端库(例如您的webbrowser)会检查当前访问的域是否存在于Access-Control-Allow-Origin
- 标头中。 POSTMAN绕过这些检查(因为它当前不能访问任何域),因此总是返回响应。
您应该检查以防止此问题发生的原因是您始终在Access-Control-Allow-Origin
中包含客户端域(或者只使用*
来允许所有来源)。请务必将其添加到OPTIONS
次请求中,因为这些请求通常会在POST
或PUT
请求之前发送。
如果您的请求仅在某个HTTP-Method上失败,请确保同时设置Access-Control-Allow-Methods
- 标头以包含所有必需的HTTP方法(或仅使用*
)
由于POSTMAN始终接受您的请求,因此检查这些标头是否包含在响应中是一个很好的工具。如果没有,只需添加它们就可以了。