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方案。瀏覽器
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; }