Day09【Web】跨来源资源共用 CORS

CORS 全称 Cross-Origin Resource Sharing,
中文为「跨来源资源共用」。

由於现今网路上许多页面所载入的资源,
都来自与所在位置分离的网域,
当使用者代理请求一个非同源的资源时,
基於安全性考量,
会建立一个跨来源 HTTP 请求(cross-origin HTTP request),
以对非同源的资源请求进行限制。

XMLHttpRequestFetch API
都遵守同源政策。
存取跨来源资源时必须使用 CORS 标头,
否则就只能请求与应用程序同源的 HTTP 资源。


同源政策(same-origin policy)

达成同源的三个条件:

  • 相同的通讯协定(protocol),即 http / https
  • 相同的网域(domain)
  • 相同的通讯埠(port)

跨来源请求

当请求的资源非同源时,
会在请求中加入新的 HTTP 标头,
让服务器能够描述来源资讯,
以提供浏览器读取。

针对会造成副作用的 HTTP 请求方法,
规范要求浏览器必须要请求传送
「预检(preflight)」请求。


简单请求 Simple requests

不会触发 CORS 预检的请求类型

仅允许下列 HTTP 方法:

  • GET
  • HEAD (en-US)
  • POST

仅允许下列 Content-Type:

  • application/x-www-form-urlencoded
  • multipart/form-data
  • text/plain

预检请求 Preflighted request

只要不符合简单请求的条件,
就会进行「预检(preflighted)」请求。

预检会先以 HTTP 的 OPTIONS 方法
送出请求到另一个网域,
确认後续实际(actual)请求是否可安全送出。

由於跨站请求可能会携带使用者资料,
所以要先进行预检请求。
如果预检没有通过,
浏览器就不会发送 Request。

会触发预检的请求方法(简单请求之外的方法):

  • PUT (en-US)
  • DELETE (en-US)
  • CONNECT
  • OPTIONS (en-US)
  • TRACE (en-US)
  • PATCH (en-US)

参考资料


<<:  Youtube Data API 教学 - 看透你的频道你的心 channels.list

>>:  【PHP Telegram Bot】Day16 - 基础(5):档案读取与写入、cURL

练功活动: 模拟案主!!

在学习前端的过程,有做过真实需求的网站,会是珍贵的经验。而并不是时时刻刻都会有充足的案子,带每一个...

结语

前言 今年13th铁人终於来到了尾声,又过了一年时间过得很快,今年是第二年的挑战(依旧主管迫害啊~)...

Chapter1-DJ最爱的音频动感图像(I)基本流程图 & 操作DOM介面

在开始前,还没看过序章的朋友们,可以点击进去,教学大纲和主题方向都写在里面罗! 看完这章节,你会学到...

[VSCodeVim] Vim的基本操作、模式与状态列

Vim的基本操作、模式与状态列 [系列文目录] 在使用Vim之前,让我们来认识一下Vim的模式(Mo...

C# 入门之数据类型与运算符

数据类型 在 C# 中,支持多种数据类型,不过我们常用的一般有三大类,一种是数值类型,一种是字符类型...