同源跨域问题
程序员文章站
2022-05-21 17:07:11
[TOC] 1.跨域 2.解决跨域:CORS 3.跨域时,发送了2次请求? 在跨域时,发送的请求会分为两种: 简单请求,发一次请求。 复杂请求,发两次请求。 预检 请求 4.总结 1. 由于浏览器具有“同源策略”的限制,所以在浏览器上跨域发送Ajax请求时,会被浏览器阻止。 2. 解决跨域 不跨域 ......
目录
1.跨域
由于浏览器具有“同源策略”的限制。 如果在同一个域下发送ajax请求,浏览器的同源策略不会阻止。 如果在不同域下发送ajax,浏览器的同源策略会阻止。
2.解决跨域:cors
cors,跨站资源共享,本质:设置响应头。 from django.shortcuts import render,httpresponse def json(request): response = httpresponse("jsonasdfasdf") response['access-control-allow-origin'] = "*" return response
3.跨域时,发送了2次请求?
在跨域时,发送的请求会分为两种:
-
简单请求,发一次请求。
设置响应头就可以解决 from django.shortcuts import render,httpresponse def json(request): response = httpresponse("jsonasdfasdf") response['access-control-allow-origin'] = "*" return response
复杂请求,发两次请求。
预检
-
请求
@csrf_exempt def put_json(request): response = httpresponse("json复杂请求") if request.method == 'options': # 处理预检 response['access-control-allow-origin'] = "*" response['access-control-allow-methods'] = "put" return response elif request.method == "put": return response
条件: 1、请求方式:head、get、post 2、请求头信息: accept accept-language content-language last-event-id content-type 对应的值是以下三个中的任意一个 application/x-www-form-urlencoded multipart/form-data text/plain 注意:同时满足以上两个条件时,则是简单请求,否则为复杂请求
4.总结
- 由于浏览器具有“同源策略”的限制,所以在浏览器上跨域发送ajax请求时,会被浏览器阻止。
- 解决跨域
- 不跨域
- cors(跨站资源共享,本质是设置响应头来解决)。
- 简单请求:发送一次请求
- 复杂请求:发送两次请求,先options请求做预检,然后再发送真正请求
上一篇: 由两个栈组成的队列