http基本结构

目录

  • 一 网络层
  • 二 请求报文
    • 请求行
      • 请求方法
    • 请求头
      • 请求和响应常见通用的 Header
      • 常见的请求 Header
    • 请求体
      • 第一种:
      • 第二种:
      • 第三种
  • 三 响应报文
    • 响应状态行
      • 2XX 成功
      • 3XX 重定向
      • 4XX 客户端错误
      • 5XX 服务器错误
    • 响应头
      • 常见的响应 Header
    • 响应体
  • 四 POST和GET
  • 五 HTTP 缓存
    • 缓存相关 header
  • 参考

一 网络层

网络层
发送端在层与层间传输数据时,没经过一层都会被加上首部信息,接收端每经过一层都会删除一条首部

TCP/IP的职责
http基本结构_第1张图片

二 请求报文

请求报文是由请求方法,URL,协议版本,可选的请求首部字段和内容实体构成。
http基本结构_第2张图片

请求行

请求行(Request line)分为三个部分:请求方法、请求地址和协议版本

请求方法

HTTP/1.1 协议中共定义了九种方法(也叫“动作”)来以不同的方式操作指定的资源
http基本结构_第3张图片

请求头

请求头可用于传递一些附加信息,格式为:键: 值,注意冒号后面有一个空格

请求和响应常见通用的 Header

http基本结构_第4张图片

常见的请求 Header

http基本结构_第5张图片

请求体

根据应用场景的不同,HTTP 请求的请求体有三种不同的形式

第一种:

移动开发者常见的,请求体是任意类型的,服务器不会解析请求体,请求体的处理需要自己解析,如 POST JSON 的时候就是这类
http基本结构_第6张图片

第二种:

第二种和第三种都有固定的格式,是服务器端开发人员最先了解的两种。这里的格式要求就是 URL 中 Query String 的格式要求:多个键值对之间用&连接,键与值之间用=连接,且只能用 ASCII 字符,非 ASCII 字符需使用UrlEncode编码
http基本结构_第7张图片

第三种

第三种请求体被分成多个部分, 文件上传 时会被使用,这种格式最先是被用于邮件传输中,每个字段/文件都被 boundary(Content-Type中指定的)分成单独的,每段以--加 boundary 开头,然后是该段的描述头,描述头之后空一行接内容,请求结束的标识为boundary 后面加--

http基本结构_第8张图片
区分是否被当成文件的关键是 Content-Disposition 是否包含 filename,因为文件有不同的类型,所以还要使用 Content-Type 指示文件的类型,如果不知道是什么类型取值可以为 application/octet-stream 表示文件是一个二进制的文件,如果不是文件则 Content-Type 可以省略

三 响应报文

响应报文基本上由协议版本,状态码,用以解释状态的原因短语,可选的响应首部字段以及实体主体构成。
http基本结构_第9张图片

HTTP 响应的格式上除状态行(第一行)与请求报文的请求行不一样之外,其他的就格式而言是一样的,但排除状态行和请求行的区别,从 Header 上还是可以区分出 HTTP 请求和 HTTP 响应的区别的,怎么区别就要看前面的 Header 啦
http基本结构_第10张图片

响应状态行

2XX 成功

  • 200 OK,表示从客户端发来的请求在服务器端被正确处理
  • 204 No content,表示请求成功,但响应报文不含实体的主体部分
  • 206 Partial Content,进行范围请求

3XX 重定向

  • 301 moved permanently,永久性重定向,表示资源已被分配了新的 URL
  • 302 found,临时性重定向,表示资源临时被分配了新的 URL
  • 303 see other,表示资源存在着另一个 URL,应使用 GET 方法丁香获取资源
  • 304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况
  • 307 temporary redirect,临时重定向,和302含义相同

4XX 客户端错误

  • 400 bad request,请求报文存在语法错误
  • 401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息
  • 403 forbidden,表示对请求资源的访问被服务器拒绝
  • 404 not found,表示在服务器上没有找到请求的资源

5XX 服务器错误

  • 500 internal sever error,表示服务器端在执行请求时发生了错误
  • 503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求

响应头

响应头同样可用于传递一些附加信息
http基本结构_第11张图片

常见的响应 Header

http基本结构_第12张图片

响应体

响应体也就是网页的正文内容,一般在响应头中会用 Content-Length 来明确响应体的长度,便于浏览器接收,对于大数据量的正文信息,也会使用chunked的编码方式。

四 POST和GET

副作用指对服务器上的资源做改变,搜索是无副作用的,注册是副作用的。
幂等指发送 M 和 N 次请求(两者不相同且都大于1),服务器上资源的状态一致。注册10个和11个帐号是不幂等的,对文章进行更改10次和11次是幂等的。

  1. Get 请求能缓存,Post 不能
  2. Post 相对 Get 安全一点点,因为Get 请求都包含在 URL 里,且会被浏览器保存历史纪录,Post 不会,但是在抓包的情况下都是一样的。
  3. Post 可以通过 request body来传输比 Get 更多的数据,Get 没有这个技术
  4. URL有长度限制,会影响 Get 请求,但是这个长度限制是浏览器规定的,不是 RFC 规定的
  5. Post 支持更多的编码类型且不对数据类型限制

五 HTTP 缓存

缓存相关 header

  • Expires

响应头,代表该资源的过期时间。

  • Cache-Control

请求/响应头,缓存控制字段,精确控制缓存策略。

  • If-Modified-Since

请求头,资源最近修改时间,由浏览器告诉服务器。

  • Last-Modified

响应头,资源最近修改时间,由服务器告诉浏览器。

  • Etag

响应头,资源标识,由服务器告诉浏览器。

  • If-None-Match

请求头,缓存资源标识,由浏览器告诉服务器。

参考

  1. 面试 – 网络 HTTP
  2. 程序员都该懂点 HTTP
  3. 面试精选之http缓存
  4. HTTP 缓存

你可能感兴趣的:(计算机网络/网络编程)