从子域向域发送 POST 请求时出现错误 419
Posted
技术标签:
【中文标题】从子域向域发送 POST 请求时出现错误 419【英文标题】:Error 419 when sending POST request to domain from subdomain 【发布时间】:2020-01-10 07:08:10 【问题描述】:从 admin.example.com 向 example.com 发送请求后,我在响应中收到错误 419,反之亦然。
我在 config/session.php 中将 'domain' => env('SESSION_DOMAIN', null),
更改为 'domain' => '.example.com',
,但这似乎没有任何改变。
admin.example.com CSRF 代码:
. . .
</head>
<body>
!! csrf_field() !!
@include('_nav')
. . .
我希望响应是与请求相关的 JSON,但实际上我得到了一个 Laravel html 响应,上面写着“页面已过期”。我生成的 CSRF 令牌显然有问题。
请求:
【问题讨论】:
你改成'domain' => '.example.com'
后清除浏览器cookie了吗?
是的,我在更改后清除了 cookie。所有域都是 cookie 中的“.example.com”。
能否发一张chrome开发工具中application
下cookies
标签的截图?
这是 cookie:imgur
发现不是CSRF token的原因,是子域发出请求时,页面无法访问cookies。我该如何解决?我返回dd($_COOKIE)
作为响应,它显示[]
。
【参考方案1】:
问题在于您的 CSRF 令牌,如果您有发送请求的表单,则可以包含
<form>
@csrf
</form>
其中的令牌,如果您没有表单,请尝试将其添加为您的 Ajax 调用中的数据索引。
$.ajax(
type: 'POST',
url: " url('/yourURL') ",
data:
_token : ' csrf_token() ',
formData : myArray,
,
【讨论】:
CSRF 令牌是在请求中发送的。我使用$('input[name=_token]').val()
将令牌添加到请求中。以上是关于从子域向域发送 POST 请求时出现错误 419的主要内容,如果未能解决你的问题,请参考以下文章
从 Angular 向 Asp.net 发送 post 请求时出现错误 405
尝试向 API 发送 POST 请求时出现属性错误 - Django
Python Post 请求 - 通过 Outlook API 发送文件时出现 415 错误
发送 post 请求时出现 CORS 错误,但在 Spring Boot 和 Reactjs 中未获取请求