zoukankan      html  css  js  c++  java
  • 关于HTTP请求报文和响应报文学习笔记

      超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层的一种通信协议。它是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到请求后,给予相应的响应。于是,HTTP协议的报文便有了两种类型,分别是HTTP请求报文和HTTP响应报文。

    一、HTTP请求报文

      HTTP请求报文的基本格式如下图(图片来源于网络)所示:

    从上图可以看到,整个请求报文主要由请求行,请求头部,空行和请求包体四个部分组成。

    1、请求行

      请求行由请求方法,URL,协议版本组成,每个部分中间用空格隔开。请求方法表示客户端希望服务器对资源进行什么操作。常见的方法主要有:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT等。下面列出一些请求方法及其含义:

    GET: 请求指定的页面信息,并返回实体主体。

    HEAD: 只请求页面的首部。

    POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。

    PUT: 从客户端向服务器传送的数据取代指定的文档的内容。

    DELETE: 请求服务器删除指定的页面。

    OPTIONS: 允许客户端查看服务器的性能。

    TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。

    PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。

    MOVE: 请求服务器将指定的页面移至另一个网络地址。

    COPY: 请求服务器将指定的页面拷贝至另一个网络地址。

    LINK: 请求服务器建立链接关系。

    UNLINK: 断开链接关系。

    WRAPPED: 允许客户端发送经过封装的请求。

    Extension-mothed:在不改动协议的前提下,可增加另外的方法。

    2、请求头部

      请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头部有:

      User-Agent:产生请求的浏览器类型;

      Accept:客户端可识别的响应内容类型列表;星号 “ * ” 用于按范围将类型分组,用 “ */* ” 指示可接受全部类型,用“ type/* ”指示可接受 type 类型的所有子类型;

      Accept-Language:客户端可接受的自然语言;

      Accept-Encoding:客户端可接受的编码压缩格式;

      Accept-Charset:可接受的应答的字符集;

      Host:请求的主机名,允许多个域名同处一个IP 地址,即虚拟主机;

      connection:连接方式(close 或 keepalive);

      Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie;

    3、空行

           最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头;

    4、请求包体

    请求包体不在 GET 方法中使用,而是在POST 方法中使用。POST 方法适用于需要客户填写表单的场合。与请求包体相关的最常使用的是包体类型 Content-Type 和包体长度 Content-Length;

    二、HTTP响应报文

    HTTP响应报文的基本格式如下图所示:

    1、状态行

      状态行:状态行由 HTTP 协议版本字段、状态码和状态码的描述文本 3 个部分组成,他们之间使用空格隔开

           状态行中比较重要的是状态码和状态码描述文本:

    (1)状态码有五类:

      1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;

      2xx:表示服务器已成功接收到请求并进行处理;

      3xx:表示服务器要求客户端重定向;

      4xx:表示客户端的请求有非法内容;

      5xx:表示服务器未能正常处理客户端的请求而出现意外错误;

    (2)状态描述符:

      200 OK:表示客户端请求成功;

      400 Bad Request:表示客户端请求有语法错误,不能被服务器所理解;

      401 Unauthonzed:表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用;

      403 Forbidden:表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因;

      404 Not Found:请求的资源不存在,例如,输入了错误的URL;

      500 Internal Server Error:表示服务器发生不可预期的错误,导致无法完成客户端的请求;

      503 Service Unavailable:表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常;

    2、响应头部

           与请求头部格式相同。可能包括以下的内容:

    (1)Location:Location响应报头域用于重定向接受者到一个新的位置。例如:客户端所请求的页面已不存在原先的位置,为了让客户端重定向到这个页面新的位置,服务器端可以发回Location响应报头后使用重定向语句,让客户端去访问新的域名所对应的服务器上的资源;

      (2)Server:Server 响应报头域包含了服务器用来处理请求的软件信息及其版本。它和 User-Agent 请求报头域是相对应的,前者发送服务器端软件的信息,后者发送客户端软件(浏览器)和操作系统的信息。

      (3)Vary:指示不可缓存的请求头列表;

      (4)Connection:连接方式;

             对于请求来说:close(告诉 WEB 服务器或者代理服务器,在完成本次请求的响应后,断开连接,不等待本次连接的后续请求了)。keepalive(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求);

             对于响应来说:close(连接已经关闭); keepalive(连接保持着,在等待本次连接的后续请求); Keep-Alive:如果浏览器请求保持连接,则该头部表明希望WEB 服务器保持连接多长时间(秒);例如:Keep-Alive:300;

      (5)WWW-Authenticate:WWW-Authenticate响应报头域必须被包含在401 (未授权的)响应消息中,这个报头域和前面讲到的Authorization 请求报头域是相关的,当客户端收到 401 响应消息,就要决定是否请求服务器对其进行验证。如果要求服务器对其进行验证,就可以发送一个包含了Authorization 报头域的请求;

    3、空行

           表示响应头部的结束,后面的信息不在是响应头部,而是响应包体的信息。

    4、响应包体

           服务器返回给客户端的响应信息

    参考资料:

    1、《HTTP权威指南》[美] David Gourley Brian Totty Marjorie Sayer Sailu Reddy Anshu Aggarwal 2012年9月第一版

  • 相关阅读:
    MysqlServer如何实现成功卸载,并成功安装
    win7安装xampp,提示windows找不到-n文件(安装成功后,443端口占用,apache服务器无法正常启动)
    (JS实现顾客商品浏览记录以及购物车)Cookie的保存与删除
    (转)SVN 服务端、客户端安装及配置、导入导出项目
    正则表达式详解
    Struts2.3.4+Hibernate4.2.4+Mysql6.0整合
    CSS中TRBL和position关系
    const typedef #define
    数组的替代品
    输入
  • 原文地址:https://www.cnblogs.com/xiongmao-cpp/p/6265407.html
Copyright © 2011-2022 走看看