日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

qhfl-1 跨域

發布時間:2024/9/3 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qhfl-1 跨域 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CORS跨域請求

CORS即Cross Origin Resource Sharing 跨域資源共享,那么跨域請求還分為兩種,一種叫簡單請求,一種是復雜請求

簡單請求

HTTP方法是下列方法之一

  HEAD, GET,POST

HTTP頭信息不超出以下幾種字段

  Accept, Accept-Language, Content-Language, Last-Event-ID

  Content-Type只能是下列類型中的一個

    application/x-www-from-urlencoded

    multipart/form-data

    text/plain

任何一個不滿足上述要求的請求,即會被認為是復雜請求

復雜請求會先發出一個預請求,我們也叫預檢,OPTIONS請求

瀏覽器的同源策略

跨域是因為瀏覽器的同源策略導致的,也就是說瀏覽器會阻止非同源的請求

非同源即域名不同,端口不同都屬于非同源的

瀏覽器只阻止表單以及ajax請求,并不會阻止src請求,所以我們的cdn,圖片等src請求都可以發

解決跨域

JSONP

jsonp的實現原理是根據瀏覽器不阻止src請求入手來實現的

from django.shortcuts import render from django.http import HttpResponse from rest_framework.views import APIView from rest_framework.response import Response# Create your views here.class DemoView(APIView):def get(self, request):res = "handlerResponse('跨域測試')"return HttpResponse(res)def put(self, request):return Response("put接口測試")def post(self, request):return Response("POST接口測試") JsonP實現的后端代碼

JsonP解決跨域只能發送get請求,并且實現起來需要前后端交互比較多。

JsonP解決跨域

jsonp 用 script 的方式去請求,只能通過get請求數據

<script>function handlerResponse(data) {console.log(data)}</script><script src="http://127.0.0.1:8000/demo/"></script>

添加響應頭解決跨域

告訴瀏覽器不要攔截來解決跨域

中間件 middlewares.py

from django.utils.deprecation import MiddlewareMixinclass MyCors(MiddlewareMixin):def process_response(self, request, response):response["Access-Control-Allow-Origin"] = "*" # 任何跨域都不攔截if request.method == "OPTIONS": # 預檢,OPTIONS請求response["Access-Control-Allow-Methods"] = "PUT, DELETE"response["Access-Control-Allow-Headers"] = "content-type"return response <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Title</title><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script src="https://cdn.bootcss.com/axios/0.19.0-beta.1/axios.js"></script><script>function handlerResponse(data) {console.log(data)}</script><script src="http://127.0.0.1:8000/demo/"></script> </head> <body> <div id="app"></div> <script>const app = new Vue({el: "#app",mounted(){axios.request({url: "http://127.0.0.1:8000/demo/",method: "PUT",data: {"name": "Alex"}}).then(function (data) {console.log(data)})}}) </script></body> </html> request.html

總結

以上是生活随笔為你收集整理的qhfl-1 跨域的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。