跨域的原理和处理跨域的常用方法

深入了解神经网络:构建人工智能的基石 这篇博客将为您解释神经网络的构造,让您能够理解这个令人着迷的领域的基本工作原理。神经网络是人工智能领域的关键技术,它们的构造基于神经元的灵感,并结合了数学、统计和机器学习的原理。输入可以类比为神经元的树突,而输出可以类比为神经元的轴突,计算则可以类比为细胞核。较好的方法就是预先设定几个可选值,通过切换这几个值来看整个模型的预测效果,选择效果最好的值作为最终选择。:这是神经网络的核心部分,包含多个层次的神经元。、神经网络结构图中的拓扑与箭头代表着预测过程时数据的流向,跟训练时的数据流有一定的区别; 阅读详情

1 浏览器同源策略

1.1 同源策略简介

同源策略是浏览器的一个重要的安全策略,它用于限制一个源与另外一个源之间的交互,它能帮助阻隔恶意脚本,减少隐私泄露和网络攻击等风险。

1.2 源(Origin)

通常把访问Web中内容的地址就叫源(Origin),具体来说就是访问一个内容的URL,在URL中必须指明协议、主机域名和端口。

一个URL可能包含协议、主机域名、端口、目录、文件名、查询参数和锚点这些部分,以下面URL为例:

https://syzdev.cn:443/news/index.html?category=1&page=2#top

在这里插入图片描述

  • 协议:网络应用层协议,常见的有HTTP、HTTPS和FTP协议;
  • 主机域名:可以是主机IP地址或域名;
  • 端口:可以指定具体的端口,若不指定端口则为默认值,如HTTP协议的默认端口为80端口,HTTPS协议的默认端口为443端口;
  • 目录:目标文件的目录;
  • 文件名:目标文件的文件名;
  • 查询参数:以“?”分隔在URL后追加参数,用键值对(key=value)的形式表示参数值,若有多个参数,则键值对之间以“&”分隔;
  • 锚点:用于定位到页面中的具体位置,若定位到页面中文章的某个标题。

1.3 同源

如果两个源的协议、主机域名和端口都相同的话,那么这两个源就称为同源,下面举例说明:

  1. 目录和文件名
    在这里插入图片描述
  2. 协议
    在这里插入图片描述
  3. 主机域名
    在这里插入图片描述
  4. 端口
    在这里插入图片描述

1.4 同源策略的限制

首先要明确一点,同源策略是浏览器的一种机制,同源策略所产生的行为都是来自于浏览器。同源策略有如下限制:

  • 浏览器本地存储:localStorage、sessionStorage和IndexedDB的作用范围都是受同源策略的限制;
  • 跨源脚本访问:其他源的脚本无法操作本源中的文档;
  • 跨源网络请求:同源策略限制了不同源之间的网络请求交互。

其中跨源网络请求就是本文讨论的重点,限制跨源网络请求本意是为了浏览器安全,但是实际开发中,网络请求和请求主机往往都是在不同的源的,此时就需要跨源访问,所用的技术就是“跨域”。

2 跨域的方法

当请求发生跨域时,若没有处理跨域,则会在控制台看到如下错误:

在这里插入图片描述


下面列出的四种处理跨域方法的完整代码都已经上传至GitHub仓库:cors-demo。

2.1 CORS

跨域资源共享(CORS,Cross-Origin Resource Sharing)允许Web应用服务器进行跨源访问控制,从而使跨源数据传输得以安全进行。

跨源资源共享标准新增了一组HTTP首部字段,允许服务器声明哪些源站通过浏览器有权限访问哪些资源。另外,规范要求,对那些可能对服务器数据产生副作用的HTTP请求方法(特别是GET以外的HTTP请求,或者搭配某些MIME类型的POST请求),浏览器必须首先使用OPTIONS方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨源请求。服务器确认允许之后,才发起实际的HTTP请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括Cookies和HTTP认证相关数据)。


在CORS机制下,浏览器HTTP请求被分为了简单请求和非简单请求两种,其中简单请求将直接发送请求,而非简单请求会先发送一个预检请求,当服务器确认之后才能发出HTTP请求。

满足以下条件的请求称为简单请求,除此之外都是非简单请求:

  • 请求方法为GET、HEAD和POST;
  • 请求头中只能包含Accept、Accept-Language、Content-Language和Content-Type,且Content-Type的值只能为text/plain、multipart/form-data和application/x-www-form-urlencoded;

2.1.1 简单请求的发送过程

以下面通过XMLHttpRequest发送简单请求为例:

function send() {
  const xhr = new XMLHttpRequest()
  xhr.open('GET', 'https://syzdev.cn/news')
  xhr.send()
}
  1. 客户端发送HTTP简单请求,请求头中包含请求类型、请求源和请求服务器等字段。

在这里插入图片描述

  1. 服务器收到请求后,会根据请求头的Origin字段判断这个请求来自于哪个源,若这个源不在访问服务器资源的许可范围内,则会抛出一个错误;若这个源在范围之内,则服务器会在响应头中添加Access-Control-Allow-Origin字段,字段的值可能是Origin的值https://syzdev.cn,或者是通配符*,表示所有的源都允许。

在这里插入图片描述

2.1.2 非简单请求的发送过程

以下面通过XMLHttpRequest发送简单请求为例:

function send() {
  const xhr = new XMLHttpRequest()
  xhr.open('DELETE', 'https://syzdev.cn/others')
  xhr.send()
}
  1. 客户端发送HTTP非简单请求,浏览器在正式发送请求之前,会使用OPTIONS方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨源请求。

在这里插入图片描述

  1. 客户端收到请求后,检查Origin、Access-Control-Request-Method和Access-Control-Request-Headers字段以后,判断请求的源和方法类型是否在允许范围内,若不在允许范围内,则抛出一个错误;若在允许的范围内,服务器则返回一个确认的响应。

在这里插入图片描述

  1. 一旦客户端通过了预检请求,则后续的交互都和简单请求一样。

2.2.3 CORS的使用方法

以express为例,使用CORS有两种方式,一种是通过response.setHeader设置响应头,一种是通过中间件cors。发送请求的方法如下:

function send() {
  const xhr = new XMLHttpRequest()
  xhr.open('GET', 'http://localhost:3000/')
  xhr.send()
  xhr.onreadystatechange = function () {
    // xhr.readyState === 4表示响应已完成,此时可以获取并使用服务器的响应。
    if (xhr.readyState === 4) {
      document.getElementById('main').innerHTML = xhr.response
    }
  }
}

处理跨域的两种方式分别如下:

  1. 设置响应头
const express = require('express')
const app = express()
app.get('/', (request, response) => {
  // 设置响应头,允许跨域
  response.setHeader('Access-Control-Allow-Origin', '*')
  // 设置响应体
  response.send('setHeader')
})
app.listen(3000, () => {
  console.log('服务已启动,监听3000端口')
})
  1. cors中间件
const express = require('express')
const app = express()

// 引入cors,返回的是一个函数,直接()执行,执行后是一个Express中间件,app.use使用它即可
app.use(require('cors')())

app.get('/', (req, res) => {
  // send()方法,响应给客户端信息
  res.send('cors_middleware')
})

app.listen(3000, () => {
  console.log('网站服务器启动成功!')
})

2.2 JSONP

JSONP主要就是利用了<script>标签没有跨域限制的这个特性来完成的,使用JSONP进行跨域只支持GET请求。在JSONP中是使用<script>标签的src属性发送请求的,如:

<script src="http://localhost:3000/"></script>

此时只能发送请求,并没有响应请求的能力,所以需要给请求添加一个回调函数,这个函数可以作为query参数发送给服务端,由服务端再返回这个参数并由浏览器解析:

<body>
  <div id="main"></div>
  <script>
    function jsonpCallback(res) {
      document.getElementById('main').innerHTML = res.data
    }
  </script>
  <script src="http://localhost:3000/?callback=jsonpCallback"></script>
</body>

后端代码如下:

let express = require('express')
let app = express()
app.get('/', (request, response) => {
  let callback = request.query.callback
  const data = JSON.stringify({
    data: 'JSONP'
  })
  response.send(callback + `(${data})`)
})
app.listen(3000, () => {
  console.log('服务已启动,监听3000端口')
})

在后端通过request.query.callback获取到前端传入的请求回调方法jsonpCallback,在后端通过字符串拼接callback + (${data})``,把后端数据data通过函数参数的形式返回给客户端,客户端收到参数后解析成函数调用jsonpCallback(res),在客户端执行了回调并且收到了后端传入的数据data。

总结来说,JSONP就是利用了<script>标签可以跨域发送请求这一特点,客户端将方法作为请求的参数发送给服务器,服务器将后端数据作为方法的参数返回给客户端,最后客户端将返回的信息解析成函数调用,这样就实现了跨域请求交互。

2.3 Vue CLI

使用Vue CLI处理跨域只能在开发环境下使用,下文中示例代码的创建环境如下:

  • Vue CLI版本:@vue/cli 5.0.4
  • Vue版本:2.x

使用Vue CLI创建一个Vue2.x的项目,输入命令npm i axios添加axios,新建http.js封装axios内容如下:

import axios from 'axios'
const http = axios.create({
  baseURL: '/api'
})
export default http

在App.vue中添加请求的方法:

<template>
<div id="app">
  {{ msg }}
  </div>
</template>

<script>
  import http from './http'
  export default {
    name: 'App',
    data() {
      return {
        msg: 'default msg',
      }
    },
    created() {
      this.fetchData()
    },
    methods: {
      async fetchData() {
        const res = await http.get('/msg')
        this.msg = res.data
      },
    },
  }
</script>

<style>
</style>

在vue.config.js中添加如下内容:

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:3000',
        // secure: false, // 如果是https接口,需要配置这个参数
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    },
  },
})

上面代码中的devServer.proxy就是配置代理,将请求路径中带有/api的请求路径转发到target: 'http://localhost:3000'上,若原始请求路径为http://localhost:8080/api/msg,则通过代理转发后的请求路径为http://localhost:3000/api/msg,但事实上请求路径中的/api只是用来匹配转发路径的,并不是实际请求路径中的一部分,所以在真正发送请求时,需要去掉/api,所用的方法就是pathRewrite,将请求路径中的/api替换为空字符串,这样经过代理转发后的请求路径为http://localhost:3000/msg。

2.4 Nginx

使用Nginx处理跨域和使用Vue CLI处理跨域在写法上非常相似,都是通过中间服务器进行请求转发,但Nginx处理跨域的方法往往是在生产环境下使用,前端代码如下:

<body>
  <div id="main"></div>
  <script>
    (function send() {
      const xhr = new XMLHttpRequest()
      xhr.open('GET', '/api')
      xhr.send()
      xhr.onreadystatechange = function () {
        // xhr.readyState === 4表示响应已完成,此时可以获取并使用服务器的响应。
        if (xhr.readyState === 4) {
          document.getElementById('main').innerHTML = xhr.response
        }
      }
    })()
  </script>
</body>

请求的路径只需要写/api即可,再在Nginx中的conf/nginx.conf文件中配置代理:

    server {
        listen       3030;
        server_name  localhost;

        location /api/ {
            proxy_pass  http://localhost:3000/;
        }

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

通过proxy_pass将请求路径中带有/api的请求转发到http://localhost:3000上。

HFSS 3D Layout仿真PCB操作说明 本文介绍一种特别适合PCB这种叠层结构的仿真软件,HFSS 3D Layout既有操作的简便性,又有同3D软件仿真所有的精确性,仿真速度上又比3D软件快很多。 阅读详情

相关推荐

护网日志分析基础

简要介绍日志分析,给出日志分析的步骤和思路。要求根据日志中的字符串特征,识别攻击者的攻击工具;根据日志中的行为特征,确定攻击者可能的攻击手段等。总结归纳护网中常见的中间件Tomcat、Apache、Weblogic、Nginx、Apache、IIS、MySQL、SQL Server、Oracle的日志路径和日志配置文件路径等。

m0_59302403的博客 3694

Nodejs+Express使用 cors 中间件解决跨域问题

使用`Nodejs+Express`框架搭建web服务器,如果需要实现CORS,即Cross-Origin Resource Sharing,跨源资源共享(俗称跨域资源共享),那么就应该在服务器端引入中间件`cors`

李文韬的博客 1017

离散数学 --- 图论基础 --- 图的同构,通路与回路,可达性与最短通路

同一个图(这里的图是抽象的数学定义)可以有不同的图形表示方法1.重数:两点之间的平行边的个数1.得到 n!的过程,一个图中的一个结点在另一个图中对应的结点有n种可能(黄框中定义的图来讨论),这个对应好后下一个结点有 n - 1 种可能,再下一个有n-2种,直到最后一个为1,所有可能的结果就等于 n * (n - 1) *(n - 2)*....*1 = n!2.虽然说找对应结点很困难,但不是没有规律可循的。比如1.两个相互对应的结点的度数要相同;

qq_51947882的博客 7439

CORS跨域请求

CORS跨域资源共享 1.使用cors中间件解决跨域问题 cors是express的一个第三方插件,通过安装和配置cors中间件 可以很方便地解决跨域问题 使用步骤分为3步: 1.运行 npm install cors 安装中间件 2.使用const cors=require(‘cors’)导入中间件 3.在路由之前调用app.use(cors())配置中间件 2.什么是CORS cors(跨域资源共享)由一系列HTTP响应头组成,这些HTTP响应头决定浏览器是否阻止前端JS代码跨域获取资源 浏览器的同源安

faith_girl的博客 2950

Centos7.9上安装glibc2.28遇到/usr/bin/ld: cannot find -lnss_test2问题

Centos7.9安装glic2.28遇到-lnss_test2问题及解决方案。

freflying1119的博客 2898

ADS 2024实战:手把手教你搞定CGH40010F的Doherty功放仿真与版图(附避坑指南)

本文详细介绍了使用ADS 2024进行CGH40010F Doherty功放从仿真到版图的全流程设计,涵盖器件建模、稳定性分析、负载牵引匹配和版图联合仿真等关键步骤。特别针对新手常见问题提供避坑指南,帮助工程师高效完成射频功放设计,提升5G基站和雷达系统的性能。

weixin_42528191的博客 221

跨域原理及解决方案

前言 跨域是什么,为什么会有跨域?跨域的解决方法是什么?常用的是什么?原理是什么? 什么是跨域 跨域是指从一个域名去请求另一个域名的资源。 严格来说,只要域名,协议,端口任何一个不同,就视为跨域。 跨域场景 以下这种看上去再相似也没有用,都是跨域。 主域不同 http://www.chrome.cn/index.html http://www.chomper.cn/server.php 子域名不同 http://abc.chomper.cn/index.html http:/.

Insist_bin的博客 1297

ThingsBoard 场景联动需求

当初有个兄弟请我帮他实现一个需求,需求如上,很简单,实现完成后我怕他操作不来,又写了这份文档给他,今天把这个文档的场景发出来,大家也可以学习一下思路我把需要模拟设备的指令都总结在下面,连接参数截图讲解如下:温度传感器风扇光照传感器灯。

AldrichEugene 1232

vue脚手架vue-cli的卸载与安装方式

vue脚手架vue-cli的卸载与安装方式

m0_71814235的博客 5200

WPF用户控件间属性传递的艺术

本文详细介绍了WPF中父控件向子控件传递属性的方法。针对常见的绑定失效问题,重点讲解了使用RelativeSource绑定技术,通过指定AncestorType确保正确访问父控件属性。文章通过实例演示了从ParentModel传递属性到ChildUserControl依赖属性的完整实现过程,包括模型定义、XAML结构设计和代码实现。这种方法有效解决了数据上下文混淆问题,为WPF开发中的控件交互提供了可靠解决方案,有助于提升应用的灵活性和可维护性。

2501_90323865的博客 56

17 指挥AI写Mamba相关模型代码,快速适配大模型场景

本文为《30天掌控AI编程:从指令到落地,手把手教你指挥AI写代码》系列第十七篇,属于第三阶段多场景实战核心内容。本篇聚焦当下大模型领域热门的**Mamba架构**,针对零基础大模型开发、无深度学习基础的使用者,拆解指挥AI生成Mamba基础模型、微调适配、推理部署代码的核心方法,覆盖Mamba基础模块搭建、简易序列建模、小样本微调、本地推理等高频场景,提供可直接复用的高质量指令模板、完整可运行代码、环境配置与避坑指南,无需精通Transformer、状态空间模型等底层原理,轻松上手Mamba大模型开发。

coreopt的博客 61

VUE解决跨域CORS

参考视频 参考文章

sunlanchang的博客 7838

使用Google Earth Engine(GEE)的Python API,您可以将经纬度坐标转换为Landsat影像的路径/行号

使用Google Earth Engine(GEE)的Python API,您可以将经纬度坐标转换为Landsat影像的路径/行号。在这个示例中,我们选择了一个位于加利福尼亚州旧金山市附近的点,其经度为-122.084,纬度为37.421998。首先,我们需要导入必要的库和模块。接下来,我们定义一个函数,该函数将接收经度和纬度作为输入,并返回对应的Landsat路径/行号。最后,我们提取路径和行号的值,并将它们作为结果返回。现在,我们可以使用这个函数来获取特定点的Landsat路径/行号。

VwajAlgorithm的博客 348

Ajax跨域的所有方法(最详细带使用教程!!!)

jsonp是基于script的src发送请求,所有的标签带有跨域特性的都是资源文件请求,所有的资源文件请求都是get请求,jsonp是通过url把函数传给服务器的,可能会被别人做URL劫持,导致数据的不安全,别人劫持之后返回一个木马程序,浏览器也会进行识别执行。是基于node中间件进行实现的,proxy相当于node给你模拟了一个nginx服务器请求,服务器请求服务器之间不存在跨域,因为跨域是浏览器对js做的安全限制,proxy请求回来的数据,在返回给客户端,解决跨域。这些标签都带有不存在跨域请求的限制。

2501_90242391的博客 632

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

使用CORS解决跨域问题

1.跨域问题 1.1 什么是跨域 跨域是指跨域名的访问,以下情况都属于跨域: 跨域原因说明 示例 域名不同 www.jd.com 与 www.taobao.com 域名相同,端口不同 www.jd.com:8080 与 www.jd.com:8081 二级域名不同 item.jd.com 与 miaosha.jd.com 如果域名和端口都相同,但是请求路径不同,不属于跨...

weixin_34163553的博客 1569

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

js跨域相关面试题

一、什么是跨域 广义的跨域包括: 资源跳转:超链接跳转、重定向、表单提交 资源嵌入:link、ifram、script、img,以及css样式中的background:url()、@font-face()等外链接 脚本请求:js的ajax请求、js或DOM 中的跨域操作 狭义的跨域:指浏览器同源策略限制的请求 同源策略是一个重要的安全策略,它用于限制一个origin的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介。 当协议、子域...

王春燕的博客 805

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

彻底明白前端常用的几种跨域方式

说到跨域,首先要理解什么是跨域,浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。 一.跨域基础知识 http://www.a.com:8080/a.html http://为协议,www为子域名,a.com为主域名,8080为端口,a.html为资源地址,当协议、子域名、主域名、端口号中任意一个不相同时,都算作不同域。不同域之间相互请求资源,就算作“跨域”。跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了,浏览器认为这不安全

2923

Jquery中Ajax处理跨域的方式

一、处理跨域的方式:1.代理 2.XHR2 HTML5中提供的XMLHTTPREQUEST Level2(及XHR2)已经实现了跨域访问。但ie10以下不支持 只需要在服务端填上响应头:header("Access-Control-Allow-Origin:*"); /*星号表示所有的域都可以接受,*/ header("Access-Control-Allow-Methods:GET,POST

qq_30206797的博客 8279

HTTP请求跨域问题,解决模棱两可。

什么是跨域?就不说了,一搜一大堆。 就讲讲如何跨域,总结一下,尽量简洁的表述粗来。 1、CORS--是W3C制定的为解决跨域请求的一个规范。直接上代码     var xhr = new XMLHttpRequest();     xhr.open("GET", "http://www.a.com",true);     xhr.send(); 其实很简单,即发送请求时,

菜鸟的进阶博客 2427

在 Ruoyi 项目中如何解决跨域问题(CORS)

是浏览器的一种机制,用于允许或拒绝跨域请求。跨域请求是指:前端页面地址(协议+域名+端口)与后端接口地址不一致;浏览器默认同源策略会阻止这种请求。全局配置 CORS(通过或CorsFilterSpring Security 集成 CORS(Ruoyi 的做法)通过CorsFilter全局处理跨域请求;在 Spring Security 过滤器链中注册CorsFilter,确保跨域请求在认证前处理;可自定义 CORS 配置,控制允许的域名、请求头和方法。

zeroFOR112的博客 1301

到底什么是跨域?如何解决跨域问题

什么是跨域 要了解跨域,先要说说同源策略。同源策略是由 Netscape 公司提出的一个著名的安全策略,所有支持 JavaScript 的浏览器都会使用这个策略。所谓同源是指,域名,协议,端口相同。当页面在执行一个脚本时会检查访问的资源是否同源,如果非同源,那么在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问。 同源策略一般又分为以下两种: DOM同源策略:禁止对不同源页面DOM进行操作。这里主要场景是iframe跨域的情况,不同域名的iframe是限制互相访问的。XmlHttpRequest同源策

萌兔兔MMQ!! 556

jQuery ajax跨域请求的解决方法

由于JS同源策略的影响,因此js只能访问同域名下的文档。因此要实现跨域,一般有以下几个方法: 一、处理跨域的方式: 1.代理 2.XHR2 HTML5中提供的XMLHTTPREQUEST Level2(及XHR2)已经实现了跨域访问。但ie10以下不支持 只需要在服务端填上响应头: header("Access-Control-Allow-Origin:*");

wuyou1336的博客 2万+

jquery中ajax处理跨域的三大方式

由于JS同源策略的影响,因此js只能访问同域名下的文档。因此要实现跨域,一般有以下几个方法: 一、处理跨域的方式: 1.代理 2.XHR2 HTML5中提供的XMLHTTPREQUEST Level2(及XHR2)已经实现了跨域访问。但ie10以下不支持 只需要在服务端填上响应头: header("Access-Control-Allow-Origin:*"); /*星号表示所有的域都

李赛赛的专栏 544

跨域的三种方法总结:代理,JSONP,以及XHR2

Javascript出于安全方面的考虑,不允许跨域调用其他页面的对象。 什么是跨域呢? 简单地理解就是因为javascript同源策略的限制,a.com域名下的js无法操作b.com或是c.a.com域名下的对象。 跨域处理,三种方法: 1、处理跨域方法一 代理 通过在同域名下的web服务器端创建一个代理:  北京服务器(域名:www

z69183787的专栏 4074

jquery中ajax处理跨域

转载地址:http://www.jb51.net/article/77470.htm 由于JS同源策略的影响,因此js只能访问同域名下的文档。因此要实现跨域,一般有以下几个方法: 一、处理跨域的方式: 1.代理 2.XHR2 HTML5中提供的XMLHTTPREQUEST Level2(及XHR2)已经实现了跨域访问。但ie10以下不支持 只需要在服务端填上响应

lengxin337的专栏 320

关于前端跨域问题

1.jsonp   在实际开发中,我用的比较少; jsonp   跨域的原理  (只支持get请求,对于post请求不支持)动态添加一个&lt;script&gt;标签,而script标签的src属性是没有跨域的限制的。这样说来,这种跨域方式其实与ajax XmlHttpRequest协议无关了。   2.proxy    在开发中这种方法用的还是比较多,关于具体用法,可以查阅文档3.nginx ...

qq_38476088的博客 178
上一篇: AJAX基础
下一篇: This beta version of Typora is expired,please download and install a newer version.
syzdev
博客等级 码龄9年 852粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值