我有一个ajax调用如下-
this.send({
url : AppConstants.variables.callURL.feed,
data : rqStr,
onSuccess : function(data, textStatus) {
console.log(textStatus);
});
send : function(obj) {
this.callbackObj = obj;
FeedBackPanel.add(obj.url + "->" + obj.data);
$.ajax({
url : obj.url,
data : obj.data,
dataType : "jsonp",
jsonp : "callback",
jsonpCallback: "RequestController.callbackObj.onSuccess"
});
}
Run Code Online (Sandbox Code Playgroud)
它工作正常>但是我试图提供一个错误的域,在这种情况下我得到一个
Status Code:504 Gateway Time-out
Run Code Online (Sandbox Code Playgroud)
在 chrome 网络开发人员面板中。但是,Console.log 没有给我该状态。那么有什么方法可以捕获状态代码,以便我可以采取适当的操作。
我的代码工作正常..我只需要捕获 504 网关超时消息。请帮忙。
我有一个 RESTful API,可以在其中添加GET节点和Post节点 - 基本的东西。
我的“问题”是这样的:
当用户发布新节点时,该节点已经存在。我应该回来吗
400 bad request409 conflict200 and the existing node我倾向于 200 并返回现有节点。但是如果您愿意的话,409 然后让用户自己获取正确的节点似乎更“正确”。
对于 RESTful api 来说,在这个问题上的“最佳实践”是什么?
我正在使用锁定机制来确保两个并行调用不会更新同一行,从而导致意外行为。所以我的代码是这样的:(没有现实世界的例子)
public class UserController {
public ActionResult AddReputation(int id, int repAmount) {
int lockWait=0;
bool alreadyLocked=true;
while (alreadyLocked) {
alreadyLocked=GetLockForUser(id);
Thread.Wait(1000);
lockWait++;
if (lockWait>10) {
return new HttpStatus(xxx);
}
}
SetlockForUser(id);
AddUserRep(id,repAmount);
return new Content("Well Done");
}
}
Run Code Online (Sandbox Code Playgroud)
所以。如果10秒后锁仍然存在,我想告诉调用者“请稍后再试,其他人只是在为该用户保存数据”。
REST-API 中最好的 HTTP 代码是什么?
409 Conflict?或者423 Locked?
注意:这不是 SQL-DB。我没有可以使用的真正的交易机制。所以我必须实现自己的锁定机制。
我正在阅读规范并试图准确了解 421 何时可能返回。给出了一个例子,但我不完全理解它。
背景
该规范建立了两个允许连接重用的条件:
对于没有 TLS 的 TCP 连接,这取决于解析为相同 IP 地址的主机。
和
对于 https 资源,连接重用还取决于是否拥有对 URI 中的主机有效的证书。
如果连接中使用的证书有多个subjectAltName或其中任何一个subjectAltName是通配符,则该连接可以重新用于主机名位于 s 列表中subjectAltName或与任何通配符匹配的任何请求。
规范中的具体示例
在某些部署中,重复使用多个源的连接可能会导致请求被定向到错误的源服务器。例如,TLS 终止可能由使用 TLS 服务器名称指示 (SNI) [TLS-EXT] 扩展来选择源服务器的中间件执行。这意味着客户端有可能将机密信息发送到可能不是请求的预期目标的服务器,即使该服务器在其他方面具有权威性。
请解释一下我对这个例子的理解哪里错误:
使用具有域的请求建立到中间件的 https 连接x.com。中间盒的 IP 地址为 1.2.3.4,并x.com解析为该地址。使用 SNI,TLS 握手会x.com返回一个对该域有效的证书。此连接上的所有消息都从客户端发送到中间件或从中间件发送到客户端。从客户端到中间件的应用程序级消息由中间件转发到不同连接上的源。从源到中间盒的消息被转发到客户端。如果要重用连接,满足上面讨论的两个条件是不够的。具体来说,对于域为 的请求y.com:如果y.com解析为 1.2.3.4 并且中间件具有对 有效的证书y.com,则仍然可能存在问题。因为原始连接使用 TLS 握手x.com,并且握手仅在新连接开始时完成,所以无法建立 https 连接来获取y.com. 因此客户端错误地在同一连接上向 发送请求y.com。中间件拒绝请求,因为与连接关联的证书的有效期为x.com- not y.com …
我正在构建一些 REST API 以在本机 iOS/Android 应用程序中使用。其中一个端点允许用户通过提供 2 个字段来更新其密码:old_password和password。
如果 HTTP 状态码不正确,我应该使用哪个状态码old_password?
我的第一个想法是一个401错误,但当身份验证令牌无效时我已经使用它,并且它会自动触发应用程序中的注销。
400似乎不合适,因为请求实际上在语义上是正确的,它是一个特定的身份验证错误。或许422?
根据我的经验,在调用 SpringRestTemplate#exchange随后收到“404 - Not Found”响应后,RestClientException会抛出 a 而不是返回ResponseEntity可以检查其状态的 a (即: with ResponseEntity#getStatusCode#is4xxClientError)。
我不明白为什么HttpStatus#is4xxClientError即使存在,如果反而Exception抛出一个阻止返回ResponseEntitywithHttpStatus来调用 #is4xxClientError的...
我有理由相信我刚才描述的是实际情况,因为我可以在互联网上找到其他帐户来确认这一点(即:Spring MVC - RestTemplate launch exception when http 404发生)。
如何在 Java 代码中使用我RestTemplate确实可以检查ResponseEntity#getStatusCode#is4xxClientError 何时RestTemplate#exchange收到 404 的状态,而不是被 阻止RestClientException?RestTemplate和配置 有关系吗?
或者我是否正确,这实际上是不可能的,也许它的存在ResponseEntity#getStatusCode#is4xxClientError实际上是一个“错误”?
Laravel版本:5.5
我试图从laravel控制器返回自定义的http状态代码。(使用jQuery Ajax $ .get()调用此URL)
在我的控制器功能中,我尝试了下面提到的两种方法,但是没有用。
这将返回错误“方法setStatusCode不存在”。
return response()->setStatusCode(202);
Run Code Online (Sandbox Code Playgroud)这个不是抛出错误,而是总是返回200。
$response = new Response();
$response->setStatusCode(202);
$response->header('custom', 555);
return $response;`
Run Code Online (Sandbox Code Playgroud)在后端,我有一个经过身份验证的用户重置密码的逻辑。我将旧密码和新密码作为参数。如果旧密码不匹配,那么他们会收到错误消息,但我找不到合适的状态代码。
认证中间件失败时发送401 Unauthorized,所以我因为冲突而无法使用401。而且我想,即使没有使用,在这种情况下 401 也不是最合适的状态
我开发了简单的帖子端点,但我不知道要覆盖什么以及在哪里添加状态代码。例如,当发生某些错误时,我想发送500,或者当创建对象时,我想发送201而不是200.
如何以及在哪里设置响应 Strapi 的状态代码?
我正在研究我的应用程序中的异常处理。在我的服务中我有这个方法:
public Optional<Entity> getEntityById(Long id) {
return Optional.of(EntityMapper.fromEntityToDto(repository
.findById(id)
.orElseThrow(() -> new EntityNotFoundException("No entry was found for" + " id: " + id))));
}
Run Code Online (Sandbox Code Playgroud)
在我的异常处理程序中,我有以下内容
@ControllerAdvice
public class ControllerAdvisor extends ResponseEntityExceptionHandler {
@ExceptionHandler(EntityNotFoundException.class)
public ResponseEntity<Object> handleEntityNotFoundException(EntityNotFoundException ex, WebRequest request) {
ErrorResponse errorResponse = new ErrorResponse(HttpStatus.NOT_FOUND, "Entity not found", ex.getMessage());
return new ResponseEntity<>(errorResponse, HttpStatus.NOT_FOUND);
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里和这里看到过他们这样做的例子,但在我看来,这就像滥用HttpStatus. 该资源是 API 端点(这很好),而不是未找到的实体。处理这个用例的最佳方法是什么?
根据 IQbrod 的回答,我创建了一个例外:
@ResponseStatus(value = HttpStatus.NO_CONTENT)
public class MyEntityNotFoundException extends RuntimeException {
public MyEntityNotFoundException(String message) { …Run Code Online (Sandbox Code Playgroud)