Django 報錯 Refused to display 'http://127.0.0.1:8000/ in a frame because it set 'X-Frame-Option


Django的X-Frame-Options設置
事件起因
事件的起因是這樣的,我在使用Django服務的時候,想在一個已經存在某個按鈕的主頁面上,單擊這個按鈕彈出某個功能頁面,設置某些內容,然后再退回到主頁面。
我使用了某個插件,在彈出的頁面上顯示我請求的鏈接被服務器拒絕。
在使用瀏覽器調試的console頁面中有如下的提示信息:Refused to display '頁面url' in a frame because it set 'X-Frame-Options' to 'deny'.
那么就知道是是X-Frame-Options設置出了問題。

  1. 有關X-Frame-Options
    2.1 什么是X-Frame-Options
    X-Frame-Options HTTP 響應頭是用來給瀏覽器指示允許一個頁面可否在 , 或者

2.2 X-Frame-Options選項
X-Frame-Options 有三個值:

DENY :表示該頁面不允許在 frame 中展示,即便是在相同域名的頁面中嵌套也不允許
SAMEORIGIN :表示該頁面可以在相同域名頁面的 frame 中展示
ALLOW-FROM uri :表示該頁面可以在指定來源的 frame 中展示
換一句話說,如果設置為 DENY,不光在別人的網站 frame 嵌入時會無法加載,在同域名頁面中同樣會無法加載。
另一方面,如果設置為 SAMEORIGIN,那么頁面就可以在同域名頁面的 frame 中嵌套。

3.Django有關配置
3.1 Django默認的配置
首先,Django起禁止X-Frame-Options,使用默認設置了相關的配置。
在項目的setting.py頁面中能夠找到如下的設置:

MIDDLEWARE = [
...
'django.middleware.clickjacking.XFrameOptionsMiddleware',
...
]

上面的內容顯示,Django的項目中默認設置了XFrameOptionsMiddleware的中間件,這個設置將對於X-Frame-Options的配置設置成了DENY。
在Django 3.0中,X_FRAME_OPTIONS的默認設置從SAMEORIGIN 變成了DENY。

3.2 Django總體配置
想要總體設置項目的X-Frame-Options可以使用如下的代碼:

X_FRAME_OPTIONS = 'SAMEORIGIN'
1
可以看出上面的是將X_FRAME_OPTIONS設置成SAMEORIGIN,但是這個改變了整個項目的設置,往往只有某些頁面才需要這樣的設置,因此下面介紹在單獨的頁面上設置這些內容。

3.3 指定的網頁配置
直接看代碼:

from django.http import HttpResponse
from django.views.decorators.clickjacking import xframe_options_exempt
from django.views.decorators.clickjacking import xframe_options_deny
from django.views.decorators.clickjacking import xframe_options_sameorigin

@xframe_options_exempt
def view_one(request):
return HttpResponse("This page is safe to load in a frame on any site.")

@xframe_options_deny
def view_two(request):
return HttpResponse("I won't display in any frame!")

@xframe_options_sameorigin
def view_three(request):
return HttpResponse("Display in a frame if it's from the same origin as me.")

從上面的相應和名稱能夠很容易看出分別的含義,不在更詳細描述。
裝載來源:https://blog.csdn.net/u010403700/article/details/82112917


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM