假设带有Origin头的HTTP请求是CORS请求是否安全?
如果没有,区分CORS请求和来自外部服务器上的PHP应用程序的常规HTTP请求的正确方法是什么?
答案 0 :(得分:1)
如果“CORS请求”是指跨域请求 - 即。使用the CORS protocol的请求 - 然后不,假设带有Origin
标头的HTTP请求是跨源请求是不安全的。
这是因为,同时要求浏览器在使用CORS协议的所有跨源请求中发送Origin
the Fetch spec also requires browsers to send the Origin
header for all requests whose method is neither GET
nor HEAD
:
如果设置了CORS标志或 httpRequest 的方法既不是
GET
也不是HEAD
,那么追加Origin
/ httpRequest 的原点,序列化和UTF-8编码,到 httpRequest 的标题列表。
因此,浏览器还必须发送Origin
标头,例如,所有POST
个请求。
获取规范further states:
CORS请求是包含
Origin
标头的HTTP请求。它无法被可靠地识别为参与CORS协议,因为Origin
标头也包含在方法既不GET
也不HEAD
的所有请求中。
因此规范实际上将 CORS请求定义为“具有Origin
标头的任何请求” - ,即使该请求未使用the CORS protocol 。这似乎是一种奇怪的定义方式,但无论如何,重要的是要记住规范提到 CORS请求的其他任何地方,它并不一定意味着“参与CORS协议的请求” - 因为根据规范中的上述定义,同源POST
请求也是一个CORS请求。
因此,从服务器端无法确定地将给定请求标识为参与CORS协议。只有发送请求的浏览器知道 - 而Origin
以外,没有其他标头我们可以假设浏览器总是在CORS协议请求中发送。