CORS 中的POST and OPTIONS 请求

var req = new XMLHttpRequest();
  req.open(‘post‘, ‘http://127.0.0.1:3001/user‘, true);
  req.setRequestHeader(‘Content-Type‘, ‘application/json‘);
  req.send(‘{"name":"tobi","species":"ferret"}‘);

此Ajax 跨域访问post 请求,但是在服务器却得到的总是options请求 (req.method==‘OPTIONS’) 不知为何啊?

因为此post请求的 content-type不是one of the “application/x-www-form-urlencoded, multipart/form-data, or text/plain”, 所以Preflighted requests被发起。 “preflighted” requests first send an HTTP OPTIONS request header to the resource on the other domain, in order to determine whether the actual request is safe to send. 然后得到服务器response许可之后, res.set(‘Access-Control-Allow-Origin’, ‘http://127.0.0.1:3000’); res.set(‘Access-Control-Allow-Methods’, ‘GET, POST, OPTIONS’); res.set(‘Access-Control-Allow-Headers’, ‘X-Requested-With, Content-Type’); 再发起其post请求。 https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

时间: 2024-10-18 16:58:53

CORS 中的POST and OPTIONS 请求的相关文章

jquery ajax 请求中多出现一次OPTIONS请求及其解决办法

http://www.tangshuang.net/2271.html 在上一篇<服务端php解决jquery ajax跨域请求restful api问题及实践>中,我简单介绍了如何通过服务端解决jquery ajax的跨域请求问题,但是,在这个过程中,我们会发现,在很多post,put,delete等请求之前,会有一次options请求.本文主要是来讨论一下这是什么原因引起的. 根本原因就是,W3C规范这样要求了!在跨域请求中,分为简单请求(get和部分post,post时content-t

React开发中使用fetch进行异步请求

React开发中使用fetch进行异步请求 最新的Web API接口中提供了一个全局fetch方法,从而以一种更为简单.合理的方式来支持跨网络异步获取资源. 这种功能以前是使用 XMLHttpRequest实现的.Fetch提供了一个更好的替代方法,可以很容易地被其他技术使用,例如 Service Workers.Fetch还提供了单个逻辑位置来定义其他HTTP相关概念,例如CORS和HTTP的扩展. 请注意,fetch规范与jQuery.ajax()主要有两种方式的不同: 当接收到一个代表错误

http跨域时的options请求

1.背景 在前后端分离的项目中经常会遇到跨域请求的问题,如果没有进行跨域配置,会浏览器请求失败.我一般采用两种解决方案: 1.采用nginx进行转发,是前后端服务处于同一个域下面,从根本上避免跨域问题. 2.后端服务做一些配置,允许请求跨域,从而解决浏览器跨域问题.但是有时候浏览器还会发送OPTIONS请求. 2.跨域请求 跨域请求的介绍,以及处理方式可以看https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS,说的非常详细 简单说就是,浏览

jQuery源码分析系列(33) : AJAX中的前置过滤器和请求分发器

jQuery1.5以后,AJAX模块提供了三个新的方法用于管理.扩展AJAX请求,分别是: 1.前置过滤器 jQuery. ajaxPrefilter 2.请求分发器 jQuery. ajaxTransport, 3.类型转换器 ajaxConvert 源码结构: jQuery.extend({ /** * 前置过滤器 * @type {[type]} */ ajaxPrefilter: addToPrefiltersOrTransports(prefilters), /** * 请求分发器 *

Spring boot处理OPTIONS请求

一.现象从fetch说起,用fetch构造一个POST请求. 1 fetch('http://127.0.0.1:8000/api/login', { 2 method: "POST", 3 headers: ({ 4 'Content-Type': 'application/x-www-form-urlencoded' 5 }), 6 body: "name=" + name + "&password=" + pwd 7 }).then

http 中定义的八种请求的介绍

在http1.1协议中,共定义了8种可以向服务器发起的请求(这些请求也叫做方法或动作),本文对这八种请求做出简要的介绍: 1.PUT:put的本义是推送 这个请求的含义就是推送某个资源到服务器,相当于是上传. 2.POST:post可以理解为提交 这个请求会将客户端的资源提交到服务器上,通过URI 标识,告诉服务器要提交什么资源,如果资源不存在,那么就会新增,如果已经存在了,那么就会覆盖. 3.DELETE: 这个请求会删除服务端的某个资源. 4.GET: 这是一个向服务端资源的一个请求,他通过

jQuery中的Ajax几种请求方式

1. load( url, [data], [callback] ) :载入远程 HTML 文件代码并插入至 DOM 中. url (String) : 请求的HTML页的URL地址. data (Map) : (可选参数) 发送至服务器的 key/value 数据. callback (Callback) : (可选参数) 请求完成时(不需要是success的)的回调函数. 这个方法默认使用 GET 方式来传递的,如果[data]参数有传递数据进去,就会自动转换为POST方式的.jQuery

跨域访问接口上传图片出现options请求问题解决方法

1.首先因为服务器端会先发送一个option请求到后台  在后台返回一个post给页面 页面在处理post请求给接口 2.先写一个过滤器, 我们自己定义一个过滤器 package com.adtime.dsp.web.controller; import java.io.IOException; import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import

一次跨域请求出现 OPTIONS 请求的问题及解决方法

问题背景: 浏览器从一个域名的网页去请求另一个域名的资源时,域名.端口.协议任一不同,都是跨域 在前后端开发过程经常会遇到跨域问题. 前端这边是一个get请求,按理说也没啥,但是在请求的header里面要添加两个自定义的header. GET http://localhost:8080/api/v1/users Accept: */* Content-Type: application/json Authorization: token:21232f297a57a5a743894a0e4a801