- vừa được xem lúc

CORS là gì? CORS với Nodejs

0 0 56

Người đăng: Ngo Minh Phong

Theo Viblo Asia

CORS (hay Cross-origin resource sharing) là gì ?

  • Đúng như tên của nó thì cors nghĩa là chia sẻ tài nguyên chéo nhau, hơi khó hiểu 1 tí nhưng dễ hiểu hơn thì nó là việc bạn chia sẻ tài nguyên của các domain khác nhau cho nhau, hay đơn giản hơn là khi việc client gọi 1 api từ 1 nguồn khác có domain khác với trang hiện tại (nguồn gốc) chính là cors.

Lỗi cors trên trình duyệt:

  • Một số bạn viết api hay làm front end ở phía client thì chắc cũng sẽ có vài lần gặp phải trường hợp như trên, vậy thì lỗi này do đâu và cách xử lý như thế nào ?
  • Lỗi cors là một chính sách của trình duyệt nhằm ngăn chặn việc truy cập tài nguyên của các domain khác khi không được phép. Giả sử mình có api viết ra nhưng bất kì đâu, bất kì trang web nào cũng có thể sử dụng, muốn ngắn chặn điều đó bạn chỉ việc không cho phép cors để giảm không cho các domain, máy chủ khác sử dụng api của mình, ngoài ra nó cũng giúp bảo vệ cho người dùng tránh các trang web độc hại truy cập các resource khác trái phép.
  • Fix lỗi cors: Để cho phép một ứng dụng web chạy ở origin này (thường là domain này) có thể truy cập được các tài nguyên ở origin khác (domain khác) ta cần cho phép cors thông qua các trường trong HTTP header để trình duyệt biết rằng ta cho phép truy cập cors.
  • Để thực hiện cors thì bắt buộc phải khai báo Access-Control-Allow-Origin trong Header để khai báo các nguồn được phép truy câp, có thể là * để cho phép tất cả các nguồn truy cập đến. ** Như vậy thôi thì vẫn là chưa đủ vì có thể có nhiều nguyên nhân khác như methods hay content-type không được chấp nhận, ở đây mình chỉ hướng dẫn và giới thiệu sơ để enable cors cho api của bạn nhé, nếu mọi thứ không hoạt động bạn có thể tham khảo thêm để xem mình gặp lỗi gì tại https://developer.mozilla.org/vi/docs/Web/HTTP/Access_control_CORS

CORS với nodejs (express)

  • Sử dụng middleware gắn Access-Control-Allow-Origin vào response.
app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next();
});

Sử dụng pakage CORS cho express.

ref: https://www.npmjs.com/package/cors

  • Cors là 1 pakage hết sức tiện lợi, cung cấp các middleware cho phép ta enable cors với nhiều option để tùy chỉnh và ngắn gọn cho express.
  • Cài đặt và cấu hình
  • Cài đặt
$ npm install cors
  • Để cho phép cors với toàn bộ route:
var express = require('express')
var cors = require('cors')
var app = express() app.use(cors()) app.listen(80, function () { console.log('CORS-enabled web server listening on port 80')
})
  • Hoặc chỉ với 1 route chỉ định, bạn chỉ việc thêm middleware cors cho route đó.
var express = require('express')
var cors = require('cors')
var app = express() app.get('/allow_cors', cors(), function (req, res, next) { res.json({msg: 'This is CORS-enabled for a Single Route'})
})
  • Bạn cũng hoàn toàn chỉ định cụ thể 1 hay nhiều nguồn giới hạn được phép truy cập...
  • Ngoài ra còn có rất nhiều option khác tùy thuộc vào tình huống bạn găp phải mà có thể xem thêm tại: https://www.npmjs.com/package/cors

Tổng kết

  • Có thể sẽ có nhiều bạn cảm thấy cors thật sự phiền toái và vô dụng, nhưng thật sự thì cors nó giúp cho cả máy chủ của bạn lẫn người dùng web giải quyết rất nhiều vấn đề cũng như giảm thiểu các rủi ro.
  • Nội dung bài viết có thể chưa hoàn chỉnh hoặc có sai xót, mọi thăc mắc hay góp ý các bạn có thể reply trực tiếp bên dưới mình sẽ cố hết sức để trả lời. cảm ơn các bạn đã đọc đến đây. 😍

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 500

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 374

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 1 701

- vừa được xem lúc

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 335

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 421

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 414