美文网首页我爱编程
2018-04-13 HTTP开发跨域请求问题

2018-04-13 HTTP开发跨域请求问题

作者: FrankDian | 来源:发表于2018-04-13 20:26 被阅读0次

跨域POST请求后端的数据时被服务器拒绝,后经试验,发现两种方法来解决此问题:

方法一: 

服务器端设置:

Access-Control-Allow-Origin *;

Access-Control-Allow-Headers"Origin, X-Requested-With, Content-Type, Accept";

add_headerAccess-Control-Allow-Methods"GET, POST, OPTIONS";

jquery中的ajax中设置:

contentType: 'application/json',

这种方法能够跨域传值,但是由于客户端对于contentType中的 “预检请求(preflight request)”都会先访问服务器是否支持该跨域请求,得到允许后才会真正的请求第二次,拿到数据,所以这种方法会发送两次请求才能拿到数据,在控制台中可以看到。

方法二:

服务器端设置:

Access-Control-Allow-Origin *;

add_headerAccess-Control-Allow-Methods"GET, POST, OPTIONS";

jquery中的ajax中设置:

contentType: 'text/plain',

这种方法不属于contentType中的 “预检请求(preflight request)”所以只会发送一次

以上两种方法传入的对象都需经过JSON.stringify()方法来规范一下格式

预检请求(preflight request)

W3C标准:CROS,全称是跨域资源共享 (Cross-origin resource sharing),它的提出就是为了解决跨域请求的。

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

CORS规定,Content-Type属于以下MIME类型的,都属于预检请求:

application/x-www-form-urlencoded

multipart/form-data

text/plain

所以 application/json的请求 会在正式通信之前,增加一次"预检"请求,这次"预检"请求会带上头部信息 Access-Control-Request-Headers: Content-Type:

OPTIONS /api/test HTTP/1.1

Origin: http://foo.example

Access-Control-Request-Method: POST

Access-Control-Request-Headers: Content-Type.......

服务器回应时,返回的头部信息如果不包含Access-Control-Request-Headers: Content-Type则表示不接受非默认的的Content-Type。即出现以下错误:

Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.

相关文章

  • 2018-04-13 HTTP开发跨域请求问题

    跨域POST请求后端的数据时被服务器拒绝,后经试验,发现两种方法来解决此问题: 方法一: 服务器端设置: Acce...

  • Http访问跨域解决

    一、跨域科普 跨域,即跨站HTTP请求(Cross-site HTTP request),指发起请求的资源所在域不...

  • Nginx跨域请求设置

    Nginx跨域请求设置 开发环境中,前后端分离开发时,经常会有跨域请求的问题出现,Nginx可以设置如下: 说明:...

  • http请求跨域post请求跨域问题

    今天和c++的同事联调创建一个应用接口,服务端增加了允许跨域请求。vue增加了代理proxytable 但是遇到一...

  • ajax 请求

    Vue开发中解决跨域问题 Axios 配置请求拦截

  • Koa代理Http请求

    Koa 代理http请求,解决跨域问题 1、为什么用Koa做跨域代理? "最初为了解决跨域问题,我把站点部署到了n...

  • When specified, “proxy” in packa

    刚安装好react脚手架,然后用axios来请求发现存在跨域问题,我请求的是https的好像请求http是没有跨域...

  • chrome浏览器设置--disable-web-securit

    在开发人员于后台进行接口测试的时候,老是遇到跨域问题,这时前端总是会让后台添加跨域请求头来允许跨域请求,今天介绍一...

  • 解决一例Vue跨域访问无效

    在使用vue开发的时候经常要涉及到跨域的问题,其实在vue cli中是有我们设置跨域请求的文件的。当跨域无法请求的...

  • Provisional headers are shown ||

    问题出在了跨域上 跨域请求出了问题

网友评论

    本文标题:2018-04-13 HTTP开发跨域请求问题

    本文链接:https://www.haomeiwen.com/subject/ngyhkftx.html