HTTP 协议,请求及响应

HTTP 协议

HTTP 是一种在客户端和服务器之间编码和传输数据的方法。
它是一个请求/响应协议:客户端和服务端针对相关内容和完成状态信息的请求和响应。
HTTP 是独立的,允许请求和响应流经许多执行负载均衡,缓存,加密和压缩的中间路由器和服务器。

一个基本的 HTTP 请求由一个动词(方法)和一个资源(端点)组成。

HTTP 请求的动词

HTTP 是依赖于较低级协议(如 TCP 和 UDP)的应用层协议。

HTTP请求

发送HTTP请求的过程就是构建HTTP请求报文并通过TCP协议中发送到服务器指定端口(HTTP协议80/8080, HTTPS协议443)。

HTTP请求报文是由三部分组成:

  • 请求行
  • 请求报头 Header
  • 请求正文

请求行

格式如下:
Method Request-URL HTTP-Version CRLF
例如 GET /index.html HTTP1.1

常用的方法有: GET, POST, PUT, DELETE, OPTIONS(返回请求的资源所支持的方法), HEAD(仅请求响应首部)

请求行

请求头信息 Request Header

请求报头允许客户端向服务器传递请求的附加信息和客户端自身的信息。
客户端不一定特指浏览器,有时候也可使用Linux下的CURL命令以及HTTP客户端测试工具等。
常见的请求报头有:

  • Accept:指定客户端用于接受哪些类型的信息
  • Accept-Charset
  • Accept-Encoding:指定客户端接受的编码方式
  • Accept-Language
  • Content-Type
  • Authorization:客户端提供给服务器的认证信息
  • Cookie:每次请求时都会携带上 Cookie 以方便服务器端识别是否是同一个客户端
  • Connection:设置为 keep-alive 用于告诉客户端本次HTTP请求结束之后并不需要关闭TCP连接,这样可以使下次HTTP请求使用相同的TCP通道,节省TCP连接建立的时间
  • User-Agent:用户代理,一般情况是浏览器,也有其他类型
请求头信息 Request Header

请求正文

当使用POST, PUT等方法时,通常需要客户端向服务器传递数据。
这些数据就储存在请求正文中。在请求包头中有一些与请求正文相关的信息,例如: 现在的Web应用通常采用 Restful 架构,请求的数据格式一般为json。这时就需要设置 Content-Type: application/json

HTTP响应

HTTP响应报文也是由三部分组成:

  • 状态码
  • 响应报头
  • 响应报文

状态码

状态码是由3位数组成,第一个数字定义了响应的类别,且有五种可能取值:

  • 1xx:指示信息–表示请求已接收,继续处理
  • 2xx:成功–表示请求已被成功接收、理解、接受
  • 3xx:重定向–要完成请求必须进行更进一步的操作
  • 4xx:客户端错误–请求有语法错误或请求无法实现
  • 5xx:服务器端错误–服务器未能实现合法的请求

例如 HTTP 1.1 200 OK(即版本号 + 状态码)

服务端应答

响应报头 Response Header

响应头信息 Response Header

响应报文

服务器返回给浏览器的文本信息,通常HTML, CSS, JS, 图片等文件就放在这一部分。

HTTP header中的 Cache-control

网页的缓存是由HTTP消息头中的 Cache-control 来控制的,常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。其作用根据不同的重新浏览方式分为以下几种情况:

  • 打开新窗口
    如果指定 Cache-control 的值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。而如果指定了max-age值,那么在此值内的时间里就不会重新访问服务器,例如:Cache-control: max-age=5 表示当访问此网页后的5秒内再次访问不会去服务器。

  • 在地址栏回车
    如果指定 Cache-control 的值为private或must-revalidate,则只有第一次访问时会访问服务器,以后就不再访问。如果值为no-cache,那么每次都会访问。如果值为max-age,则在过期之前不会重复访问。

  • 按后退按扭
    如果指定 Cache-control 的值为private、must-revalidate、max-age,则不会重访问,而如果为no-cache,则每次都重复访问

  • 按刷新按扭
    无论为何值,都会重复访问

当指定Cache-control值为“no-cache”时,访问此页面不会在Internet临时文件夹留下页面备份。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,260评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 14,079评论 6 13
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 12,730评论 6 152
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 10,641评论 3 82
  • 工作流程 一次HTTP操作称为一个事务,其工作过程可分为四步: 1)首先客户机与服务器需要建立连接。只要单击某个超...
    保川阅读 10,094评论 2 14

友情链接更多精彩内容