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