概念
HTTP 協(xié)議中的 Origin Header 存在于請(qǐng)求中,用于指明當(dāng)前請(qǐng)求來自于哪個(gè)站點(diǎn)。
字段內(nèi)容
Origin 僅僅包含站點(diǎn)信息,不包含任何路徑信息。
語法
Origin: ""
Origin: "<schema>://<host>[:port]"
// 例如
Origin: "https://baidu.com"
// 錯(cuò)誤示范,包含了路徑信息
Origin: "https://baidu.com/"
參考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Origin
應(yīng)用
CORS
當(dāng)我們的瀏覽器發(fā)出跨站請(qǐng)求時(shí),行為正確的服務(wù)器會(huì)校驗(yàn)當(dāng)前請(qǐng)求是不是來自被允許的站點(diǎn)。服務(wù)器就是通過 Origin 字段的值來進(jìn)行的判斷。
當(dāng)服務(wù)器的配置出錯(cuò)時(shí),比如配置成了 https://baidu.com/,則可能造成一些難以理解的問題。
比如有的瀏覽器(IE)能夠請(qǐng)求成功,而有的瀏覽器卻請(qǐng)求失?。–hrome)。這不是因?yàn)榍耙粋€(gè)瀏覽器行為正確,而是因?yàn)榍耙粋€(gè)瀏覽器發(fā)出請(qǐng)求時(shí)沒有帶上 Origin 而后一個(gè)瀏覽器帶上了正確的 Origin。而在服務(wù)器端,因?yàn)闆]有 Origin Header,所以認(rèn)為這不是一次 CORS 請(qǐng)求,所以沒有進(jìn)行 CORS 校驗(yàn)。這也反過來要求服務(wù)端強(qiáng)制請(qǐng)求帶上 Origin Header,才能進(jìn)一步保證服務(wù)器的安全性。