- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题/总结:
问题,在使用应用程序 json 数据执行 jQuery 发布时,我收到 CORS 错误响应。但是我没有收到带有纯文本或 x-www-urlencoded-form 数据的 jQuery 帖子的错误。
问题/详情:
我有两个应用程序在我的 Ubuntu VM 上运行,一个 React 应用程序在 http://localhost:3000
上运行,一个 Java Web 服务从我的 Netbeans 10 IDE 的 Payara 服务器运行,位于这个 url http://cduran-virtualbox:8080/TestMavenWebApplication/firstservicecall
。我正在尝试测试从 React 应用程序到 Web 服务,使用不同内容类型执行不同的 jQuery 帖子。
为了避免收到 CORS 错误消息,我将其添加到 Java Web 服务器 HttpServletRequest 对象 response.addHeader("Access-Control-Allow-Origin", "http://localhost:3000");
但是,在使用 Json 数据进行 jQuery 发布时出现此错误:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://cduran-virtualbox:8080/TestMavenWebApplication/firstservicecall. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
但我还有另外两种测试方法可以执行 jQuery Posts(一种是 content-type
是 text/plain
,另一种是 application/x- www-form-urlencoded
没有那个问题。也就是说,我可以成功地将 jQuery Post 消息发送到 Web 服务并获得响应。
这是带有 json 数据的 jQuery Post 的代码,其中我有 CORS 响应问题:
var urlToPost = 'http://cduran-VirtualBox:8080/TestMavenWebApplication/firstservicecall';
$.ajax({
type: "POST",
dataType: "json",
contentType: 'application/json; charset=utf-8',
//crossDomain: true,
url: urlToPost,
async:true,
data: JSON.stringify({ Object: 'CD', Quantity: '4' }),
success: function(response) {
console.log("json response: " + response);
},
failure: function(errMsg) {
alert(errMsg);
}
});
这是带有纯文本的 jQuery 帖子(即没有 CORS 响应,我可以看到正在访问 Web 服务代码,并且我可以看到返回到启动 jQuery 帖子的 React 应用程序的响应):
var urlToPost = 'http://cduran-VirtualBox:8080/TestMavenWebApplication/firstservicecall';
$.ajax({
type: "POST",
//dataType: "text",
contentType: 'text/plain',
url: urlToPost,
data: "Hello from CommunicationForm (plain text)",
success: function(response) {
console.log("plain text response: " + response);
}
});
这是我的 x-www-urlencoded-form 的 jQuery 帖子,它也有效:
var myObject = {
var1: 'Hello from CommunicationForm'
};
var urlToPost = 'http://cduran-VirtualBox:8080/TestMavenWebApplication/firstservicecall';
$.ajax({
type: "POST",
//dataType: "text",
contentType: 'application/x-www-form-urlencoded; charset=utf-8',
url: urlToPost,
data: myObject,
success: function(response) {
console.log("application/x-www-form-urlencoded response: " + response);
}
});
作为进一步的证据,这是我的 React 应用程序的屏幕截图,您可以忽略输入文本字段,因为它什么都不做。但我有 3 个输入提交按钮。从按钮名称可以推断,一个使用 x-www-urlencoded-form 内容类型执行上面的 jQuery 帖子,另一个使用 text/plain,另一个使用 json。
单击 x-www.. 按钮后,此日志语句(如屏幕截图所示)将从 Web 服务返回(表明它工作正常)。
application/x-www-form-urlencoded response: Hello back from Servlet - content type received x-www-form-urlencoded
点击明文按钮后,这个日志语句显示在屏幕截图上,再次证明 jQuery Post 工作正常:
plain text response: Hello back from Servlet - content type received plain text
最后两条控制台日志消息是单击 Submit_json 按钮后的 CORS 错误响应。
编辑/更新 2:
附加说明 - 使用 Post Man 应用程序,我可以将内容类型为 application/json 的 HTTP Post 发送到我的 Java Web 服务应用程序并看到响应。
我创建了一个常规的 Maven Java 应用程序(不是 Web 应用程序),我还可以将内容类型为 application/json 的 HTTP Post 发送到我的 Java Web 服务应用程序,我可以在其中看到良好的响应。
当我从我的 REACT 网络应用程序提交带有 application/json 的 jQuery POST 时,我在网络浏览器上的开发人员工具的网页上看到 POST 作为选项发送(这在 Firefox 和 Chrome 浏览器中都发生过) .
此链接中的评论 https://github.com/angular/angular/issues/22492提到发送简单请求,并列出不包含 application/json
的内容类型。
这确实让事情变得更加困惑。
编辑/更新 1:
这是我的后端服务器代码。没什么特别的,它只是检查内容类型 header 字段,然后解析对象并将不同的响应发送回 React 应用程序。
public class FirstServlet extends HttpServlet {
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
String contentType = request.getHeader("content-type");
response.addHeader("Access-Control-Allow-Origin", "http://localhost:3000");
if (contentType.equals("text/plain")) {
InputStream is = request.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = "";
while((line = br.readLine()) != null) {
System.out.println("Plain/Text data received: " + line);
}
response.getWriter().print("Hello back from Servlet - content type received plain text");
} else if (contentType.equals("application/x-www-form-urlencoded; charset=utf-8")) {
String msgReceived = request.getParameter("var1");
System.out.println("Message Received: " + msgReceived);
response.getWriter().print("Hello back from Servlet - content type received x-www-form-urlencoded");
} else if (contentType.toLowerCase().contains("json")) {
JSONObject json = new JSONObject(request.getParameterMap());
System.out.println("json data received: " + json.toString());
response.getWriter().print("Hello back from Servlet - content type received application/json");
} else {
response.getWriter().print("Hello back from Servlet - content type undefined");
}
}
}
最佳答案
简单请求中 Content-Type header 的唯一值如下:
尝试将“application/json”更改为其他内容类型,否则浏览器将执行预检请求。
请参阅 CORS 文档:https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
关于java - 尝试使用 json 数据而不是纯文本或 x-www-form-urlencoded 进行 JQuery 发布时出现 CORS 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55317275/
表架构 DROP TABLE bla; CREATE TABLE bla (id INTEGER, city INTEGER, year_ INTEGER, month_ INTEGER, val I
我需要拆分字符串/或从具有以下结构的字符串中获取更容易的子字符串。 字符串将来自 window.location.pathname 或 window.location.href,看起来像 text/n
每当将对象添加到数组中时,我都会尝试更新 TextView ,并在 TextView 中显示该文本,如下所示: "object 1" "object 2" 问题是,每次将新对象添加到数组时,它都会覆盖
我目前正在寻找使用 Java 读取网站可见文本并将其存储为纯文本字符串的方法。 换句话说,我想转换成这样: Hello stupid World进入“ Hello World ” 或者类似的东西 Un
我正在尝试以文本和 HTML 格式发送电子邮件,但无法正确发送正确的 header 。特别是,我想设置 Content-Type header ,但我找不到如何为 html 和文本部分单独设置它。 这
我尝试了上面的代码,但我无法绑定(bind)文本,我怎样才能将资源内部文本 bloc
我刚刚完成了 Space Shooter 教程,由于没有 GUIText 对象,所以我创建了 UI.Text 对象并进行了相应的编码。它在统一播放器中有效,但在构建 Web 应用程序后无效。我花了一段
我有这个代码: - (IBAction)setButtonPressed:(id)sender { NSUserDefaults *sharedDefaults = [[NSUserDefau
抱歉标题含糊不清,但我想不出我想在标题中做什么。无论如何,对于图像上的文本,我使用了 JLabel 文本并将其添加到图标中。 JLabel icon = new JLabel(new Imag
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我在将 Twitter 嵌入到我从 HTML 5 转换的 wordpress 运行网站时遇到问题。 我遇到的问题是推文不是我的自定义字体... 这是我无法使用任何 css 定位的 HTML 代码,我正
我正在尝试找到解决由于使用以下形式的代码而导致的冗余字符串连接问题的最佳方法: logger.debug("Entering loop, arg is: " + arg) // @1 在大多数情况下,
我写了这个测试 @Test public void removeRequestTextFromRouteError() throws Exception { String input = "F
我目前正在创建一个正则表达式来拆分所有匹配以下格式的字符串:&[文本],并且需要获取文本。字符串可能类似于:something &[text] &[text] everything &[text] 等
有没有办法将标题文本从一个词变形为另一个词,同时保留两个词中使用的字母?我看过的许多 css 文本动画大多是视觉的,很少有旋转整个单词的。 我想要做的是从一个词过渡,例如“BEACH”到“CHANGE
总结matplotlib绘图如何设置坐标轴刻度大小和刻度。 上代码: ?
我在容器 (1) 中创建了容器 (2)。你能帮忙如何向容器(1)添加文本吗?下面是我的代码 return Scaffold( body: Padding( padding: c
我似乎找不到任何人或任何人这样做过。我试图限制我们使用的图像数量,并想创建一个带有渐变作为其“颜色”的文本,并在其周围设置渐变轮廓/描边 到目前为止,我还没有看到任何将两者结合在一起的东西。 我可以自
我正在为视频游戏暗黑破坏神 2 使用 discord.py 构建一个不和谐机器人。其中一项功能要求机器人从暗黑破坏神 2 屏幕截图中提取项目的名称和属性。我目前正在为此使用 pytesseract,但
我很难弄清楚如何旋转 strip.text theme 中的属性来自 ggplot2 .我使用的是 R 版本 3.4.2 和 ggplot2 版本 2.2.1。 以下是 MWE 的数据。 > dput
我是一名优秀的程序员,十分优秀!