Pdf.js: pdf.js๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€ URL์— pdf๋ฅผ ๋กœ๋“œํ•˜๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2016๋…„ 04์›” 05์ผ  ยท  22์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mozilla/pdf.js

์•ˆ๋…•ํ•˜์‹ญ๋‹ˆ๊นŒ,
์™ธ๋ถ€ URL์—์„œ pdf๋ฅผ ๋กœ๋“œํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅ˜: ํŒŒ์ผ ์›๋ณธ์ด ๋ทฐ์–ด์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
throw new Error('ํŒŒ์ผ ์›๋ณธ์ด ๋ทฐ์–ด์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.');

๋„์™€์ฃผ์„ธ์š”!

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” viewer.js์—์„œ ์ด ์ค„์„ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

if (fileOrigin !== viewerOrigin) {
throw new Error('ํŒŒ์ผ ์›๋ณธ์ด ๋ทฐ์–ด์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.');
}

๋ชจ๋“  22 ๋Œ“๊ธ€

์ด๊ฒƒ์€ ์˜๋„์ ์œผ๋กœ ์ˆ˜ํ–‰๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. #6916์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. HOTED_VIEWER_ORIGINS ๋ชฉ๋ก์— ํ˜ธ์ŠคํŠธ ์ถœ์ฒ˜๋ฅผ ํฌํ•จํ•˜๋„๋ก viewer.js๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‹ต๋ณ€๋Œ€๋กœ ๋งˆ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@yurydelendik ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค
ํ•˜์ง€๋งŒ ์ด ๋‹ต๋ณ€์ด ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค

ํ•˜์ง€๋งŒ ์ด ๋‹ต๋ณ€์ด ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค

HOTED_VIEWER_ORIGINS ๋ชฉ๋ก์— ํ˜ธ์ŠคํŠธ ์ถœ์ฒ˜๋ฅผ ํฌํ•จํ•˜๋„๋ก viewer.js๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

ํ–ˆ๋Š”๋ฐ ์›๊ฒฉ pdf ํŒŒ์ผ์„ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค

ํ–ˆ๋Š”๋ฐ ์›๊ฒฉ pdf ํŒŒ์ผ์„ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค

์„ค๋ช… ํ•ด์ฃผ์‹ญ์‹œ์˜ค. ๋˜ํ•œ ๋‹ค์Œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํŒŒ์ผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ๋ทฐ์–ด์˜ URL์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
  • viewer.js ์ฝ”๋“œ์—์„œ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
  • PDF๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ์„œ๋ฒ„์—์„œ CORS ํ—ค๋”๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

๋‚ด pdf ํŒŒ์ผ์€ cloudinary์— ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  DEFAULT_URL ๋ณ€์ˆ˜์— ์•ก์„ธ์Šค๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
์˜ค๋ฅ˜: ํŒŒ์ผ ๋ทฐ์–ด์˜ ์ถœ์ฒ˜๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
throw new Error( 'ํŒŒ์ผ ๋ทฐ์–ด ์›๋ณธ์ด \' s '์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Œ);

๋‚˜๋Š” viewer.js์—์„œ ์ด ์ค„์„ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

if (fileOrigin !== viewerOrigin) {
throw new Error('ํŒŒ์ผ ์›๋ณธ์ด ๋ทฐ์–ด์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.');
}

๋…ผ๋ฆฌ๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. console.log()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ fileOrigin๊ณผ viewerOrigin์ด ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. HOSTED_VIEWER_ORIGINS ๊ฐœ์ฒด์˜ ํ•ญ๋ชฉ ์ค‘ ํ•˜๋‚˜ ์ด์ƒ์ด viewerOrigin๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  "_ํŒŒ์ผ ์›๋ณธ์ด ๋ทฐ์–ด์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค_" ์˜ค๋ฅ˜๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

์ด๊ฑธ ๋”ํ•ด:

console.log('fileOrigin', fileOrigin);
console.log('viewerOrigin', viewerOrigin);

... ๋ฐ”๋กœ ์œ„:

if (fileOrigin !== viewerOrigin) {
throw new Error('file origin does not match viewer\'s');
}

๋‚˜์ฒ˜๋Ÿผ URL ๋์— ์ถ”๊ฐ€๋œ ์Šฌ๋ž˜์‹œ๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ๊ฑฐ๋‚˜ ์ถ”๊ฐ€๋˜์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ฝ˜์†”์—์„œ ๋‘ ๋ณ€์ˆ˜๋ฅผ ๋กœ๊น…ํ•  ๋•Œ ๋ฐœ๊ฒฌ๋จ).

์ด๊ฒƒ์ด ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋•๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

regex/wildchars๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HOSTED_VIEWER_ORIGINS ๋ฐฐ์—ด์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜๋“œ ์ฝ”๋”ฉ๋˜์ง€ ์•Š์€ Mozilla ๋„๋ฉ”์ธ์„ ํ—ˆ์šฉํ•˜๋ ค๋ฉด viewer.js๋ผ๋Š” 10k ๋ผ์ธ ๋นŒ๋“œ ํŒŒ์ผ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@gildassamuel ๋‹น์‹ ์ด ๋‚˜์˜ ํ•˜๋ฃจ๋ฅผ

์ ์ ˆํ•œ ์ˆ˜์ •์€ viewer.js๋ฅผ ์—ด๊ณ  ํŒŒ์ผ์˜ ํ˜ธ์ŠคํŠธ๋ฅผ HOSTED_VIEWER_ORIGINS์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
var HOSTED_VIEWER_ORIGINS = ['null', '.....'];

๊ฒ€์‚ฌ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค :|

UWP์—์„œ ๋กœ์ปฌ pdf ํŒŒ์ผ๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ(ํŒŒ์ผ ์ถœ์ฒ˜๊ฐ€ ๋ทฐ์–ด์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Œ)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ์ •ํ™•ํžˆ HOTED_VIEWER_ORIGINS์— ์–ด๋–ค ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์•ฑ ๋‚ด์—์„œ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๊ฒฝ์šฐ ๋กœ์ปฌ ๊ฒฝ๋กœ๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋ ค๋ฉด 'file://'์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

var HOSTED_VIEWER_ORIGINS = [
'์—†๋Š”',
' http://mozilla.github.io ',
' https://mozilla.github.io ',
'file://' //์•ฑ์˜ ๋กœ์ปฌ ๋ทฐ์–ด
];

์ œ ๊ฒฝ์šฐ์—๋Š” ๋กœ์ปฌ๋กœ ์ฝ”๋”ฉํ•˜๊ณ  ์žˆ์—ˆ๊ณ  ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ๋กœ์ปฌ ์ฃผ์†Œ ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

var HOSTED_VIEWER_ORIGINS = [
       'null',
       'http://mozilla.github.io',
       'https://mozilla.github.io',
       'http://localhost:5000'
];

๊ทธ๋Ÿฌ๋‚˜ ๊ฒ€์‚ฌ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค .

if (fileOrigin !== viewerOrigin) {
       throw new Error('file origin does not match viewer\'s');
}

์ด 2์ค„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ํ•ด๊ฒฐ์ฑ…์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ IP๊ฐ€ ์ž๋™์œผ๋กœ ๊ฐ์ง€๋ฉ๋‹ˆ๋‹ค(์–ด๋””์„œ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Œ)

  var LOCAL_AUTO_DETECT_ORIGIN = window.location.origin;

  var HOSTED_VIEWER_ORIGINS = ['null', 'http://mozilla.github.io', 'https://mozilla.github.io'];

  HOSTED_VIEWER_ORIGINS.push(LOCAL_AUTO_DETECT_ORIGIN);

์ด๊ฒƒ์€ ์˜๋„์ ์œผ๋กœ ์ˆ˜ํ–‰๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. #6916์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. HOTED_VIEWER_ORIGINS ๋ชฉ๋ก์— ํ˜ธ์ŠคํŠธ ์ถœ์ฒ˜๋ฅผ ํฌํ•จํ•˜๋„๋ก viewer.js๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‹ต๋ณ€๋Œ€๋กœ ๋งˆ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋ฅผ ๋„์™€ ์ฃผ์—ˆ๋‹ค

๊ทธ๊ฒƒ์€ ๋งค์šฐ ๋‚˜์œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ํ•ด์„œ๋“  ์•„์ง ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์›๋ณธ ' http://localhost '์—์„œ ' https://dmain/file.pdf ' ๊ฐ€์ ธ์˜ค๊ธฐ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๊ฐ€ CORS ์ •์ฑ…์— ์˜ํ•ด ์ฐจ๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค์— 'Access-Control-Allow-Origin' ํ—ค๋”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ถˆํˆฌ๋ช…ํ•œ ์‘๋‹ต์ด ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š” ๊ฒฝ์šฐ ์š”์ฒญ ๋ชจ๋“œ๋ฅผ 'no-cors'๋กœ ์„ค์ •ํ•˜์—ฌ CORS๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์‹ญ๋‹ˆ๊นŒ,

์ด๊ฒƒ์— ๋Œ€ํ•œ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

pdfjs๊ฐ€ ์•„๋‹ˆ๋ผ cors ์ •์ฑ…์— ๊ด€์‹ฌ์„ ๊ฐ–๋Š” ๊ฒƒ์€ ๋ธŒ๋ผ์šฐ์ €์˜ ์ฑ…์ž„์ž…๋‹ˆ๋‹ค.
์ด ์ฒดํฌ๋ฅผ ์—†์• ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

validateFileURL ํ•จ์ˆ˜ ์ƒ๋‹จ์— return; ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ ์ด์ œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. amazon s3์—์„œ pdf๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@IK77์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๊ทธ ์ด์œ ๋ฅผ

๊ธ€์Ž„, ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค : https://github.com/mozilla/pdf.js/pull/6916
@IK77

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰