Pdf.js: viewer.js๋Š” ์˜จ๋ผ์ธ PDF ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2011๋…„ 12์›” 30์ผ  ยท  29์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mozilla/pdf.js

viewer.js๋Š” ์˜จ๋ผ์ธ PDF ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ viewer.js์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

var kDefaultURL = 'compressed.tracemonkey-pldi-09.pdf';

์ด์ œ PDF ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
http://www.liferay.com/documents/31578/11925632/sample.pdf

~์ฒ˜๋Ÿผ

var kDefaultURL = ' http://www.liferay.com/documents/31578/11925632/sample.pdf ';

FireFox 9.0.1 ๋ฐ Chrome 16.0.912.63์—์„œ๋Š” ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

"
PDF.JS ๋นŒ๋“œ: 9161c2e
๋ฉ”์‹œ์ง€: 0์˜ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์„œ๋ฒ„ ์‘๋‹ต์ž…๋‹ˆ๋‹ค.
".

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

@hashbyte ์„œ๋ฒ„์šฉ ํ”„๋ก์‹œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ฐœ๋ฐœํ•œ ๋งค์šฐ ๊ฐ„๋‹จํ•œ ํ”„๋ก์‹œ๋Š” CORS Anywhere์ž…๋‹ˆ๋‹ค. PDF ํŒŒ์ผ์˜ URL ์•ž์— ํ”„๋ก์‹œ์˜ URL์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ:

"https://cors-anywhere.herokuapp.com/" + 
"http://bhpr.hrsa.gov/healthworkforce/rnsurveys/rnsurveyfinal.pdf" =
"https://cors-anywhere.herokuapp.com/http://bhpr.hrsa.gov/healthworkforce/rnsurveys/rnsurveyfinal.pdf"

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด URL์„ URL ์ธ์ฝ”๋”ฉํ•˜๊ณ  file ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋„ฃ์œผ๋ฉด ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ์—ด ์ˆ˜ ์žˆ๋Š” ๋งํฌ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://mozilla.github.io/pdf.js/web/viewer.html ?file=https%3A%2F%2Fcors-anywhere.herokuapp.com%2Fhttp%3A%2F%2Fbhpr.hrsa.gov%2Fhealthworkforce%2Frnsurveys%2Frnsurveyfinal.pdf

์ฐธ๊ณ : PDF URL์— ํผ์„ผํŠธ ๊ธฐํ˜ธ๋‚˜ & ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋งํฌ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฐ€์ ธ์˜ค๋Š” ๋” ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ๋งํฌ ์•ž์— ๋ทฐ์–ด URL์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ ๋จผ์ € URL ์ธ์ฝ”๋”ฉ ์—†์ด ). URL์„ ์ˆ˜๋™์œผ๋กœ ์ž…๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค(์˜ˆ: ๋น ๋ฅธ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ):
https://mozilla.github.io/pdf.js/web/viewer.html?file=https://cors-anywhere.herokuapp.com/ http://bhpr.hrsa.gov/healthworkforce/rnsurveys/rnsurveyfinal. PDF

์ฐธ๊ณ : CORS Anywhere ๋ฐ๋ชจ๋Š” ๊ธฐ๋Šฅ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋งŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๋ฐฉ๋ฌธ์ž๊ฐ€ ๋งŽ์€ ์‚ฌ์ดํŠธ์—์„œ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๊ณต๊ฐœ ๋ฐ๋ชจ ์„œ๋ฒ„์— ๋ถ€๋‹นํ•œ ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ์ง€ ์•Š๋„๋ก CORS Anywhere ์ธ์Šคํ„ด์Šค๋ฅผ ์ง์ ‘ ํ˜ธ์ŠคํŒ…ํ•˜์‹ญ์‹œ์˜ค. CORS Anywhere์˜ ์„ฑ๋Šฅ์ด ๋‚จ์šฉ์œผ๋กœ ์ธํ•ด ํฌ๋กค๋ง๋˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ๊ท€ํ•˜์˜ ์ถœ์ฒ˜๊ฐ€ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ์— ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค. CORS Anywhere๋ฅผ ์ง์ ‘ ํ˜ธ์ŠคํŒ…ํ•  ๋•Œ originWhitelist ๊ตฌ์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋‚จ์šฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๊ด€๋ จ ๋ฌธ์ œ๋Š” #522, #586 ๋ฐ #842์ž…๋‹ˆ๋‹ค.

์œ„ ๋ฌธ์ œ์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋ก์‹œ ๋˜๋Š” CORS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šค์Šค๋กœ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” ๋ธŒ๋ Œ๋“œ๋‹˜

"์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋ก์‹œ ๋˜๋Š” CORS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šค์Šค๋กœ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š”" ์ฃผ๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

PDF๊ฐ€ "http://"์™€ ๊ฐ™์€ ๋กœ์ปฌ(์—…๋กœ๋“œ), ์„œ๋ฒ„๋ฅผ ํŒŒ์ผ๋กœ, ์„œ๋ฒ„์—์„œ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

PDF ๋ฆฌ๋”๋Š” ์ด๋ฏธ์ง€ URL๋กœ HTTP URL์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”

@jonasyuandotcom cors๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋™์ผํ•œ ์„œ๋ฒ„์—์„œ http๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ pdf๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ธŒ๋ผ์šฐ์ €๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€ ์„œ๋ฒ„๋กœ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ๋ณด๋‚ด๋Š” ๊ฒƒ์„ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„œ๋ฒ„๋Š” http ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ œํ•œ์„ ์šฐํšŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์ธก ํ”„๋ก์‹œ๋Š” ๋ทฐ์–ด์™€ ๋™์ผํ•œ ์„œ๋ฒ„์— ์œ„์น˜ํ•˜๋ฏ€๋กœ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

@notmasteryet ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋™์ผํ•œ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

var kDefaultURL = '/pdf-reader-web/sample.pdf';

์•ˆ๋…• ์กฐ๋‚˜์Šค,

๋ธŒ๋ผ์šฐ์ € ๋ณด์•ˆ ์ œํ•œ์œผ๋กœ ์ธํ•ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. http://en.wikipedia.org/wiki/XMLHttpRequest#Cross -domain_requests ์ฐธ์กฐ

๋ธŒ๋ Œ๋“ 

์•ˆ๋…•ํ•˜์„ธ์š” @brendandahl

2011๋…„ ์ดํ›„ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. CORS ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์—ฌ์ „ํžˆ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ. ์ž์„ธํ•œ ๋‚ด์šฉ์€ https://github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions#faq -xhr์„ ์ฐธ์กฐ

ํŒ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์•ˆ๋…•ํ•˜์„ธ์š” @timvandermeij์ž…๋‹ˆ๋‹ค. ์‘๋‹ตํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์†”๋ฃจ์…˜์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋‚ด ์›น ์„œ๋ฒ„์—์„œ CORS๋ฅผ ํ—ˆ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. git ์˜ˆ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@Dassine ์—ฌ๊ธฐ http://mozilla.github.io/pdf.js/web/viewer.html?file=//async5.org/moz/pdfjs.pdf -- PDF ๋ทฐ์–ด ๋กœ๋“œ http://async5.org /moz/pdfjs.pdf . async5.org๋Š” mozilla.github.io๊ฐ€ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ณด์•ˆ์ƒ์˜ ์ด์œ ๋กœ ์›๊ฒฉ ํŒŒ์ผ ์•ก์„ธ์Šค๋ฅผ ์ฐจ๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์›น์˜ ํ‘œ์ค€ ๊ด€ํ–‰์ด๋ฉฐ ๋ธŒ๋ผ์šฐ์ € ๋ณด์•ˆ์„ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•ด PDF.js๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์€ ์—†์Šต๋‹ˆ๋‹ค.

๋ฐ์Šคํฌํƒ‘/๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ธŒ๋ผ์šฐ์ € ์ปจํŠธ๋กค์„ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ OS/Framework API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ  Uint8Array๋กœ PDF.js์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ๋งํฌ์— ๋Œ€ํ•ด @yurydelendik ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. PDF.js๊ฐ€ CORS๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. @timvandermeij ๋ฐ ๊ธฐํƒ€์—์„œ ๋ณด๋‚ธ ์†”๋ฃจ์…˜์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. pdf.js ์ €์žฅ์†Œ๊ฐ€ ๋‹ค์šด๋กœ๋“œ๋˜๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๊ตฌํ˜„/์ˆ˜์ • ์†”๋ฃจ์…˜์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”

@yurydelendik ๋˜ํ•œ ์›๊ฒฉ PDF ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์˜ค๋ฅ˜๋Š” Chrome์—์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
PDF.js v1.0.1040(๋นŒ๋“œ: 997096f)
๋ฉ”์‹œ์ง€: PDF " http://bhpr.hrsa.gov/healthworkforce/rnsurveys/rnsurveyfinal.pdf "๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋™์•ˆ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์„œ๋ฒ„ ์‘๋‹ต(0)์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋กœ๋“œํ•˜๋ ค๊ณ  ํ•˜๋Š” PDF๊ฐ€ ๋‚ด๊ฐ€ ์ œ์–ดํ•  ์ˆ˜ ์—†๋Š” ๋‹ค๋ฅธ ์„œ๋ฒ„์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๋‚ด viewer.js์— ์ด PDF๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

CORS์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ๋งŽ์ง€ ์•Š์ง€๋งŒ ์„œ๋ฒ„์— ์ตœ์†Œํ•œ์˜ ๋ณด์•ˆ crossdomain.xml ํŒŒ์ผ์„ ์ƒ์„ฑํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@hashbyte ์„œ๋ฒ„์šฉ ํ”„๋ก์‹œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ฐœ๋ฐœํ•œ ๋งค์šฐ ๊ฐ„๋‹จํ•œ ํ”„๋ก์‹œ๋Š” CORS Anywhere์ž…๋‹ˆ๋‹ค. PDF ํŒŒ์ผ์˜ URL ์•ž์— ํ”„๋ก์‹œ์˜ URL์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ:

"https://cors-anywhere.herokuapp.com/" + 
"http://bhpr.hrsa.gov/healthworkforce/rnsurveys/rnsurveyfinal.pdf" =
"https://cors-anywhere.herokuapp.com/http://bhpr.hrsa.gov/healthworkforce/rnsurveys/rnsurveyfinal.pdf"

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด URL์„ URL ์ธ์ฝ”๋”ฉํ•˜๊ณ  file ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋„ฃ์œผ๋ฉด ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ์—ด ์ˆ˜ ์žˆ๋Š” ๋งํฌ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://mozilla.github.io/pdf.js/web/viewer.html ?file=https%3A%2F%2Fcors-anywhere.herokuapp.com%2Fhttp%3A%2F%2Fbhpr.hrsa.gov%2Fhealthworkforce%2Frnsurveys%2Frnsurveyfinal.pdf

์ฐธ๊ณ : PDF URL์— ํผ์„ผํŠธ ๊ธฐํ˜ธ๋‚˜ & ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋งํฌ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฐ€์ ธ์˜ค๋Š” ๋” ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ๋งํฌ ์•ž์— ๋ทฐ์–ด URL์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ ๋จผ์ € URL ์ธ์ฝ”๋”ฉ ์—†์ด ). URL์„ ์ˆ˜๋™์œผ๋กœ ์ž…๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค(์˜ˆ: ๋น ๋ฅธ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ):
https://mozilla.github.io/pdf.js/web/viewer.html?file=https://cors-anywhere.herokuapp.com/ http://bhpr.hrsa.gov/healthworkforce/rnsurveys/rnsurveyfinal. PDF

์ฐธ๊ณ : CORS Anywhere ๋ฐ๋ชจ๋Š” ๊ธฐ๋Šฅ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋งŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๋ฐฉ๋ฌธ์ž๊ฐ€ ๋งŽ์€ ์‚ฌ์ดํŠธ์—์„œ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๊ณต๊ฐœ ๋ฐ๋ชจ ์„œ๋ฒ„์— ๋ถ€๋‹นํ•œ ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ์ง€ ์•Š๋„๋ก CORS Anywhere ์ธ์Šคํ„ด์Šค๋ฅผ ์ง์ ‘ ํ˜ธ์ŠคํŒ…ํ•˜์‹ญ์‹œ์˜ค. CORS Anywhere์˜ ์„ฑ๋Šฅ์ด ๋‚จ์šฉ์œผ๋กœ ์ธํ•ด ํฌ๋กค๋ง๋˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ๊ท€ํ•˜์˜ ์ถœ์ฒ˜๊ฐ€ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ์— ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค. CORS Anywhere๋ฅผ ์ง์ ‘ ํ˜ธ์ŠคํŒ…ํ•  ๋•Œ originWhitelist ๊ตฌ์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋‚จ์šฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

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

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

@gildassamuel ์ž์„ธํ•œ ๋‚ด์šฉ์€ #6916์„ ์ฐธ์กฐํ•˜์„ธ์š”.

@jonasyuandotcom ํŒŒ์ผ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ ํŒŒ์ผ๊ณผ pdfjs๋ฅผ ๋™์ผํ•œ ํŒŒ์ผ ์„œ๋ฒ„์— ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ์„œ๋ฒ„์—์„œ "Access-Control-Allow-Origin"์„ ์„ค์ •ํ•˜๋ผ๋Š” ์ง€์นจ์„ ๋”ฐ๋ž์ง€๋งŒ ๊ณ„์† ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
screen shot 2016-09-28 at 10 32 35 am
http ํ—ค๋”๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
screen shot 2016-09-28 at 10 33 16 am
๋ฌธ์ œ์˜ ๊ฐ€๋Šฅํ•œ ์›์ธ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋ชจ๋“  ํฌ์ธํ„ฐ๋ฅผ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@yjguoo ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์™€ ํ—ค๋”๊ฐ€ ํ•ฉ์‚ฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฆฌ๋””๋ ‰์…˜ ๋Œ€์ƒ์— ์˜ˆ์ƒ ํ—ค๋”๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

chrome://net-internals/#events ๋ฐฉ๋ฌธํ•˜๊ณ  ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ๋กœ๊ทธ์—์„œ ์ฐจ๋‹จ๋œ ๋ฆฌ๋””๋ ‰์…˜์˜ ์‹ค์ œ ํ—ค๋”๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” Rob ๋น ๋ฅธ ์‘๋‹ต์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์š”์ฒญํ•œ URL "https://files.dev52.slack.com/files-pri/T076SHX5W-F07CGBKK2/git-for-beginners-handout.pdf"๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ž…๋ ฅํ•˜๋ฉด ํŒŒ์ผ ์„œ๋ฒ„์—์„œ ๋‹ค๋ฅธ ์‘๋‹ต ํ—ค๋”๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
screen shot 2016-09-28 at 11 58 52 am
์‘๋‹ต ํ—ค๋”์˜ ๋‹ค๋ฅธ ์œ„์น˜๋กœ ๋ผ์šฐํŒ…๋˜์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ƒˆ๋กœ์šด ์œ„์น˜์—์„œ ๋‚˜๋Š” ์ƒํƒœ 200 ok๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.
screen shot 2016-09-28 at 11 59 05 am
๋‚ด ์ฒซ ๋ฒˆ์งธ ์งˆ๋ฌธ: ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ˆ˜๋™์œผ๋กœ URL์„ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ๊ณผ XmlHttpRequest๋ฅผ ํ†ตํ•œ ๊ฒƒ ์‚ฌ์ด์— ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?
BTW ๊ธฐ๋ณธ pdf.js ๋ทฐ์–ด(html css js)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ถœ์ฒ˜์—์„œ pdf๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(๊ต์ฐจ ๋˜๋Š” ์š”์ฒญ ๋ฌธ์ œ)
๋‘ ๋ฒˆ์งธ ์งˆ๋ฌธ: ์ œ ๋ฌธ์ œ์ธ์ง€ ์•„๋‹ˆ๋ฉด ๊ธฐ๋ณธ viewer.js/pdf.js๊ฐ€ XmlHttpRequest๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

๊ณ ๋ง™์Šต๋‹ˆ๋‹ค :)

๋‚ด ์ฒซ ๋ฒˆ์งธ ์งˆ๋ฌธ: ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ˆ˜๋™์œผ๋กœ URL์„ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ๊ณผ XmlHttpRequest๋ฅผ ํ†ตํ•œ ๊ฒƒ ์‚ฌ์ด์— ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ํŠนํžˆ ๊ต์ฐจ ์ถœ์ฒ˜ ์š”์ฒญ์˜ ๊ฒฝ์šฐ. ๊ต์ฐจ ์ถœ์ฒ˜ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์š”์ฒญ์€ CORS์—์„œ ํ—ˆ์šฉํ•œ ๊ฒฝ์šฐ์—๋งŒ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” Origin ํ—ค๋”๋กœ ์š”์ฒญ์„ ๋ฐœํ–‰ํ•˜๊ณ , ์„œ๋ฒ„๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ ์Šน์ธ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค( Access-Control-Allow-Origin ์‘๋‹ต ํ—ค๋”์— ์š”์ฒญ๋œ ์ถœ์ฒ˜ ํฌํ•จ).

๋˜ํ•œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž๊ฒฉ ์ฆ๋ช…์€ ๊ต์ฐจ ์ถœ์ฒ˜ ์š”์ฒญ์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฟ ํ‚ค๋ฅผ ํฌํ•จํ•˜๋ ค๋ฉด ์„œ๋ฒ„๊ฐ€ Access-Control-Allow-Credentials: true ์‘๋‹ตํ•ด์•ผ ํ•˜๊ณ  XHR ์š”์ฒญ์— withCredentials ์†์„ฑ์ด true ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์งˆ๋ฌธ: ์ œ ๋ฌธ์ œ์ธ์ง€ ์•„๋‹ˆ๋ฉด ๊ธฐ๋ณธ viewer.js/pdf.js๊ฐ€ XmlHttpRequest๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

์„œ๋ฒ„๋ฅผ ๋‹ค๋ฅด๊ฒŒ ๊ตฌ์„ฑํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ MDN ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
๋˜๋Š” CORS ์‚ฌ์–‘ ์ฝ๊ธฐ: https://www.w3.org/TR/2014/REC-cors-20140116/

์•ˆ๋…•ํ•˜์„ธ์š” ๋กญ,

Access-Control-Allow-Credentials: true ๋„ ์„ค์ •ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ๋„์›€์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค <3. ๊ทธ๋Ÿฌ๋‚˜ ๋ฆฌ๋””๋ ‰์…˜๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋ช‡ ๊ฐ€์ง€ ์ง€์นจ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” XHR์„ ํ•œ๋‹ค
URL#1์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญํ•˜์‹ญ์‹œ์˜ค(ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋ฌธ์ œ). ๊ทธ๋Ÿฐ ๋‹ค์Œ URL#2(์ƒํƒœ 302)๋กœ ๋ฆฌ๋””๋ ‰์…˜๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ URL#1๊ณผ URL#2๋Š” ๋ชจ๋‘ ๋™์ผํ•œ ์„œ๋ฒ„๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
screen shot 2016-09-29 at 9 40 41 am
URL#1์— ๋Œ€ํ•ด ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์‘๋‹ต ํ—ค๋”๋ฅผ ์„ค์ •ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋‘˜ ๋‹ค ๋™์ผํ•œ ์„œ๋ฒ„์— ์žˆ๊ณ  Origin์ด null์ด๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

๋‘ URL์ด ๋™์ผํ•œ ์„œ๋ฒ„๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ๋””๋ ‰์…˜ ์ถœ์ฒ˜๊ฐ€ NULL์ด์ง€๋งŒ ํ™•์‹คํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ์ถœ์ฒ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ ๋‘ URL์ด ๋™์ผํ•œ ํŒŒ์ผ ์„œ๋ฒ„๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? *์™€ ๊ฐ™์€ ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•ด ๋ณด์•˜์ง€๋งŒ ๋ถ„๋ช…ํžˆ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ๋””๋ ‰์…˜ ํ›„ Chrome์€ ์›๋ณธ ํ—ค๋”๋ฅผ ์‹ค์ œ URL ๋Œ€์‹  "null" ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค( https://crbug.com/154967).

null ๊ฐ’์ด ์žˆ๋Š” Access-Control-Allow-Origin ๋ฅผ ์กฐ๊ฑด๋ถ€๋กœ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชจ๋“  ์›น์‚ฌ์ดํŠธ์—์„œ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค . ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ(๋Œ€๋ถ€๋ถ„) ๋ฆฌ๋””๋ ‰์…˜์„ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์š”์ฒญ์„ ๋Œ€์ƒ URL๋กœ ์ง์ ‘ ์ „์†กํ•˜์—ฌ(URL์„ ๋ฏธ๋ฆฌ ์•Œ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ ๋Œ€์ƒ URL์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ƒˆ API ๋์ ์„ ์„œ๋ฒ„์— ์ถ”๊ฐ€).

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์‚ดํŽด๋ณผ๊ฒŒ์š” :)

Hey Rob src๊ฐ€ ์ด๋ฏธ ์„ค์ •๋œ pdf ๋ทฐ์–ด๋‚˜ pdf.js๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  XHR ์š”์ฒญ์„ ํ•œ๊บผ๋ฒˆ์— ํ”ผํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

@yjguoo PDF ๋ฐ์ดํ„ฐ๋ฅผ base64๋กœ ์ธ์ฝ”๋”ฉํ•˜๊ณ  ๋ฐ์ดํ„ฐ URL์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฐ PDF ํŒŒ์ผ์˜ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ base64๋กœ ์ธ์ฝ”๋”ฉํ•˜๋ฉด ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ 33% ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋กœ ์ธํ•ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ๋‚˜๋น ์ง‘๋‹ˆ๋‹ค(=์ง„ํ–‰๋ฅ  ํ‘œ์‹œ์ค„์ด ์—†๋Š” ๋นˆ ํŽ˜์ด์ง€). ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ XHR์„ ๊ณ„์† ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ๋ฐฉ๊ธˆ ํ…Œ์ŠคํŠธํ–ˆ์œผ๋ฉฐ CORS๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ ์ž‘๋™ํ•˜์ง€๋งŒ ํŒŒ์ผ์ด ๋งค์šฐ ํฐ ๊ฒฝ์šฐ ํŒŒ์ผ์„ ์ฒญํฌ/๋ฒ”์œ„๋กœ ๊ฐ€์ ธ์˜ค์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

.htaccess์— ์ด๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ•ด๊ฒฐ:
ํ—ค๋” ์„ธํŠธ Accept-Ranges ๋ฐ”์ดํŠธ
ํ—ค๋” ์„ธํŠธ Access-Control-Allow-Origin "*"
ํ—ค๋” ์„ธํŠธ Access-Control-Allow-Methods "GET"
ํ—ค๋” ์„ธํŠธ Access-Control-Allow-Headers "์ฝ˜ํ…์ธ  ์œ ํ˜•, ๋ฒ”์œ„"
ํ—ค๋” ์„ธํŠธ Access-Control-Expose-Headers "Accept-Ranges, Content-Encoding, Content-Length, Content-Range"

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!!!

@Rob--W ๋งŽ์€ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€์—์„œ ์ž‘๋™ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ(์˜ˆ: XHR ํ—ค๋” ๋ณ€๊ฒฝ)? (worker.js ๋‚ด๋ถ€)

์•ˆ๋…•ํ•˜์„ธ์š”, ์—ฌ์ „ํžˆ ์ด๊ฒƒ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ์„ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

https://drive.google.com/viewerng/viewer?embedded=true&url=http://www.africau.edu/images/default/sample.pdf

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