• HTTP 基础


    由于 Controller 基本上是业务开发中唯一和 HTTP 协议打交道的地方,在继续往下了解之前,我们首先简单的看一下 HTTP 协议是怎样的。

    如果我们发起一个 HTTP 请求来访问前面例子中提到的 Controller:

    curl -X POST http://localhost:3000/api/posts --data '{"title":"controller", "content": "what is controller"}' --header 'Content-Type:application/json; charset=UTF-8'

    通过 curl 发出的 HTTP 请求的内容就会是下面这样的:

    POST /api/posts HTTP/1.1
    Host: localhost:3000
    Content-Type: application/json; charset=UTF-8

    {"title": "controller", "content": "what is controller"}

    请求的第一行包含了三个信息,我们比较常用的是前面两个:

    • method:这个请求中 method 的值是 POST
    • path:值为 /api/posts,如果用户的请求中包含 query,也会在这里出现

    从第二行开始直到遇到的第一个空行位置,都是请求的 Headers 部分,这一部分中有许多常用的属性,包括这里看到的 Host,Content-Type,还有 CookieUser-Agent 等等。在这个请求中有两个头:

    • Host:我们在浏览器发起请求的时候,域名会用来通过 DNS 解析找到服务的 IP 地址,但是浏览器也会将域名和端口号放在 Host 头中一并发送给服务端。
    • Content-Type:当我们的请求有 body 的时候,都会有 Content-Type 来标明我们的请求体是什么格式的。

    之后的内容全部都是请求的 body,当请求是 POST, PUT, DELETE 等方法的时候,可以带上请求体,服务端会根据 Content-Type 来解析请求体。

    在服务端处理完这个请求后,会发送一个 HTTP 响应给客户端

    HTTP/1.1 201 Created
    Content-Type: application/json; charset=utf-8
    Content-Length: 8
    Date: Mon, 09 Jan 2017 08:40:28 GMT
    Connection: keep-alive

    {"id": 1}

    第一行中也包含了三段,其中我们常用的主要是响应状态码,这个例子中它的值是 201,它的含义是在服务端成功创建了一条资源。

    和请求一样,从第二行开始到下一个空行之间都是响应头,这里的 Content-Type, Content-Length 表示这个响应的格式是 JSON,长度为 8 个字节。

    最后剩下的部分就是这次响应真正的内容。

  • 相关阅读:
    openldap---ldapsearch使用
    自旋锁与相互排斥锁之抉择
    探索Android中的Parcel机制(上)
    我的Android开发相关文章
    SoftReference
    Windows7WithSP1/TeamFoundationServer2012update4/SQLServer2012
    机器学习中规则化和模型选择知识
    Java中System的详细用法
    Java中System的详细用法
    Java中System的详细用法
  • 原文地址:https://www.cnblogs.com/cangqinglang/p/11422713.html
Copyright © 2020-2023  润新知