国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

PDF.js CORS 問題

問題概要

我從域 A 將 PDF.js 加載到 iframe 中,并以文件作為參數(shù)(服務(wù)器的完整路徑,這將返回 pdf 文檔)。PDF.js 將向域 B 的服務(wù)器創(chuàng)建一個(gè)請求,擴(kuò)展名為origin: domain A. 域 B 的服務(wù)器返回帶有 header 的 pdf 文檔Access-Control-Allow-Origin: domain A,到目前為止一切順利。

在我的網(wǎng)絡(luò)選項(xiàng)卡中,我看到對服務(wù)器的請求,該請求返回 200 狀態(tài) OK,但 PDF.js 拋出錯(cuò)誤Unexpected server response (0) while retrieving PDF <url>。

問題是,這里發(fā)生了什么,CORS 似乎沒問題,但我無法從 PDF.js 獲得更多信息,真正的原因是 PDF 無法加載。有沒有人遇到過同樣的情況?

問題解決

跨域Ajax與跨源資源共享

幾年前,Web 開發(fā)人員正在用頭撞 Ajax 的第一堵墻:同源策略。雖然我們驚嘆于跨瀏覽器支持所帶來的巨大進(jìn)步XMLHttpRequest對象,我們很快就抱怨沒有辦法從 JavaScript 向不同的域發(fā)出請求。每個(gè)人都在自己的網(wǎng)站上設(shè)置代理,這是一系列新的開放重定向問題的開始,作為繞過限制的一種方法。盡管開發(fā)人員正在使用服務(wù)器端代理以及其他技術(shù)來解決此限制,但社區(qū)對允許本機(jī)跨域 Ajax 請求的強(qiáng)烈抗議。許多人沒有意識(shí)到,幾乎所有瀏覽器(Internet Explorer 8+、Firefox 3.5+、Safari 4+ 和 Chrome)目前都通過稱為跨源資源共享的協(xié)議支持跨域 Ajax。

跨域資源共享 (CORS)

跨源資源共享(CORS) 是 W3C 工作草案,定義了跨源訪問源時(shí)瀏覽器和服務(wù)器必須如何通信。CORS 背后的基本思想是使用自定義 HTTP 標(biāo)頭,讓瀏覽器和服務(wù)器充分了解彼此,以確定請求或響應(yīng)應(yīng)該成功還是失敗。

對于一個(gè)簡單的請求,即使用 GET 或 POST 且不帶自定義標(biāo)頭且正文為 的請求text/plain,該請求會(huì)使用名為 的額外標(biāo)頭發(fā)送Origin。標(biāo)Origin頭包含請求頁面的來源(協(xié)議、域名和端口),以便服務(wù)器可以輕松確定是否應(yīng)該提供響應(yīng)。示例Origin標(biāo)頭可能如下所示:

Origin: https://humanwhocodes.com

如果服務(wù)器決定允許該請求,它會(huì)發(fā)送一個(gè)Access-Control-Allow-Origin標(biāo)頭,回顯與發(fā)送的相同來源或“*”(如果它是公共資源)。例如:

Access-Control-Allow-Origin: https://humanwhocodes.com

如果此標(biāo)頭丟失,或者來源不匹配,則瀏覽器將不允許該請求。如果一切順利,瀏覽器就會(huì)處理該請求。請注意,請求和響應(yīng)都不包含 cookie 信息。

前面提到的所有瀏覽器都支持這些簡單的請求。Firefox 3.5+、Safari 4+ 和 Chrome 都支持通過該XMLHttpRequest對象使用。當(dāng)嘗試打開不同來源的資源時(shí),此行為會(huì)自動(dòng)觸發(fā),無需任何額外代碼。例如:

var xhr = new XMLHttpRequest();
xhr.open("get", "https://humanwhocodes.com/some_resource/", true);
xhr.onload = function(){//instead of onreadystatechange
//do something
};
xhr.send(null);

要在 Internet Explorer 8 中執(zhí)行相同的操作,您需要以相同的方式使用該XDomainRequest對象:

var xdr = new XDomainRequest();
xdr.open("get", " 
xdr.onload = function(){
//do something
};
xdr.send();

Mozilla 團(tuán)隊(duì)在有關(guān) CORS 的帖子中建議您應(yīng)該檢查該withCredentials屬性是否存在,以確定瀏覽器是否通過 XHR 支持 CORS。然后,您可以結(jié)合該XDomainRequest對象的存在來覆蓋所有瀏覽器:

function createCORSRequest(method, url){
    var xhr = new XMLHttpRequest();
    if ("withCredentials" in xhr){
        xhr.open(method, url, true);
    } else if (typeof XDomainRequest != "undefined"){
        xhr = new XDomainRequest();
        xhr.open(method, url);
    } else {
        xhr = null;
    }
    return xhr;
}

var request = createCORSRequest("get", "https://humanwhocodes.com/");
if (request){
    request.onload = function(){
        //do something with request.responseText
    };
    request.send();
}

Firefox、Safari 和 Chrome 中的對象XMLHttpRequest與 IE 對象具有足夠相似的接口XDomainRequest,因此該模式工作得相當(dāng)好。常見的接口屬性/方法有:

  • abort()– 用于停止已經(jīng)在進(jìn)行的請求。

  • onerror– 使用而不是onreadystatechange檢測錯(cuò)誤。

  • onload– 使用而不是onreadystatechange檢測成功。

  • responseText– 用于獲取響應(yīng)內(nèi)容。

  • send()– 用于發(fā)送請求。

預(yù)檢請求

CORS 允許通過稱為預(yù)檢請求的透明服務(wù)器驗(yàn)證機(jī)制使用自定義標(biāo)頭、GET 或 POST 以外的方法以及不同的正文內(nèi)容類型。當(dāng)您嘗試使用高級(jí)選項(xiàng)之一發(fā)出請求時(shí),系統(tǒng)會(huì)向服務(wù)器發(fā)出“預(yù)檢”請求。此請求使用 OPTIONS 方法并發(fā)送以下標(biāo)頭:

  • Origin– 與簡單請求相同。

  • Access-Control-Request-Method– 請求想要使用的方法。

  • Access-Control-Request-Headers– (可選)正在使用的自定義標(biāo)頭的逗號(hào)分隔列表。

假設(shè)一個(gè)帶有名為 的自定義標(biāo)頭的 POST 請求的示例NCZ:

Origin: https://humanwhocodes.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: NCZ


文章來源地址http://www.zghlxwxcb.cn/article/293.html

在此請求期間,服務(wù)器可以確定是否允許此類請求。服務(wù)器通過在響應(yīng)中發(fā)送以下標(biāo)頭將此信息傳達(dá)給瀏覽器:

  • Access-Control-Allow-Origin– 與簡單請求相同。

  • Access-Control-Allow-Methods– 允許的方法的逗號(hào)分隔列表。

  • Access-Control-Allow-Headers– 服務(wù)器允許的標(biāo)頭的逗號(hào)分隔列表。

  • Access-Control-Max-Age– 此預(yù)檢請求應(yīng)緩存的時(shí)間(以秒為單位)。

例子:

Access-Control-Allow-Origin: https://humanwhocodes.com
Access-Control-Allow-Methods: POST, GET
Access-Control-Allow-Headers: NCZ
Access-Control-Max-Age: 1728000

一旦發(fā)出預(yù)檢請求,結(jié)果將被緩存響應(yīng)中指定的時(shí)間段;您只會(huì)在第一次發(fā)出此類請求時(shí)產(chǎn)生額外 HTTP 請求的費(fèi)用。

Firefox 3.5+、Safari 4+ 和 Chrome 均支持預(yù)檢請求;Internet Explorer 8 沒有。

憑證請求

默認(rèn)情況下,跨源請求不提供憑據(jù)(cookie、HTTP 身份驗(yàn)證和客戶端 SSL 證書)。您可以通過將該屬性設(shè)置為 true 來指定請求應(yīng)發(fā)送憑據(jù)withCredentials。如果服務(wù)器允許憑據(jù)請求,則它會(huì)使用以下 HTTP 標(biāo)頭進(jìn)行響應(yīng):

Access-Control-Allow-Credentials: true

如果發(fā)送了憑據(jù)請求并且此標(biāo)頭未作為響應(yīng)的一部分發(fā)送,則瀏覽器不會(huì)將響應(yīng)傳遞給 JavaScript(responseText是空字符串,status為 0,并且onerror()被調(diào)用)。請注意,服務(wù)器還可以發(fā)送此 HTTP 標(biāo)頭作為預(yù)檢響應(yīng)的一部分,以指示允許源發(fā)送憑證請求。

Internet Explorer 8 不支持該withCredentials屬性;Firefox 3.5、Safari 4 和 Chrome 都支持它。

結(jié)論

現(xiàn)代 Web 瀏覽器對跨域 Ajax 提供了大量可靠的支持,但大多數(shù)開發(fā)人員仍然沒有意識(shí)到這種強(qiáng)大的功能。使用時(shí)只需要一點(diǎn)額外的 JavaScript 工作和一點(diǎn)額外的服務(wù)器端工作即可確保發(fā)送正確的標(biāo)頭。IE8 的實(shí)現(xiàn)在允許高級(jí)請求和憑據(jù)請求方面落后于其他版本,但希望對 CORS 的支持將繼續(xù)改進(jìn)。


到此這篇關(guān)于PDF.js CORS 問題的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

原文地址:http://www.zghlxwxcb.cn/article/293.html

如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請聯(lián)系站長進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • PDF.js - 免費(fèi)開源的 JavaScript 讀取、顯示 PDF 文檔的工具庫,由 Mozilla 開發(fā)并且持續(xù)維護(hù)

    PDF.js - 免費(fèi)開源的 JavaScript 讀取、顯示 PDF 文檔的工具庫,由 Mozilla 開發(fā)并且持續(xù)維護(hù)

    最近新項(xiàng)目需要處理 PDF,研究了 PDf.js 之后覺得很不錯(cuò),于是寫篇文章推薦給大家。 PDF.js 的功能和它的名字一樣簡單,是一個(gè)使用 HTML5 技術(shù)來讓前端網(wǎng)頁支持讀取、解析和顯示 PDF 文檔的 JS 工具庫。這個(gè)項(xiàng)目由大名鼎鼎的 Mozilla 組織開發(fā)并且更新維護(hù)著,沒錯(cuò),就是那個(gè)開

    2024年01月21日
    瀏覽(43)
  • 【PDF.js】PDF文件預(yù)覽

    【PDF.js】PDF文件預(yù)覽

    使用PDFJS實(shí)現(xiàn)pdf文件的預(yù)覽,支持預(yù)覽指定頁、搜索、縮略圖、頁面尺寸調(diào)整等等。 官方地址 文檔地址 下載地址 將下載的壓縮包解壓并放入到項(xiàng)目中的public文件夾下,我這里下載的是pdfjs-4.0.379-dist版本,如下 在 pdfjs-4.0.379-dist/web/viewer.mjs 內(nèi)搜索 throw new Error(“file or

    2024年04月11日
    瀏覽(27)
  • pdf.js預(yù)覽pdf文件

    預(yù)覽pdf一般通過瀏覽器自帶的pdf預(yù)覽器就可以,但有時(shí)候需要窗口預(yù)覽或自定義操作,可以使用pdf.js操作 pdf.js需要構(gòu)建后使用,我們可以直接下載安裝pdfjs-dist,這是構(gòu)建好的版本 這里注意你的環(huán)境,新版本使用了可選鏈,空值合并和私有 class 字段/方法等,如果你的瀏覽器

    2024年02月03日
    瀏覽(27)
  • 奇舞周刊第497期:解鎖 PDF 文件:使用 JavaScript 和 Canvas 渲染 PDF 內(nèi)容

    記得點(diǎn)擊文章末尾的“?閱讀原文?”查看喲~ 下面先一起看下本期周刊?摘要?吧~ ?解鎖 PDF 文件:使用 JavaScript 和 Canvas 渲染 PDF 內(nèi)容 最近研究了 Web 的 FileSystemAccess Api,它彌補(bǔ)了 Web 長期以來缺少的能力:操作用戶設(shè)備中的文件;而如今通過這個(gè) Api 我們能夠?qū)崿F(xiàn)常見的文件

    2024年02月11日
    瀏覽(17)
  • JavaScript快速入門:ComPDFKit PDF SDK 快速構(gòu)建 Web端 PDF閱讀器

    JavaScript快速入門:ComPDFKit PDF SDK 快速構(gòu)建 Web端 PDF閱讀器

    在當(dāng)今豐富的網(wǎng)絡(luò)環(huán)境中,處理 PDF 文檔已成為企業(yè)和開發(fā)人員的必需品。ComPDFKit 是一款支持 Web 平臺(tái)并且功能強(qiáng)大的 PDF SDK,開發(fā)人員可以利用它創(chuàng)建 PDF 查看器和編輯器,讓您的最終用戶輕松查看和編輯 PDF。無論您是在構(gòu)建基于 Web 端的文檔管理系統(tǒng)還是在線協(xié)作平臺(tái),

    2024年02月15日
    瀏覽(23)
  • 網(wǎng)頁在線打開PDF_網(wǎng)站中在線查看PDF之pdf.js

    網(wǎng)頁在線打開PDF_網(wǎng)站中在線查看PDF之pdf.js

    一、pdf.js簡介 PDF.js 是一個(gè)使用 HTML5 構(gòu)建的便攜式文檔格式查看器。 pdf.js 是社區(qū)驅(qū)動(dòng)的,并由 Mozilla 支持。我們的目標(biāo)是為解析和呈現(xiàn) PDF 創(chuàng)建一個(gè)通用的、基于 Web 標(biāo)準(zhǔn)的平臺(tái)。 pdf.js 將 PDF 文檔轉(zhuǎn)換為 HTML5 Canvas 元素 ,并使用 JavaScript 控制文檔的呈現(xiàn)和交互。pdf.js 使得不

    2024年02月04日
    瀏覽(18)
  • vue3項(xiàng)目使用pdf.js插件實(shí)現(xiàn):搜索高亮、修改pdf.js顯示的頁碼、向pdf.js傳值、控制搜索、處理接口文件流

    vue3項(xiàng)目使用pdf.js插件實(shí)現(xiàn):搜索高亮、修改pdf.js顯示的頁碼、向pdf.js傳值、控制搜索、處理接口文件流

    官網(wǎng)地址:http://mozilla.github.io/pdf.js/ 中文文檔地址:https://gitcode.gitcode.host/docs-cn/pdf.js-docs-cn/print.html PDF.js是基于HTML5技術(shù)構(gòu)建的,用于展示可移植文檔格式的文件(PDF),它可以在現(xiàn)代瀏覽器中使用且無需安裝任何第三方插件。 pdf.js主要包含兩個(gè)庫文件 pdf.js:負(fù)責(zé)API解析 pdf.wor

    2024年02月13日
    瀏覽(29)
  • 使用pdf.js展示pdf文件(親測可用)

    使用pdf.js展示pdf文件(親測可用)

    如果只是電腦端,可通過 iframe 標(biāo)簽嵌套預(yù)覽 ios手機(jī)端可通過 a 標(biāo)簽包裹點(diǎn)擊跳轉(zhuǎn)預(yù)覽(安卓端不行) 資料 老版本github地址 全版本地址 正式開始 前往官方地址下載插件包 http://mozilla.github.io/pdf.js/ 此鏈接可下載最新版本,不兼容老版本瀏覽器和蘋果系統(tǒng),若需在蘋果展示則

    2024年02月11日
    瀏覽(18)
  • c#和pdf.js實(shí)現(xiàn)分片預(yù)覽pdf

    源碼如下: 源代碼github地址: https://github.com/LeoMingGit/dotNetPractiseCollect/blob/master/%E5%88%86%E7%89%87%E9%A2%84%E8%A7%88pdf/FileStoreController.cs

    2024年02月12日
    瀏覽(20)
  • 【PDF.js】PDF.js部署到服務(wù)器提示找不到mjs文件

    【PDF.js】PDF.js部署到服務(wù)器提示找不到mjs文件

    例如:項(xiàng)目場景:要做一個(gè)掃描二維碼跳轉(zhuǎn)到網(wǎng)頁預(yù)覽PDF的功能。 本來是直接用iframe標(biāo)簽直接加載PDF文件,結(jié)果在Android手機(jī)上無法預(yù)覽,于是看網(wǎng)上有人說用pdf.js可以。不過下載之后放到服務(wù)器上一訪問總是提示找不到pdf.mjs和viewer.mjs.map這兩個(gè)文件,提示404,本地可以。 嘗

    2024年04月13日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包