瀏覽器默認(rèn)遵循X-Frame-Options協(xié)議頭,它表明一個資源是否允許加載到frame或者iframe中。如果響應(yīng)包含值為SAMEORIGIN的協(xié)議頭,瀏覽器會在frame中加載同源請求的資源。如果協(xié)議頭設(shè)置為DENY,瀏覽器會在加載frame時屏蔽所有資源,無論請求來自于哪個站點。
Django中提供了一些簡單的方法來在你站點的響應(yīng)中包含這個協(xié)議頭:
1,一個簡單的中間件,在所有響應(yīng)中設(shè)置協(xié)議頭。如果要為你的站點中所有的響應(yīng)設(shè)置相同的X-Frame-Options值,就可以將項目中settings.py文件中的添加中間件:‘django.middleware.clickjacking.XFrameOptionsMiddleware’設(shè)置為‘MIDDLEWARE’:
MIDDLEWARE = [ 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
在開啟該中間件之后,默認(rèn)會為任何開放的HttpResponse設(shè)置X-Frame-Options協(xié)議頭為 DENY,
如果你想要設(shè)置為SAMEOGIGIN,
可以在settings.py文件中設(shè)置:
X_FRAME_OPTIONS = 'SAMEORIGIN'
但是這樣的話會使該站點所有的視圖都使用X-Frame-Options協(xié)議頭,對于某些視圖函數(shù),我們可以使用特定的裝飾器告訴中間件不要設(shè)置協(xié)議頭
2. 引用裝飾器xframe_options_exempt,告訴中間件訪問該視圖時不要設(shè)置協(xié)議頭:
from django.views.decorators.clickjacking import xframe_options_exempt @xframe_options_exempt def get_ueditor_controller(request):
3.引用裝飾器xframe_options_deny, 告訴中間件訪問該視圖時屏蔽在加載frame時的所有資源:
from django.http import HttpResponse from django.views.decorators.clickjacking import xframe_options_deny @xframe_options_deny def get_ueditor_controller(request):