nginx跨域、防盜鏈、壓縮等小功能詳解

1、跨域(原文連接)javascript

跨域由來,是由於W3C組織制定的瀏覽器安全規範,不容許一個域名內的網站在沒有別的域名容許的狀況下去訪問。所以解決跨域問題有如下兩種方案css

java開發工具下載地址及安裝教程大全,在這裏。更多深度技術好文,在這裏html

一、jsonp方案java

w3c制定的規則不容許ajax跨域請求,但卻容許script標籤發起跨域請求,所以有人便擴展的script標籤src源能夠跨域的用法,來獲得跨域名的請求信息。這即是jsonp的解決辦法。nginx

jsonp的方法有其不美的地方,主要是兩點:ajax

(1)jsonp只能解決GET類的請求,其它類型的請求,script標籤沒法作到json

(2)使用jsonp的方式,對應的後臺程序必須對結果進行改造。將返回值作一個函數式包裝。這對業務開發有較大侵入性,增長開發人員負擔
二、CORS方案跨域

W3C改進了跨域方案,即同一個公司或者合做公司容許對方訪問本身的域名,則可放開跨域限制,即CORS方案。瀏覽器

clipboard.png

nginx配置跨域操做:對於比較簡單的http請求(GET、POST、HEAD類型),無須瀏覽器來問,nginx服務器直接在響應頭部,加入贊成跨域的信號便可,在被訪問方的nginx中配置以下:安全

#是否容許請求帶有驗證信息
    add_header Access-Control-Allow-Credentials true;
    #容許跨域訪問的域名,能夠是一個域的列表,也能夠是通配符*
    add_header Access-Control-Allow-Origin  http://www.studyshare.vip;
    #容許腳本訪問的返回頭
    add_header Access-Control-Allow-Headers 'x-requested-with,content-type,Cache-Control,Pragma,Date,x-timestamp';
    #容許使用的請求方法,以逗號隔開
    add_header Access-Control-Allow-Methods 'POST,GET,OPTIONS,PUT,DELETE';
    #容許自定義的頭部,以逗號隔開,大小寫不敏感
    add_header Access-Control-Expose-Headers 'WWW-Authenticate,Server-Authorization';
    #P3P支持跨域cookie操做
    add_header P3P 'policyref="/w3c/p3p.xml", CP="NOI DSP PSAa OUR BUS IND ONL UNI COM NAV INT LOC"';

對於複雜的http請求(PUT、DELETE、含json格式數據),瀏覽器會在發請求前,先發一道OPTION請求來詢問。在Nginx上直接配置對此詢問的回答便可,以下:

if ($request_method = 'OPTIONS') {##OPTIONS類的請求,是跨域先驗請求
        return 204;##204表明ok
    }

2、防盜鏈

網站的圖片、視頻等資源若是不想被其餘網站引用,可加入防盜鏈功能,加入後則只能本身域名訪問,其餘域名一律不能訪問,配置以下

location /upload/ {
           valid_referers www.studyshare.cn;
           if ($invalid_referer) {
                   return 404;
           }
   }

以上配置表示只容許www.studyshare.cn訪問本身網站的圖片,其餘域名則沒法引用該網站的圖片。同時能夠減小本身網站的流量消耗。

3、壓縮配置

對網站的靜態資源文件進行壓縮後傳輸,能夠節約帶寬資源。配置以下:

location ~ /(.*)\.(html|js|css|png)$ {
            gzip on; # 啓用gzip壓縮,默認是off,不啓用

            # 對js、css、jpg、png、gif格式的文件啓用gzip壓縮功能
            gzip_types application/javascript text/css image/jpeg image/png image/gif;
            gzip_min_length 1024; # 所壓縮文件的最小值,小於這個的不會壓縮
            gzip_buffers 4 1k; # 設置壓縮響應的緩衝塊的大小和個數,默認是內存一個頁的大小
            gzip_comp_level 1; # 壓縮水平,默認1。取值範圍1-9,取值越大壓縮比率越大,但越耗cpu時間

            #root /etc/nginx/html/gzip;
    }

原創文章,轉載請註明出處。
java開發工具下載地址及安裝教程大全,在這裏。更多深度技術好文,在這裏

相關文章
相關標籤/搜索