Questions tagged «http»

超文本传输​​协议-一种表示Web请求和答复的文本系统。

3
为什么HTTP没有POST重定向?
HTTP重定向是通过HTTP代码301和302(也可能是其他代码)以及带有新位置的地址的称为“位置”的标头字段完成的。但是,浏览器始终向该URL发送“ GET”请求。 但是,很多时候您需要通过POST(例如银行付款)将用户重定向到另一个域。这是一个常见的场景,并且确实是一个要求。有人知道为什么HTTP规范中忽略了这样的通用要求吗?解决方法是将表单(带有隐藏字段中的参数)的操作发送到目标位置(Location标头字段的值),然后setTimeout将表单提交到目标位置。

6
为什么GET请求不更改服务器上的数据?
在互联网上,我看到以下建议: GET永远不要更改服务器上的数据-为此使用POST请求 这个想法的基础是什么? 如果我做一个将数据插入数据库的php服务,并在GET查询字符串中传递参数,那为什么会出错呢?(我使用准备好的语句来处理SQL注入)。POST请求以某种方式更安全吗? 还是有一些历史原因?如果是这样,那么今天的建议有多有效?
109 http  http-request 

8
如果多个操作以不同的状态结束,该返回什么HTTP状态代码?
我正在构建一个API,用户可以在其中请求服务器在一个HTTP请求中执行多项操作。结果以JSON数组的形式返回,每个动作一个条目。 这些操作中的每一个都可能彼此独立失败或成功。例如,第一个操作可能会成功,第二个操作的输入格式可能不正确,无法验证,第三个操作可能会导致意外错误。 如果每个动作有一个请求,我将分别返回状态码200、422和500。但是,现在只有一个请求时,我应该返回什么状态码? 一些选项: 始终返回200,并在正文中提供更多详细信息。 也许仅在请求中有多个动作时才遵循上述规则? 如果所有请求成功,也许返回200,否则返回500(或其他代码)? 每个动作只使用一个请求,并接受额外的开销。 完全不同吗?
72 api  http 

5
除了能够或多或少地自由更改URL结构的能力之外,HATEOAS还提供了哪些可发现性和去耦性?
最近,我一直在阅读有关作为应用程序状态引擎(HATEOAS)的Hypermedia的信息,据称该约束使Web API成为“真正的RESTful”。它归结为基本上包括链接,这些链接包含对从当前状态可能进行的转换的每个响应。 让我根据自己的理解来说明HATEOAS是什么-如果错过任何事情,请纠正我。 / GET: { "_links": { "child": [ { "href": "http://myapi.com/articles", "title": "articles" } ] } } /articles?contains=HATEOAS GET: { "_items": [ { "uri": "http://myapi.com/articles/0", "title": "Why Should I Care About HATEOAS?" }, { "uri": "http://myapi.com/articles/1", "title": "HATEOAS: Problem or Solution?" } ], "_links": { "self": { "href": …
61 rest  http  hateoas 

3
RESTful API中的斜杠
我一直在争论如何使用RESTful API中的斜杠。 可以说我有一个称为狗的资源,而每个狗都有从属资源。因此,我们可以执行以下操作: GET/PUT/POST/DELETE http://example.com/dogs GET/PUT/POST/DELETE http://example.com/dogs/{id} 但是,如何处理以下特殊情况: GET/PUT/POST/DELETE http://example.com/dogs/ 我个人的观点是,这是向id = =的单个狗资源发送请求null。我认为在这种情况下,API应该返回404。 其他人则说请求正在访问dogs资源,即尾部的斜杠将被忽略。 有人知道最终答案吗?
60 api  rest  http 

8
何时在API中使用HTTP状态代码404
我正在做一个项目,在与工作人员争论了一个多小时之后。我决定知道堆栈交换中的人会说些什么。 我们正在为系统编写API,有一个查询应返回组织树或目标树。 组织树是用户所在的组织,换句话说,该树应始终存在。在组织中,应该始终存在目标树。(这是参数开始的地方)。如果树不存在,我的同事决定以状态码200回答响应是正确的。然后开始要求我修复我的代码,因为没有树时应用程序就崩溃了。 我会尽力避免火焰和愤怒。 我建议在没有树的情况下引发404错误。这至少会让我知道出了点问题。使用200时,我必须在成功回调中的响应中添加特殊检查以处理错误。我期望收到一个对象,但实际上可能会收到一个空响应,因为未找到任何内容。将响应标记为404听起来很公平。然后战争爆发了,我收到一条消息,说我不理解HTTP状态代码架构。所以我在这里,问在这种情况下404有什么问题?我什至得到了“它什么也没发现,所以返回200是正确的”的说法。我相信这是错误的,因为树应该一直存在。如果我们什么也没找到,并且期望得到结果,则应该是404。 更多信息, 我忘记添加获取的网址。 组织机构 /OrgTree/Get 目标 /GoalTree/GetByDate?versionDate=... /GoalTree/GetById?versionId=... 我的错误,两个参数都是必需的。如果提供了可以解析为日期的任何versionDate,它将返回关闭修订。如果您输入过去的内容,它将返回第一个修订版。如果按ID标识的ID不存在,我怀疑它将返回200的空响应。 额外 另外,我认为,对这个问题的最佳答案是在创建组织时创建默认对象,没有树不应该是有效的情况,应视为未定义的行为。没有两棵树就无法使用一个帐户。因此,它们应该始终存在。 我也链接了这个(一个相似但我找不到) http://viswaug.files.wordpress.com/2008/11/http-headers-status1.png

5
如果参数在语法上正确但违反业务规则,是否应该返回HTTP 400(错误请求)状态?
假设我有一个采用整数作为参数的REST端点: /makeWaffles?numberOfWaffles=3 在这种情况下,我希望数字是正数,因为我不能将华夫饼的数量设为负数(而请求0个华夫饼是浪费时间)。所以我想拒绝任何不包含正整数的请求。我还想拒绝超过某个最大整数的请求(现在说的是MAX_INTEGER)。 如果有人请求华夫饼的数量为非正数,我应该返回HTTP 400(错误请求)状态吗?我最初的想法是:对我来说,这不是有效的数字,无法完成请求。但是,RFC并未将业务规则作为抛出该规则的理由: 400(错误请求)状态代码表示服务器由于某些原因(例如格式错误的请求语法,无效的请求消息框架或欺骗性的请求路由)而被视为客户端错误,因此服务器无法处理该请求。 业务规则不属于这三个示例中的任何一个。从语法上讲,它是正确的,并且具有正确的框架,并且不是欺骗性的请求路由。 如果参数在语法上正确但违反业务规则,那么我应该返回HTTP 400(错误请求)状态吗?还是有更适合返回的身份?
56 api-design  http 

3
我是否应该使用HTTP状态代码来描述应用程序级别的事件
我处理过的几台服务器将返回HTTP 200,以请求客户端应认为失败的请求,其中的内容为“ success:false”。 在我看来,这似乎不是HTTP代码的正确实现,尤其是在身份验证失败的情况下。我已经很简洁地阅读了HTTP错误代码,其中“ 4xx”指示在更改之前不应该再次发出请求,而“ 5xx”指示该请求可能有效或无效,可以重试,但未成功。在这种情况下,200:登录失败,或200:找不到该文件,或200:缺少参数x,这肯定是错误的。 另一方面,我可以看到有人争论说“ 4xx”应仅表示请求的结构性问题。因此,这很适合返回200:错误的用户名/密码,而不是未经授权的401,因为允许客户端进行请求,但是恰好是错误的。这个论点可以概括为:如果服务器能够处理请求并做出确定,则响应代码应为200,并且由客户端检查主体以获取更多信息。 基本上,这似乎是一个优先事项。但这并不令人满意,因此,我想知道,如果有人有理由说明这些范例中的任何一个更为正确。


3
HTTP请求标头和请求正文中包含什么?
我正在为移动客户端开发一组Web服务,并且要求将唯一的设备ID包含在所有请求中,存储在某些请求中,并用于过滤其他请求中的结果。 有人建议将其放在自定义HTTP标头中,因为它将包含在所有请求中,因此我开始怀疑可以使用什么标准来确定给定的数据段是否属于标头或与标头中的其他数据一起请求正文。 有没有这样的标准?

3
为什么PATCH方法不是幂等的?
我对此很纳闷。 假设我有一个user资源id和name字段。如果我想更新一个字段,我可以像这样对资源进行PATCH请求 PATCH /users/42 {"name": "john doe"} 然后应用程序将更新用户42的名称。 但是,如果我重复此请求,结果会有所不同吗? 根据RFC 5789 PATCH既不安全也不具有幂等性

4
HTTP状态代码,用于“静态处理”
我正在构建一个RESTful API,该API支持对长时间运行的任务进行排队以进行最终处理。 该API的典型工作流程为: 用户填写表格 客户端将数据发布到API API返回202已接受 客户将用户重定向到该请求的唯一URL(/results/{request_id}) 〜最终〜 客户再次访问URL,并在该页面上看到结果。 我的麻烦在于步骤6。每当用户访问该页面时,我都会向我的API(GET /api/results/{request_id})发出请求。理想情况下,该任务将在此时完成,并且我将与他们的任务结果一起返回200 OK。 但是用户很吃力,我希望在结果尚未完成处理时会进行许多过度的刷新。 我最好的状态代码指示是什么: 该请求存在, 还没有完成 但它也没有失败。 我不希望有一个代码可以传达所有这些信息,但是我希望可以让我传递元数据而不是让客户期望内容。 返回202可能是有意义的,因为在这里没有别的意思:这是一个GET请求,因此可能没有任何东西被“接受”。那是一个合理的选择吗? 所有这些的明显替代方案-起作用,但违反了状态码的一个目的-将始终包括元数据: 200 OK { status: "complete", data: { foo: "123" } } ...要么... 200 OK { status: "pending" } 然后客户端,我会(叹息)switch上response.data.status,以确定该请求是否已完成。 这是我应该做的吗?还是有更好的选择?Web 1.0对我而言是如此。
47 rest  http 

2
REST API应该如何处理对部分可修改资源的PUT请求?
假设REST API响应HTTP GET请求,在子对象中返回一些其他数据owner: { id: 'xyz', ... some other data ... owner: { name: 'Jo Bloggs', role: 'Programmer' } } 显然,我们不希望任何人能够PUT支持 { id: 'xyz', ... some other data ... owner: { name: 'Jo Bloggs', role: 'CEO' } } 并取得成功。的确,在这种情况下,我们甚至可能不会采取任何措施来实现这一目标。 但是,这个问题不仅仅涉及子对象:通常,应该对不应在PUT请求中进行修改的数据执行哪些操作? 是否应要求PUT请求中缺少它? 是否应该默默丢弃? 是否应该检查它,如果它与该属性的旧值不同,则在响应中返回HTTP错误代码? 还是我们应该使用RFC 6902 JSON补丁而不是发送整个JSON?

2
建议的“达到请求限制”的HTTP REST状态代码
我正在整理一个REST服务的规范,其中的一部分将包含在整个服务范围内以及一组资源或单个资源上限制用户的功能。同样,这些超时可以按资源/组/服务进行配置。 我只是在浏览HTTP 1.1规范,并试图决定如何与客户端通信,因为请求已达到极限,因此无法满足请求。 最初,我认为客户端代码403 - Forbidden就是这样,但从规范中可以看出: 授权将无济于事,不应重复请求 困扰着我 实际上似乎503 - Service Unavailable是一种更好的用法-因为它允许通过使用Retry-After标头来传递重试时间。 将来我可能会希望通过电子商务支持“购买”更多的请求(在这种情况下,如果客户端代码402 - Payment Required已完成,那就太好了!)-但我认为这也同样可以被压缩为503响应。 您认为我应该使用哪个?还是有我没有考虑过的另一个?

4
REST-通过Accept标头与扩展进行内容协商之间的权衡
我正在设计一个RESTful API。我们知道我们想为任何给定资源返回JSON和XML。我一直在想我们会做这样的事情: GET /api/something?param1=value1 Accept: application/xml (or application/json) 但是,有人为此使用扩展名,就像这样: GET /api/something.xml?parm1=value1 (or /api/something.json?param1=value1) 这些方法的权衡是什么?未指定扩展名时最好依靠accept标头,但在指定扩展名时依靠荣誉标头吗?这种方法有缺点吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.