application/json请求会跨域,x-www-form-urlencoded请求不会跨域

JSON数据请求通常使用XMLHttpRequest或Fetch API进行,而这些请求会触发跨域安全性检查。同源策略要求浏览器仅允许页面从相同协议(http/https)、域名和端口的源发出的请求才能访问其它源的资源。因此,如果前端代码来自一个域(例如,your-frontend.com),并且它试图从不同的域(例如,api-server.com)请求JSON数据,浏览器就会阻止这个请求,因为它违反了同源策略。

然而,x-www-form-urlencoded请求通常是通过HTML表单提交的,而HTML表单提交可以不受同源策略的限制。这就是为什么x-www-form-urlencoded请求没有跨域问题的原因。

要解决JSON数据请求的跨域问题,你可以考虑以下几种方法:

  1. 使用CORS(跨域资源共享)头部: 在API服务器上配置CORS响应头,允许来自前端域名的跨域请求。这通常包括在API服务器的响应中添加Access-Control-Allow-Origin头部,将其设置为前端域名。

  2. 代理服务器: 在前端服务器上设置一个代理服务器,然后让代理服务器发送请求到API服务器。由于请求是从同一域发送的,不会触发跨域问题。代理服务器将请求转发到API服务器并将响应返回给前端。

  3. JSONP: 如果API支持JSONP(JSON with Padding),你可以使用JSONP来获取数据。JSONP是一种绕过浏览器跨域限制的技术,但它要求API支持JSONP。

  4. WebSocket: 使用WebSocket来建立双向通信通道,WebSocket不受同源策略的限制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,根据您的需求,我对代码进行了修改,并添加了获取响应头中的 Cookies 的代码: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body> <div id="app"> <el-button type="primary" @click="addRequest">添加</el-button> <el-input v-model="username" placeholder="请输入内容"></el-input> <el-input v-model="password" placeholder="请输入内容"></el-input> </div> <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.7.0/vue.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.js"></script> <!-- 引入样式 --> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> <!-- 引入组件库 --> <script src="https://unpkg.com/element-ui/lib/index.js"></script> <script> let MyVue = new Vue({ el: '#app', data() { return { username: "114514", password: "114514", } }, methods: { addRequest: function() { $.ajax({ url: "http://localhost:8080/hello", type: "POST", contentType: 'application/x-www-form-urlencoded', xhrFields: { withCredentials: true // 允许发送和接收 cookie }, success: function(res, status, xhr) { console.log(JSON.parse(res)); console.log(xhr.getResponseHeader('Set-Cookie')); // 获取响应头中的 Cookies }, error: function(xhr, status, error) { console.log(error); } }) } } }) </script> </body> </html> ``` 需要注意的是,此方法只适用于在同一域名下的请求。如果您需要跨域获取 Cookies,需要在服务器端设置相关的 CORS 配置。另外,由于您的代码中使用了箭头函数,我将其改为了普通函数,以避免出现 this 指向错误的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值