http报文(http详解笔记)

* 报文的格式

* 请求报文

<method> <request-URL> <version>
<headers>

<entity-body>

* 响应报文

<version> <status> <reason-phrase>
<headers>

<entity-body>

* 方法(method)

客户端希望服务器对资源执行的动作

1. GET:请求服务器发送某个资源
2. HEAD 获取文档的首部

作用:
1、在不获取资源的情况下了解资源的情况(比如,判断其类型)
2、通过查看响应中的状态码,查看对象是否存在
3、通过查看首部,测试资源是否被修改了

  1. POST
  2. PUT 让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档,或者,如果那个文档URL已经存在的话,就用这个主体替代它。
  3. TRACE
    1、对可能经过代理服务器传送到服务器上去的报文进行追踪
    2、TRACE请求会在目的服务器端发起一个“环回”诊断。也就是说验证请求是否如愿穿过了请求/响应链。它是一3、种很好的工具,可以用来查看代理和其他应用程序对用户请求所产生的效果
    4、TRACE请求中不能带有实体的主体部分。TRACE响应的实体主体部分包含了响应服务器收到的请求的精确副本。
  4. OPTIONS
    1、决定可以在服务器上执行哪些方法
    2、OPTIONS方法请求web服务器告知其支持的各种功能
  5. DELETE
    1、请服务器删除请求URL所指定的资源

    • 请求URL(request-URL)

命名了请求的资源路径

* 版本(version)

1. 报文所使用的http版本
2. http/<major>.<minor>
3. 版本号不会当做小数来处理, http/2.22比http/2.3版本要高
4. 使用版本号的目的是为使用http的应用程序提供一种线索,以便了解对方的能力和报文格式

* 状态码(status)

1. 100-199:信息性状态码

1、100->continue:它的目的是对这样的情况进行优化:http客户端应用程序有一个实体的主体部分要发送给服务器,但希望在发送之前查看一下服务器是否接受这个实体。

  1. 200-299:成功状态码
    1、200-> 0k:请求没有问题
    2、201-> created:用于创建服务器对象的请求(比如,put)。响应的实体主体部分中应该包含各种引用了已创建的资源的URL,location首部包含的则是最具体的引用。
    3、204-> No Content 响应报文中包含若干首部和一个状态行,但没有实体的主体部分。主要用于在浏览器不转为显示新文档的情况下,对其进行更新
    4、206-> Partial Content:成功执行了一个部分或range(范围)请求。
  2. 300-399:重定向状态码
    1、重定向状态码要么告知客户端使用替代位置来访问他们所感兴趣的资源,要么提供一个替代的响应而不是资源的内容。如果资源已被移动,可发送一个重定向状态码和一个可选的location首部来告知客户端资源已被移走,以及现在可以在哪找到它。这样,浏览器就可以不再打扰使用者的情况下,透明地转入新的位置了。
    2、300->MUltiple Choices:客户端请求指向了多个资源的URL时会返回这个状态码,比如同时有双语版本的HTML文档
    3、301 -> Moved Permanently:在请求的URL已被移除时使用。响应的location首部中应该包含资源现在所处的URL。
    4、302 -> Found: 与301类似,但是,客户端应该使用location给出的URL来定义临时定位资源。将来的请求仍然使用老的URL。当http/1.0客户端发起一个POST请求,并在响应中收到302重定向状态码时,它会接受Location首部的重定向URL,并向那个URL发起一个GET请求(而不像原始那样发送POST请求)
    5、303 -> see other
    6、 307 -> Temporary Redirect: //303与307类似,主要是解决HTTP/1.1规范的问题
    7、304 -> Not Modified: 客户端通过所包含的请求首部,是其请求变成有条件。如果请求的资源最近未修改的话,就可以用这个状态码来说明资源未被修改。带有这个状态码的响应不应该包含实体的主体部分。
  3. 400-499:客户端错误状态码
    1、404 -> Not found: 服务器无法找到所请求的URL。通常会包含一个实体,以便用户查看
    2、400 -> Bad Request: 用于告知客户端它发送了一个错误的请求
    3、401 -> Unauthorized : 与适当的首部一同返回,在这些首部中请求客户端在获取对资源的访问之前,对自己进行认证。
    4、 403 -> Forbidden:请求被服务器拒绝
    5、 405 -> Method Not Allowed: 发起的请求中带有所请求的URL不支持的方法时,使用此状态码。应该在响应中包含Allow首部。以告知客户端可以使用那些方法。
    6、 406 -> Not Acceptable : 客户端可以指定参数来说明他们愿意接受什么类型的实体。服务器没有与客户端可接受的URL相匹配的资源时,使用该状态码。
    7、 407 -> Proxy Authentiction:与401类似, 但用于要求对资源进行认证的是代理服务器
    8、 408 -> Request Timeout : 如果客户端完成请求(在建立客户端(如您的浏览器)和服务器之间 IP 连接(套解字 – socket ),通过该套解字收到数据,之间的时间间隔太长)所发的时间太长,服务器返回该状态码
  4. 500-599 服务器出错
    1、 502 -> Bad Gateway: 作为代理或者网关使用的服务器从请求响应链的下一条链路上收到了一条伪响应时,使用该状态码
    2、 504 -> Gateway Timeout : 响应来自一个网关或者代理,他们在等待另一台服务器对其请求进行响应时超时了!
    3、 503 -> Service Unaviailable: 服务器现在无法提供服务,但将来可以。

    • 原因短语(reason-phrase)

数字状态码的可读版本

* 首部(header)

1. 首部是由一个空行(CRLF)结束的,表示受不列表的结束和实体主体部分的开始
2. 首部分类:

    1. 通用首部(既可以出现在请求报文中,也可以出现在响应报文中)

1、date: 说明报文是什么时间创建的

  1. 请求报文(提供更多有关请求的信息,用于说明是谁或者什么在发送请求,请求源自何处,或者客户端的喜好及能力)
    1、说明请求者的首部:
    1、client-ip
    2、 from : 客户端用户的email
    3、 Host
    4、 user-Agent
    2、 Accept首部
    1、Accept首部为客户端提供了一种将其喜欢好和能力告知服务器的方式,包括他们想要什么,可以使用什么,以及最重要的,他们不想要什么
    2、Accept:告诉服务器能够发送哪些媒体类型
    3、Accept-Charset: 告诉服务器能够发送那些字符集
    4、Accept-Encoding:。。。。。。。编码方式
    5、 Accept-Language: 那些语言
    3、 条件请求首部
    1、有时客户端希望为请求加上某些限制,比如,如果客户端已经有了一份文档副本,就希望只在服务器上的文档与客户端文档有区别时, 才传输。通过条件请求首部,客户端就可以为请求加上这种现实。
    2、 expect:允许客户端列出某请求所要求的服务器行为:比如100 continue
    3、 if -Match : 如果实体标记与文档当前的实体标记向匹配,就获取
    4、 if-Modified-Since
    5、 if-none-match
    6、 if-Range: 允许对文档的某个范围进行条件请求
    7、 if-unModified-Since
    8、 Range:范围请求
    4、 安全请求首部:进行质询/响应认证(机制)
    1、Authorization:包含了客户端供给服务端,以便对其进行认证的数据
    2、 cookie: 客户端用它向服务器传送一个令牌。
  2. 响应报文(提供响应的信息)
    1、响应的信息性首部:
    1、Age:响应持续的事假
    2、 Public: 服务器为其资源支持的请求方法列表
    3、 Retry-After: 如果资源不可用的话,在此日期或时间重试
    4、Server
    5、 Title: 文档标题
    2、 协商首部
    1、 Accept-Ranges:
    2、 Vary:挑选最适合的内容给客户端
  3. 实体首部(描述主体的长度和内容,或者资源自身。总之,实体首部可以告知报文接受者它在对什么进行处理)
    1、实体的信息性首部:
    1、Allow:列出了可以对此实体执行的请求方法
    2、Location:告知客户端实体实际位于何处,用于将接收端定向到资源的URL上去。
    2、内容首部
    1、content-Base
    2、 content-Encoding
    3、 content-Type
    4、 content-length

    3、 实体缓存首部:通用的缓存首部说明了如何或什么时候进行缓存。实体的缓存首部提供了与被缓存实体有关的信息。
    1、Etag:与此实体相关的实体标记
    2、 Expires: 过期时间
    3、 last-Modified: 最后修改时间
  4. 扩展首部(规则总没有定义的新首部)

    • 实体的主体部分(entity-body)

实体主体是http报文的负荷,就是http要传输的内容

点赞