Php 浏览器中AJAX调用的不同行为和;复制为卷曲“;

Php 浏览器中AJAX调用的不同行为和;复制为卷曲“;,php,ajax,curl,shopware,Php,Ajax,Curl,Shopware,一般情况: 在一个Shopware项目中,我正试图启动并运行一个新版本的支付插件。一种特定的支付方法得到了一个新的API,在我们的登台环境中不起作用。(本地没有问题)在调试了一段时间后,我可以将问题分解为一个AJAX调用,该调用应该存储从支付服务获得的授权令牌到服务器上的会话 这个AJAX调用显示了一种非常奇怪的行为:当浏览器通过页面的JavaScript启动时,调用不会按预期工作。发送的令牌没有存储在REDIS存储中,我也没有找到任何响应体(应该包含调试输出)。我得到了一个200响应码。最让我

一般情况:

在一个Shopware项目中,我正试图启动并运行一个新版本的支付插件。一种特定的支付方法得到了一个新的API,在我们的登台环境中不起作用。(本地没有问题)在调试了一段时间后,我可以将问题分解为一个AJAX调用,该调用应该存储从支付服务获得的授权令牌到服务器上的会话

这个AJAX调用显示了一种非常奇怪的行为:当浏览器通过页面的JavaScript启动时,调用不会按预期工作。发送的令牌没有存储在REDIS存储中,我也没有找到任何响应体(应该包含调试输出)。我得到了一个200响应码。最让我烦恼的是,当我使用开发人员工具的“Copy as cURL”功能并将其粘贴到命令行或GUI客户端时,一切都按预期进行。存储的会话值。收到调试输出

所以我的实际问题是: 当我通过从开发工具中复制curl或dominash的参数和头来确保它们使用完全相同的参数和头时,浏览器的请求与curl或dominash的请求有什么不同? 我是不是找错人了,只是时间问题?(然后,问题就出现了,这样的请求怎么会因为时间安排不当而失败。)

我想提供更多的背景信息: 控制器代码非常简单(是的,“受保护”看起来确实很奇怪,似乎是一些商店软件的特殊功能使其工作正常)

Shopware版本:5.4.3, 支付插件(此代码的来源):PayOne 4.3.1
这是curl请求。最初它应该是一个帖子,一个调试尝试是让它成为一个GET。不过,这并没有改变这种行为。卷曲有效,浏览器中的原始请求无效

curl 'https://<domain>/de/MoptAjaxPayone/storeAuthorizationToken?authorizationToken=20ae061a-b8cd-2008-a7f9-84e94ca71523' \
  -H 'authority: <domain>' \
  -H 'pragma: no-cache' \
  -H 'cache-control: no-cache' \
  -H 'accept: */*' \
  -H 'x-csrf-token: KgDxrkUB3KkbVOHWSwEOUWVIWpRHJL' \
  -H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36' \
  -H 'x-requested-with: XMLHttpRequest' \
  -H 'sec-fetch-site: same-origin' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-dest: empty' \
  -H 'referer: https://<domain>/de/checkout/shippingPayment/sTarget/checkout' \
  -H 'accept-language: de,da;q=0.9,it;q=0.8,en-US;q=0.7,en;q=0.6' \
  -H 'cookie: _ga=GA1.2.1339746099.1600161423; _gid=GA1.2.787319341.1603793583; x-ua-device=desktop; __utmzz=utmcsr=(direct)|utmcmd=(none)|utmccn=(not set); __utmzzses=1; _fbp=fb.1.1603793583917.1305294048; __csrf_token-1=KgDxrkUB3KkbVOHWSwEOUWVIWpRHJL; scarab.visitor=%2247EEF371B0831C41%22; BasketToken_SfXEGBXzFnFsiZY8z4mKdqvDl8BICC6B=BgSmkYYV9xE3N56RIumHFJi6YvNaOz8FfeymjKCJZHZKJULmQp; shopSelected=true; layerLanguage=de; layerCountry=2; BasketToken_gLjjyccOBRSrepPczTlbSRAbfmSrBh2p=YvCgZrhAAINEJkcJppJ3mk4eykbjSSsiExGh5dIK3t1ZwZzJu2; gender=/de/damen; scarab.mayAdd=%5B%7B%22i%22%3A%224333421%2520100%252034%22%7D%2C%7B%22i%22%3A%226368511%2520122%252046%22%7D%2C%7B%22i%22%3A%224331722%2520101%252032%22%7D%5D; nocache=detail-1%2C+checkout-1; session-1=glntj79ep8si7pah9c4fjfnpk7; slt=a2527090-a6e8-4cbd-83df-da52afd4bd0f.1; BasketToken_0D94YPGBB6uBsFTn6pegR4wpilYwkIiO=GRlVSQ8XqTBKW7o1wy0l3EVBXRvcPnCmQfwddxa9Dwygm8IPC1; x-cache-context-hash=31b937a0b05d5618b106ef9e865d2507e7771077; _gat_UA-48161381-13=1; _uetsid=a3b0cc00177211ebbd7c65d866bae873; _uetvid=3d0f5d4a49d80e3f35cd03b932b1ec0c' \
  --compressed
curl'https:///de/MoptAjaxPayone/storeAuthorizationToken?authorizationToken=20ae061a-b8cd-2008-a7f9-84e94ca71523'\
-H‘当局:’\
-布拉格马:没有缓存\
-H'缓存控制:无缓存'\
-H'接受:*/*'\
-H'x-csrf-token:KgDxrkUB3KkbVOHWSwEOUWVIWpRHJL'\
-H'用户代理:Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/85.0.4183.102 Safari/537.36'\
-H'x-request-with:XMLHttpRequest'\
-H'秒获取站点:相同来源'\
-H'秒取数模式:cors'\
-H'秒获取目标:空'\
-H’referer:https:///de/checkout/shippingPayment/sTarget/checkout' \
-接受语言:de,da;q=0.9,it;q=0.8,在美国;q=0.7,en;q=0.6'\
-H'cookie:_ga=GA1.2.1339746099.1600161423_gid=GA1.2.787319341.1603793583;x-ua-device=桌面__utmzz=utmcsr=(直接)| utmcmd=(无)| utmccn=(未设置)__utmzzses=1_fbp=fb.1.1603793583917.1305294048__csrf_令牌-1=KgDxrkUB3KkbVOHWSwEOUWVIWpRHJL;圣甲虫。访客=%2247EEF371B0831C41%22;BasketToken_SfXEGBXzFnFsiZY8z4mKdqvDl8BICC6B=BgSmkYYV9xE3N56RIumHFJi6YvNaOz8FfeymjKCJZHZKJULmQp;shopSelected=true;分层语言=de;layerCountry=2;BasketToken_gljjycobrsreppcztlbsrabbfmsrbh2p=yvcgzrhaainejkcjpj3mk4eykbjsssiexgh5dik3t1zwzzju2;性别=/de/damen;金龟子可能添加=%5B%7B%22i%22%3A%224333421%2520100%252034%22%7D%2C%7B%22i%22%3A%226368511%2520122%252046%22%7D%2C%7B%22i%22%3A%224331722%2520101%252032%22%7D%5D;nocache=详图-1%2C+检查-1;会话1=glntj79ep8si7pah9c4fjfnpk7;slt=a2527090-a6e8-4cbd-83df-da52afd4bd0f.1;BasketToken_0D94YPGBB6UBSFTN6PEGR4WPILYWKIO=GRlVSQ8XqTBKW7o1wy0l3EVBXRvcPnCmQfwddxa9Dwygm8IPC1;x-cache-context-hash=31b937a0b05d5618b106ef9e865d2507e7771077_gat_UA-48161381-13=1_uetsid=A3B0CC00177211EBD7C65D866BAE873_uetvid=3d0f5d4a49d80e3f35cd03b932b1ec0c'\
--压缩的

如果我能提供任何进一步的信息,请告诉我。

经过进一步的研究,以下是我的答案:

由于表单提交,浏览器已取消请求。请注意浏览器之间的不同行为: Firefox为我指明了正确的方向,因为它甚至没有尝试等待答案。提交表单时,浏览器将取消请求。在服务器端,在本例中是nginx,它记录一个499。FF开发工具根本不显示响应代码。 另一方面,Chrome并不等待答案,而是在没有主体的情况下显示200 OK的响应


解决方案是使ajax请求同步。

虽然我没有解决您的总体问题的答案,但我至少可以告诉您为什么ajax有时的行为与curl不同。因为AJAX是在浏览器中运行的,所以它与浏览器的安全要求(包括CORS、同源策略、cookie规则等)相关联。另一方面,curl实际上不受任何约束,只受原始协议本身的约束,可以自由地做任何它想做的事情。@ChrisHaas是的,当然。但我想说的是,所有这些要求都不应该成为问题。1.我在同一个域名2上。浏览器不会发出任何警告3。服务器的行为是不同的。4.来自同一个测试过的支付插件的每一个其他请求都能按预期工作。(那么,为什么我们在同一页上,几秒钟前遇到了上述需求问题)THX无论如何,我非常感谢您的任何想法,也许如果我对您的想法多想想,我会更接近解决方案。答案是不同步。。。答案是取消表单提交。如果你需要提交表单,当你收到回电时,用JavaScript提交表单。@epascarello是的,也许你是对的。但在我的特殊情况下,插件开发人员无论如何都需要自己修复它。我只是需要它快速工作。他们的解决方案将在几周后发布,似乎正在使其同步化。我不知道这是不是一个坏迹象:(
curl 'https://<domain>/de/MoptAjaxPayone/storeAuthorizationToken?authorizationToken=20ae061a-b8cd-2008-a7f9-84e94ca71523' \
  -H 'authority: <domain>' \
  -H 'pragma: no-cache' \
  -H 'cache-control: no-cache' \
  -H 'accept: */*' \
  -H 'x-csrf-token: KgDxrkUB3KkbVOHWSwEOUWVIWpRHJL' \
  -H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36' \
  -H 'x-requested-with: XMLHttpRequest' \
  -H 'sec-fetch-site: same-origin' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-dest: empty' \
  -H 'referer: https://<domain>/de/checkout/shippingPayment/sTarget/checkout' \
  -H 'accept-language: de,da;q=0.9,it;q=0.8,en-US;q=0.7,en;q=0.6' \
  -H 'cookie: _ga=GA1.2.1339746099.1600161423; _gid=GA1.2.787319341.1603793583; x-ua-device=desktop; __utmzz=utmcsr=(direct)|utmcmd=(none)|utmccn=(not set); __utmzzses=1; _fbp=fb.1.1603793583917.1305294048; __csrf_token-1=KgDxrkUB3KkbVOHWSwEOUWVIWpRHJL; scarab.visitor=%2247EEF371B0831C41%22; BasketToken_SfXEGBXzFnFsiZY8z4mKdqvDl8BICC6B=BgSmkYYV9xE3N56RIumHFJi6YvNaOz8FfeymjKCJZHZKJULmQp; shopSelected=true; layerLanguage=de; layerCountry=2; BasketToken_gLjjyccOBRSrepPczTlbSRAbfmSrBh2p=YvCgZrhAAINEJkcJppJ3mk4eykbjSSsiExGh5dIK3t1ZwZzJu2; gender=/de/damen; scarab.mayAdd=%5B%7B%22i%22%3A%224333421%2520100%252034%22%7D%2C%7B%22i%22%3A%226368511%2520122%252046%22%7D%2C%7B%22i%22%3A%224331722%2520101%252032%22%7D%5D; nocache=detail-1%2C+checkout-1; session-1=glntj79ep8si7pah9c4fjfnpk7; slt=a2527090-a6e8-4cbd-83df-da52afd4bd0f.1; BasketToken_0D94YPGBB6uBsFTn6pegR4wpilYwkIiO=GRlVSQ8XqTBKW7o1wy0l3EVBXRvcPnCmQfwddxa9Dwygm8IPC1; x-cache-context-hash=31b937a0b05d5618b106ef9e865d2507e7771077; _gat_UA-48161381-13=1; _uetsid=a3b0cc00177211ebbd7c65d866bae873; _uetvid=3d0f5d4a49d80e3f35cd03b932b1ec0c' \
  --compressed