什么是 CORS
CORS(跨域资源共享),是一种浏览器技术,用于允许在一个网站内向另一个网站请求资源,实现跨域访问。在前后端分离的架构中,前端常常需要向不同的域名请求数据,比如调用第三方 API 或访问其他部署在不同域名下的应用。在这种情况下,浏览器会阻止跨域访问,为了解决这个问题,就需要使用 CORS。
CORS 的限制
虽然 CORS 提供了跨域访问的方法,但是浏览器会对跨域请求进行限制。一般来说,浏览器只允许跨域访问以下类型的请求:
- GET
- POST
- HEAD
并且通过 CORS 请求,浏览器会添加一个额外的 HTTP 认证头来告诉服务器这是一个跨域请求,并且必须允许其他域名的访问。
使用 Express.js 和 Node.js 解决 CORS 问题
在 Express.js 中,可以使用 cors 中间件来开启 CORS 支持。cors 中间件可以针对不同的域名设置不同的允许访问策略,支持的配置项如下:
origin
: 允许访问的域名,可以是字符串或数组,默认值为*
,允许所有域名访问。methods
: 允许的 HTTP 方法,可以是字符串或数组,默认允许GET
、PUT
、POST
、DELETE
、OPTIONS
方法。allowedHeaders
: 允许的请求头,可以是字符串或数组,默认允许所有头信息。exposedHeaders
: 允许访问的响应头,可以是字符串或数组,默认不允许访问除了简单响应头以外的其他头信息。credentials
: 是否允许发送认证信息,比如 Cookie、Authorization 等,默认为false
。maxAge
: 预检请求缓存时间,默认为600
秒。
下面是使用 Express.js 和 cors 实现跨域请求的示例代码:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ---- - ---------------- ----- --- - ---------- -- -- ---- -- -------------- ------- --------------------- -------- ------- -------- --------------- ---------------- ----------------- --------------- ---------- ------------ ----- ------- ---- ---- -- ---- -------------------- ----- ---- -- - ---------------- --------- --- -- ----- ---------------- -- -- - ------------------------ -- ------- -- ------------------------ ---
在以上示例代码中,我们设置了允许 http://example.com
的 GET 和 POST 请求,允许传递 Content-Type
和 Authorization
请求头,允许访问 Token
响应头,并启用认证信息传递,预检请求缓存时间为 600
秒。
总结
CORS 问题是前端开发中常见的问题,使用 Express.js 和 Node.js 可以很容易地解决这个问题。使用 cors 中间件可以设置允许访问的域名、HTTP 方法、请求头、响应头等属性,实现安全的跨域访问。希望以上内容能对解决 CORS 问题的读者有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645ab119968c7c53b0d0af53