同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能.

就浏览器而言的, http://127.0.0.1:8000  协议 域名 端口

跨域 问题//

简单请求跨域    S1项目      127.0.0.1:8000
from django.shortcuts import render
from django.http import JsonResponse def test(request):
return render(request,'index.html') def books(request):
l1 = ['方法','炼钢','铁男']
return JsonResponse(l1,safe=False) # 非字典模式
-------------------------------------------
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^books/', views.books),
url(r'^test/', views.test),
]
--------------------------------------
# python 脚本 tests.py 运行不受影响
import requests
import json
a= requests.get('http://127.0.0.1:8001/books/')
print(json.loads(a.content))
-- 页面代码 --
<body>
<button id="sub"> ajax请求数据</button>
</body>
<script src="https://cdn.bootcss.com/jquery/3.4.0/jquery.min.js"></script> <script>
$("#sub1").click(function () {
$.ajax({ // url:'/books/', 访问自己的就是同源
url: ' http://127.0.0.1:8001/books/', //访问其他服务器的路由就是非同源
type: 'get',
success: function (response) {
console.log(response); } })
})
</script>

-- S2 项目  127.0.0.1:8001
-- views.py --
from django.shortcuts import render
from django.http import JsonResponse
def books(request):
ll = ['基金','故事','大厦']
ret = JsonResponse(ll,safe=False)
ret['Access-Control-Allow-Origin'] = '*' # 响应头 *是所有的地址 协议域名端口 return ret # 非字典 -------------------------------------
-- urls.py --
from django.conf.urls import url
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^books/',views.books),
]

简单请求

(1)HEAD GET POST 三选一

(2)http 请求头信息 只在以下字段里面:

Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain,也就是说,
如果你发送的application/json格式的数据,那么肯定是非简单请求,vue的axios默认的请求体信息格式是json的,ajax默认是
urlencoded的。
复杂请求

S1 -- 页面改变
<body>
<button id="sub"> ajax请求数据</button>
</body>
<script src="https://cdn.bootcss.com/jquery/3.4.0/jquery.min.js"></script> <script>
$("#sub").click(function () {
$.ajax({ // url:'/books/',
url: ' http://127.0.0.1:8001/books/',
// type: 'post',
type: 'put',
headers:{a:1},
contentType:'application/json',
data:JSON.stringify(({'name':'chao'})),
success: function (response) {
console.log(response); } })
})
</script>

S2项目 views.py改变

from django.shortcuts import render
from django.http import JsonResponse def books(request):
ll = ['基金','故事','大厦']
ret = JsonResponse(ll,safe=False)
ret['Access-Control-Allow-Origin'] = '*' # 响应头 *是所有的地址 协议域名端口
ret['Access-Control-Allow-Headers'] = '*' #'content-type,a'
ret['Access-Control-Allow-Methods'] = '*' #'PUT' return ret # 非字典
 支持跨域,简单请求

    服务器设置响应头:Access-Control-Allow-Origin = '域名' 或 '*'

  支持跨域,复杂请求

    由于复杂请求时,首先会发送“预检”请求,如果“预检”成功,则发送真实数据。

      “预检”请求时,允许请求方式则需服务器设置响应头:Access-Control-Request-Method

      “预检”请求时,允许请求头则需服务器设置响应头:Access-Control-Request-Headers

restful 跨域的更多相关文章

  1. javascript跨域请求RESTful Web Service

    跨域请求RESTful Web Service 当我们用js请求RESTful Web Service的时候,通常会出现跨域无法访问的问题,也就是无法正常得到我们要的值.jsonp是个解决问题的方法. ...

  2. [经验] - JQuery.Ajax + 跨域 (crossDomain) + POST + JSON + WCF RESTful, 5大陷阱和解决方案

    最近在开发WSS RESTful服务的时候, 碰到了这些个纠结的问题. 在网上查找了半天, 找到n多种解决方案, 但是都是部分的, 要么是没有跨域的情况, 要么是没有post的情况, 要么不是用WCF ...

  3. JQuery.Ajax + 跨域 (crossDomain) + POST + JSON + WCF RESTful, 5大陷阱和解决方案

    JQuery.Ajax + 跨域 (crossDomain) + POST + JSON + WCF RESTful, 5大陷阱和解决方案 最近在开发WSS RESTful服务的时候, 碰到了这些个纠 ...

  4. python 全栈开发,Day100(restful 接口,DRF组件,DRF跨域(cors组件))

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确.方便快速开发 - 针对pc,手机,ipad,微信,支付宝... 使用同一个接口 2. 简述http协议? - 基 ...

  5. Asp.net WebAPi Restful 的实现和跨域

    现在实际开发中用webapi来实现Restful接口开发很多,我们项目组前一段时间也在用这东西,发现大家用的还是不那么顺畅,所以这里写一个Demo给大家讲解一下,我的出发点不是如何实现,而是为什么? ...

  6. Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)

    一.Django请求生命周期: 前端发出请求到后端,通过Django处理.响应返回给前端相关结果的过程 先进入实现了wsgi协议的web服务器--->进入django中间件--->路由f分 ...

  7. Restful based service 的跨域调用

    1.关于跨域, w3c的官方文档:https://www.w3.org/TR/cors/ 2.有时间再整理吧. <html> <head> <script src=&qu ...

  8. WCF Restful调用跨域解决方案

    目前很多项目中CRM更多扮演一个纯后台管理系统,用户更多的操作是在移动端执行,不管是安卓还是IOS甚至是H5.这里以H5为例,CRM提供数据接口,移动web端来调用接口进行数据处理,这里就会涉及到一个 ...

  9. [二十七]SpringBoot 之 Restful接口的跨域请求

    什么是跨域 简单的说即为浏览器限制访问A站点下的js代码对B站点下的url进行ajax请求.比如说,前端域名是www.abc.com,那么在当前环境中运行的js代码,出于安全考虑,访问www.xyz. ...

随机推荐

  1. js 设计模式之观察者模式

    观察者模式 又被称为“发布-订阅”模式,目的是解决主题对象和观察者之间功能的耦合性.发布者和订阅者之间是互不干扰的,没有联系的,通过观察者,当做中介,将二者联系起来. 例子:以学生和老师之间的为例 1 ...

  2. Java作业一 (2017-9-10)

    /*程序员龚猛*/ 1.3 public class Helloworld{  public static void main(String[] args) {   System.out.printl ...

  3. 5m21d缓冲区溢出学习笔记

    mysql链接字符串函数 concat(str1,str2) concat_ws(separator,str1,str2....) group_concat(str1,str2....) mysql的 ...

  4. PDF的水印怎么去掉

    很多朋友私下都有问过PDF去除水印的方法,现在在网上下载一些PDF电子书,几乎页面内都会有水印的,而且有的水印还带有超链接,稍微不注意就会点开进入别的页面内,不仅影响了阅读效果还带给读者负面影响,那如 ...

  5. PHP算法学习(2) 轮训加权算法

    2019年1月8日16:10:51 svn地址:svn://gitee.com/zxadmin/live_z    代码在code里面 <?php /* * 加权轮训算法 * * * $arr ...

  6. js基本概述

    js(javascript)是一门编程语言,用来实现与浏览器交互. 一 js的基本语法要求有以下几点 1严格区分大小写 2标识符起名要求与java一样,参考java. 3变量的概念,变量声明使用var ...

  7. Ubuntu16.04 创建和使用虚拟环境

    1. 虚拟环境   虚拟环境(virtual environment),顾名思义是虚拟出来的环境,通俗来讲,可以借助虚拟机,docker来理解虚拟环境,就是把一部分内容独立出来,我们把这部分独立出来的 ...

  8. [Day25]IO(Properties、序列化流、打印流、Commons-IO)

    1.Properties类-持久的属性集,可保存在流中或从流中加载,属性列表中每个键及其对应值都是一个字符串 1.1 特点 (1)Hashtable的子类,map集合中的方法都可以用 (2)该集合没有 ...

  9. @RequestParam @PathVariable

    1.Request参数 在访问各种各样网站时,经常会发现网站的URL的最后一部分形如:?xxxx=yyyy&zzzz=wwww.这就是HTTP协议中的Request参数,它有什么用呢?先来看一 ...

  10. flask shell命令

    在flask项目目录下,使用pipenv shell激活flask虚拟环境后,调用flask shell能够使用虚拟环境的python解释器进入交互式环境,并且工作目录还保留在flask项目目录. f ...