一、HTTP一共有八种常见请求方法

  1. get:参数在url上,浏览器长度有限制,不安全
  2. post:参数不可见,长度不受限制
  3. put:上传最新内容到指定位置
  4. delete:删除请求的url所表示的资源
  5. head:不返回相应主体,主要用于客户端查看服务器性能
  6. options: 与head类似,是客户端用于查看服务器的性能 。JavaScript的XMLHttpRequest对象进行CORS跨域资源共享时,就是使用OPTIONS方法发送嗅探请求,以判断是否有对指定资源的访问权限
  7. connect:http1.1预留的,将连接方式改为管道方式,通常用于SSL加密服务器的链接与 HTTP非加密的代理服务器之间的通信
  8. trace:请求服务器[回显收到的请求信息]主要用于HTTP请求的测试或诊断
  9. patch:出现的较晚,用于更新局部的资源,不存在时,会创建一个新的(http1.1之后使用的较多的)

一般来说我们只需要用到post和get,但是如果后端是ResetFul设计规范下就需要用到各种语义化的方法了

二、什么是预请求?

预请求就是复杂请求(可能对服务器数据产生副作用的HTTP请求方法,如put,delete都会对服务器数据进行更修改,所以要先询问服务器)。
跨域请求中,浏览器自发的发起的预请求,浏览器会查询到两次请求,第一次的请求参数是options,以检测试实际请求是否可以被浏览器接受

三、为什么需要?

w3c规范要求,对复杂请求,浏览器必须先使用options发起一个预检请求,从而获知服务器是否允许该跨域请求,服务器确认以后才能发起实际的HTTP请求,否则停止第二次正式请求。

那为什么我们不常见options请求呢??
因为大部分我们使用的是get,post请求,他们属于简单请求,而简单请求不会触发options请求。
那什么情况下会发生options请求呢??

四、什么情况下发生?(以下都属于复杂请求)

  • 请求方法不是get head post
  • post 的content-type不是application/x-www-form-urlencode,multipart/form-data,text/plain [也就是把content-type设置成"application/json"]
  • 请求设置了自定义的header字段: 比如业务需求,传一个字段,方面后端获取,不需要每个接口都传

例如设置了post请求的content-type:application/json,就会发生预请求

五、为什么需要设置成contentType:“application/json”

ajax发送复杂的json数据结构, 处理方式困难, 服务器端难以解析, 所以就有了application/json这种类型(数据格式的声明)服务端好解析并且比较统一,如果你请求中没有设置成json格式的,有的服务端收到后也会改成json格式的,但是如何请求中就改成了json格式的就会发生options预请求

if设置了:

  • 表示json格式的字符串,发送的json对象必须使用json.stringify进行序列化字符串才能匹配
  • spring 需要使用@RequestBody来注解

if没设置:

  • 默认将使用contentType: "application/json”application/x-www-form-urlencoded

六、需要配置什么?

在 CORS 中,可以使用 OPTIONS 方法发起一个预检请求,服务器基于从预检请求获得的信息来判断,以检测实际请求是否可以被服务器所接受。

1.预请求的请求报文中要设置👇

  • Access-Control-Request-Method首部字段: 告知服务器实际请求所使用的 HTTP 方法;
  • Access-Control-Request-Headers首部字段: 告知服务器实际请求所携带的自定义首部字段。

2.同时服务端或者nginx 需要设置响应体👇

"Access-Control-Allow-Origin" : * 【跨域】
Access-Control-Allow-Methods:POST,GET,OPTIONS,DELEDET 【所允许的请求方法告知客户端】
Access-Control-Allow-Headers: X-Requested-With, accept, origin, content-type【自定义的请求头】
Access-Control-Allow-Age:3600  
【一段时间内不需要再次预请求,直接用本次结果即可】
"Content-Type", "application/json;charset=utf-8"

七、options作用

OPTIONS请求方法的主要用途有两个:

  1. 获取服务器支持的HTTP请求方法;也是黑客经常使用的方法。
  2. 用来检查服务器的性能。例如:AJAX进行跨域请求时的预检,需要向另外一个域名的资源发送一个options请求头,用以判断实际发送的请求是否安全。

八、跨域方法:

  • JSONP跨域:动态生成script标签,只支持get请求,但是兼容性比较好可以支持老浏览器
  • CORS跨源资源共享:options请求做嗅探
  • webSockted:全双工通信
  • img src :不受浏览器的同源限制
预请求就是复杂请求(可能对服务器数据产生副作用的HTTP请求方法,如put,delete都会对服务器数据进行更修改,所以要先询问服务器)。跨域请求中,浏览器自发的发起的预请求,浏览器会查询到两次请求,第一次的请求参数是options,以检测试实际请求是否可以被浏览器接受。
用于Go的OAuth2提供程序库 以某种严格的方式实现OAuth2 HTTP跳舞。 例如: 在将资源所有者重定向到Web授权表单时,要求第三方客户端应用程序始终报告他们试图获得访问权限的范围。 默认情况下,始终发送Strict-Transport-Security标头。 您可以通过传递0的STS最大年龄来禁用它。 X-Frame-Options标头始终与授权表一起发送 X-XSS-Protection始终发送。 要求第三方客户端应用发送state请求参数,以最大程度地减少CSRF攻击的风险。 根据注册的客户端URI检查重定向URI 需要重定向URI才能使用HTTPS方案。 不允许客户端使用动态重定向URI。 在访问令牌刷新时强制刷新令牌旋转。 支持OAuth2流 资源所有者密码凭证 该库的目标不是支持: 相反,我们为后
问题描述: Vue的开发者都知道axios,很多都用axios来进行数据交互,axios的默认请求头是Content-Type: application/json 使用这个请求头会出现向服务器请求两次的情况 为什么呢? 原因是:浏览器会首先使用 OPTIONS 方法发起一个请求,判断接口是否能够正常通讯,如果不能就不会发送真正的请求过来,如果测试通讯正常,则开始真正的请求。 大概意思就是: 浏览器对后台说:我可以请求你吗? ( ̄ˇ ̄)  后台说:阔以。( ̄▽ ̄)~* 结果是:发送原有的GET(POST)请求 后台说:不阔以。(‵﹏′) 结果是:报错 那么这样每个请求都会发送两次,无形加重了服
1 偶然的相遇——options请求 最近写的项目,应用里所有的ajax请求都发送了2遍。由于新项目,基础模块是新搭的,所以出现一些奇葩问题也是意料之中,啊终于第一次在chrome的devTools遇见了活的options请求。 1.1 第1次请求 这里首先发送了一次额外的options请求,在浏览器里看到请求request header 和 response header的信息如下: (1)...
var morgan = require ( 'morgan' ) 摩根(格式,选项) 使用给定的format和options创建一个新的morgan logger中间件功能。 format参数可以是定义名称的字符串(有关名称,请参见下文),格式字符串的字符串或将生成日志条目的函数。 将使用三个参数tokens , req和res调用format函数,其中tokens是具有所有已定义标记的对象, req是HTTP请求,而res是HTTP响应。 该函数应返回一个将作为日志行的字符串,或者返回undefined / null以跳过日志记录。 使用定义的格式字符串 morgan ( 'tiny' ) 使用定义标记的格式字符串 morgan ( ':method :url :status :res[content-length] - :response-time ms' ) 使用自定义格式功 出于安全考虑,并不是所有域名访问后端服务都可以。其实在正式跨域之前,浏览器会根据需要发起一次检(也就是option请求),用来让服务端返回允许的方法(如get、post),被跨域访问的Origin(来源或者域),还有是否需要Credentials(认证信息)等。那么浏览器在什么情况下能检呢? 二、两种请求方式 浏览器将CORS请求分为两类:简单请求(simple request)和非简单请求(not-simple-request),简单请求浏览器不会检,而非简单请求检。这两种方式怎么区分 1、获取服务器支持的HTTP请求方法; 2、用来检查服务器的性能。例如:AJAX进行跨域请求时的检,需要向另外一个域名的资源发送一个HTTP OPTIONS请求头,用以判断实际发送的请求是否安全。 这是浏览器给我们加上的,后端并没有做任何操作。 疑问2:为什么会用到options请求 这得从浏览器同源策略和跨域说起,具体可阅读也谈谈同源策略和跨域问题和浏览器同源政策及其规避方法,这里不在赘述。 解决跨域问题的方法有很
HTTP请求方法并不是只有GET和POST,只是最常用的。据RFC2616标准(现行的HTTP/1.1)得知,通常有以下8种方法:OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE和CONNECT。 OPTIONS方法是用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源
options请求方法的主要用途有两个: 1、获取服务器支持的HTTP请求方法; 2、用来检查服务器的性能。例如:AJAX进行跨域请求时的检,需要向另外一个域名的资源发送一个HTTP OPTIONS请求头,用以判断实际发送的请求是否安全。 为什么会出现options请求方式 想必很多小伙伴在第一次遇到请求方式为options时,会有一丝诧异,有些人会百度百度,有些人可能压根不在乎。至于为什么会出现options请求,我也是百度查阅资料略知一二。 这得从浏览器同源策略和跨域说
前言: 身为一名前端菜鸟,之前一直未关注后端对于跨域的配置,这不,终于又踩到坑了,由于nginx未配置代理转发,所以前端的处理一直都是针对开发环境和生产环境做处理 // 错误 的代理配置,同样启用proxy代理,并在axios配置文件中根据开发环境配置请求,这样在开发环境中可以正常请求,但是在生产环境中由于直接请求,浏览器会进行请求OPTIONS http请求options,这是浏览器对复杂跨域请求的一种处理方式,在真正发送请求之前,会先进行一次请求,就是我们刚刚说到的参数为OPTIONS的第一次请求,他的作用是用于试探性的服务器响应是否正确,即是否能接受真正的请求,如果在options
var goldwasher = require ( 'goldwasher-schedule' ) ; var gs = goldwasher ( targets , options ) ; gs . on ( 'result' , function ( results ) { console . log ( results ) ; } ) ; gs . start ( ) ; gs . stop ( ) ; 设置功能所需的第一个参数是目标数组。 一个例子: url : 'https://github.com' , rule : { second : [ 15 , 35 , 55 ] } ,
一、作用及由来 1、针对跨域HTTP 请求,有一种方式叫做“跨域资源共享”,准确的说是一个W3C标准,可以克服同源策略的限制 2、针对CORS请求,浏览器将其分为两个类型:简单请求和非简单请求 3、针对非简单请求,浏览器必须首先使用options方法发起一个请求,从而获知服务器端是否允许跨域请求服务器确认允许之后,才发起实际的HTTP请求。在请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括Cookies和HTTP认证的相关数据) 二、options请求场景 1、简单请求与非简单
1.options请求是什么?什么时候浏览器会发送请求 options请求,在真正的请求发送出去之前,浏览器都会先发送一个options请求法系那个服务器询问此接口是否允许我访问。浏览器在当前真实请求是非常简单请求且跨域的情况下会发起options请求。 2。什么是简单请求: 1.请求方法为get,post,head 2.Content-Type限于(application/x-www-form-urlencoded,mutipart/form-data,text/plain) 3.不可以有自
计算机网络—一个自治系统有5个局域网,其连接图如图所示。LAN2至LAN5上的主机数分别为:91,150,3,15。该自治系统分配到的IP地址块为30.138.118/23。试给出每一个局域网的地址块 51489