Forms 强制提交POST表单以发送Cookie

Forms 强制提交POST表单以发送Cookie,forms,post,iframe,cookies,google-chrome-extension,Forms,Post,Iframe,Cookies,Google Chrome Extension,我正在为Chrome扩展开发一个功能,它需要向端点发出一个相同来源的POST请求。为简洁起见,我将省略网站的具体细节。此请求创建给定类型的资源。我已经成功地创建了许多类型的资源,但有一种资源总是失败 当您使用网站自己的UI创建此类资源时,我注意到生成的POST请求与cookie标题一起发送,还有一些我不熟悉的内容。以下是请求标题的摘录: :authority:www.example.com :method:POST :path:/path/to/endpoint :scheme:https [.

我正在为Chrome扩展开发一个功能,它需要向端点发出一个相同来源的POST请求。为简洁起见,我将省略网站的具体细节。此请求创建给定类型的资源。我已经成功地创建了许多类型的资源,但有一种资源总是失败

当您使用网站自己的UI创建此类资源时,我注意到生成的POST请求与
cookie
标题一起发送,还有一些我不熟悉的内容。以下是请求标题的摘录:

:authority:www.example.com
:method:POST
:path:/path/to/endpoint
:scheme:https
[...]
cookie: [...]
Cookie不会针对任何其他资源类型发送,只针对此资源类型

现在,由于这会传递cookies,网站自己的javascript不能使用ajax。事实上,该网站通过将
链接到特定名称的
来发布到

因此,我修改了我的Chrome扩展代码,使用表单发布到iframes,而不是发出ajax请求,就像在网站上本机完成的那样。但是,生成的POST请求仍然不会传递cookie。我没有发现网站UI中创建这些可能导致请求传递cookie的特殊资源的部分有什么独特之处

Chrome如何决定何时在web请求中传递cookie?对于
提交,我如何强制它执行此操作


编辑:根据要求,这里有一些更详细的信息

要创建资源,只需将多部分数据发布到
/resource endpoint
。在jQuery中,您可以执行以下操作

var data = new FormData();
data.append('property', 'value'); // Add payload values

$.ajax({
  url: '/resource-endpoint'
  type: 'POST',
  cache: false,
  contentType: false,
  processData: false,
  data: data
});
这样做将创建除“特殊”资源之外的大多数资源。由于AJAX请求不能传递cookie,并且创建“特殊”资源的请求必须包含cookie,因此我必须更紧密地模拟网站的UI

var id = 'some-id';
var iframe = $('<iframe name="' + id + '"></iframe>');
$(document.body).append(iframe);

var form = $('<form></form>');

form.attr({
  target: id,
  action: '/resource-endpoint,
  method: 'POST',
  enctype: 'multipart/form-data'
});

// Add payload values
form.append('<input name="property" value="value" />');

$(document.body).append(form);

form.submit();
varid='someid';
变量iframe=$('');
$(document.body).append(iframe);
变量形式=$('');
form.attr({
目标:id,
操作:'/resource endpoint,
方法:“POST”,
enctype:“多部分/表单数据”
});
//添加有效负载值
格式。附加(“”);
$(document.body).append(表单);
表单提交();
这仍然会发送请求,但似乎缺少一些内容,因为创建“特殊”资源的请求不包括cookie。我不确定本机网站javascript是如何做到这一点的,因为我找不到创建常规资源的表单和创建“特殊”资源的表单之间的任何区别



编辑:没关系,我看到一个来自用户界面的本地“特殊资源”POST请求,它没有传递这些cookies,所以秘密一定不是cookies。

我知道你的目标和所有,只是一些问题(和一些请求),还不完全熟悉chrome扩展的工作原理,但我认为提供更多的信息对社区会有很大帮助。您可以发布一些关于如何创建此类资源或类似资源的代码片段吗?添加了更多详细信息,感谢您的反馈:)我了解您的目标和所有内容,尽管只是一些问题(和一些请求),但还不完全熟悉chrome扩展的工作原理,但我认为提供更多的信息对社区会有很大帮助。您可以发布一些关于如何创建此类资源或类似资源的代码片段吗?添加了更多详细信息,感谢您的反馈:)