-跨域問題
-瀏覽器的:同源策略,瀏覽器拒絕不是當前域域返回的數據
-ip地址和端口號都相同才是同一個域
-如何解決:
-CORS:跨域資源共享
-簡單請求:發一次請求
-非簡單請求:非簡單請求是發送了兩次請求,第一次是預檢請求(OPTIONS請求),當預檢通過,允許我發請求,再發送真實的請求
-解決跨域問題:(寫好這個中間件配置一下)
class MyCorsMiddle(MiddlewareMixin):
def process_response(self, request, response):
if request.method == 'OPTIONS':
# 允許它
response['Access-Control-Allow-Headers'] = 'Content-Type'
# obj['Access-Control-Allow-Headers']='*'
# obj['Access-Control-Allow-Origin']='http://127.0.0.1:8000'
response['Access-Control-Allow-Origin'] = '*'
return response
-別人寫的cors-headers(了解一下)
跨域問題
因為瀏覽器的同源策略規定某域下的客戶端在沒明確授權的情況下,不能讀寫另一個域的資源。而在實際開發中,前后端常常是相互分離的,並且前后端的項目部署也常常不在一個服務器內或者在一個服務器的不同端口下。前端想要獲取后端的數據,就必須發起請求,如果不做一些處理,就會受到瀏覽器同源策略的約束。后端可以收到請求並返回數據,但是前端無法收到數據。
Django中處理跨域問題
cors-headers模塊
pip3 install django-cors-headers
INSTALLED_APPS = [
...
'corsheaders',
...
]
MIDDLEWARE_CLASSES = (
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware', # 注意順序
...
)
#跨域增加忽略
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
'*'
)
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)
CORS_ALLOW_HEADERS = (
'XMLHttpRequest',
'X_FILENAME',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
'Pragma',
)
JWP
在Django中的視圖函數中寫入數據
def myview(_request):
response = HttpResponse(json.dumps({“key”: “value”, “key2”: “value”}))
response[“Access-Control-Allow-Origin”] = “*”
response[“Access-Control-Allow-Methods”] = “POST, GET, OPTIONS”
response[“Access-Control-Max-Age”] = “1000”
response[“Access-Control-Allow-Headers”] = “*”
return response