精华内容
下载资源
问答
  • 2019-05-21 11:34:01

    超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议。HTTP 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到请求后,给予相应的响应信息

      HTTP 请求报文

      HTTP 请求报文由请求行、请求头部、空行 和 请求包体 4 个部分组成,如下图所示:

    HTTP 请求报文由请求行、请求头部、空行 和 请求包体 4 个部分组成

      下面对请求报文格式进行简单的分析:

      请求行:请求行由方法字段、URL 字段 和HTTP 协议版本字段 3 个部分组成,他们之间使用空格隔开。常用的 HTTP 请求方法有 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT;

      ● GET:当客户端要从服务器中读取某个资源时,使用GET 方法。GET 方法要求服务器将URL 定位的资源放在响应报文的数据部分,回送给客户端,即向服务器请求某个资源。使用GET 方法时,请求参数和对应的值附加在 URL 后面,利用一个问号(“?”)代表URL 的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind。

      ● POST:当客户端给服务器提供信息较多时可以使用POST 方法,POST 方法向服务器提交数据,比如完成表单数据的提交,将数据提交给服务器处理。GET 一般用于获取/查询资源信息,POST 会附带用户数据,一般用于更新资源信息。POST 方法将请求参数封装在HTTP 请求数据中,以名称/值的形式出现,可以传输大量数据;

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

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

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

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

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

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

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

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

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

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

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

      HTTP 响应报文

      HTTP 响应报文由状态行、响应头部、空行 和 响应包体 4 个部分组成,如下图所示:

      下面对响应报文格式进行简单的分析:

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

      ● 状态码由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示:

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

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

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

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

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

      ● 状态码描述文本有如下取值:

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

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

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

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

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

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

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

      响应头部:响应头可能包括:

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

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

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

      Connection:连接方式;

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

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

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

      空行:最后一个响应头部之后是一个空行,发送回车符和换行符,通知服务器以下不再有响应头部。

      响应包体:服务器返回给客户端的文本信息;

      HTTP 工作原理

      HTTP 协议采用请求/响应模型。客户端向服务器发送一个请求报文,服务器以一个状态作为响应。

      以下是 HTTP 请求/响应的步骤:

      ● 客户端连接到web服务器:HTTP 客户端与web服务器建立一个 TCP 连接;

      ● 客户端向服务器发起 HTTP 请求:通过已建立的TCP 连接,客户端向服务器发送一个请求报文;

      ● 服务器接收 HTTP 请求并返回 HTTP 响应:服务器解析请求,定位请求资源,服务器将资源副本写到 TCP 连接,由客户端读取;

      ● 释放 TCP 连接:若connection 模式为close,则服务器主动关闭TCP 连接,客户端被动关闭连接,释放TCP 连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

      ● 客户端浏览器解析HTML内容:客户端将服务器响应的 html 文本解析并显示;

      例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:

      1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;

      2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立 TCP 连接;

      3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;

      4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;

      5、释放 TCP 连接;

      6、浏览器将该 html 文本并显示内容;

      HTTP 无状态性

      HTTP 协议是无状态的(stateless)。也就是说,同一个客户端第二次访问同一个服务器上的页面时,服务器无法知道这个客户端曾经访问过,服务器也无法分辨不同的客户端。HTTP 的无状态特性简化了服务器的设计,使服务器更容易支持大量并发的HTTP 请求。

      HTTP 持久连接

      HTTP1.0 使用的是非持久连接,主要缺点是客户端必须为每一个待请求的对象建立并维护一个新的连接,即每请求一个文档就要有两倍RTT 的开销。因为同一个页面可能存在多个对象,所以非持久连接可能使一个页面的下载变得十分缓慢,而且这种短连接增加了网络传输的负担。HTTP1.1 使用持久连接keepalive,所谓持久连接,就是服务器在发送响应后仍然在一段时间内保持这条连接,允许在同一个连接中存在多次数据请求和响应,即在持久连接情况下,服务器在发送完响应后并不关闭TCP 连接,而客户端可以通过这个连接继续请求其他对象。

      HTTP/1.1 协议的持久连接有两种方式:

      ● 非流水线方式:客户在收到前一个响应后才能发出下一个请求;

      ● 流水线方式:客户在收到 HTTP 的响应报文之前就能接着发送新的请求报文;

      最后给出一个具体例子:

      Remote Address:116.57.254.104:80 Request URL:http://hr.tencent.com/ Request Method:GET Status Code:200 OK Request Headers GET / HTTP/1.1 Host: hr.tencent.com Connection: keep-alive Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36 Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4 Cookie: pgv_pvi=2098703360; PHPSESSID=bc7onl0dojbsatscsfv79pds77; pgv_info=ssid=s1454606128; pgv_pvid=926725350; ts_uid=4084753309 Response Header HTTP/1.1 200 OK Server: nginx Date: Mon, 26 Jan 2015 01:09:10 GMT Content-Type: text/html;charset=utf-8 Content-Length: 3631 Connection: keep-alive X-Powered-By: PHP/5.3.10 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Vary: Accept-Encoding Content-Encoding: gzip

      从请求报文可以知道:

      GET / HTTP/1.1

      请求方法 GET 表示一个读取请求,将从服务器获得网页数据,/表示URL 的路径,URL 总是以/开头,/就表示首页,最后的HTTP/1.1 指示采用的 HTTP 协议版本是 1.1;请求域名如下所示:

      Host: hr.tencent.com

      响应报文如下:

      HTTP/1.1 200 OK

    更多相关内容
  • 四、HTTP响应报文格式

    2021-01-20 14:11:10
    一、响应报文格式 HTTP的响应报文的通用格式如下 主要包括状态行、首部行、空行和实体体,和请求报文的结构类似 示例 状态行 HTTP/1.1 200 OK\r\n 常见的状态码的类别如下 常用状态码及含义如下 ...

    一、响应报文格式

    HTTP的响应报文的通用格式如下

    主要包括状态行、首部行、空行和实体体,和请求报文的结构类似

     

    示例

    状态行

    HTTP/1.1 200 OK\r\n

    常见的状态码的类别如下

    常用状态码及含义如下

    200 OK;HTTP请求成功

    404 Not Found;服务器上不存在请求的资源

    304 Not Modified;服务器端资源未改变,可直接使用客户端未过期的缓存

     

    首部行

    Date: Fri, 08 Jan 2021 08:52:35 GMT\r\n
    <Date: Fri, 08 Jan 2021 08:52:35 GMT\r\n>

    Date字段表明创建HTTP报文的日期和时间

     

    Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.13 mod_perl/2.0.11 Perl/v5.16.3\r\n 
    <Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.13 mod_perl/2.0.11 Perl/v5.16.3\r\n>
    
    

    Server字段告知客户端当前服务器上安装的HTTP服务器应用程序的信息

    上述报文的服务器信息是centos+Apache

     

    Last-Modified: Fri, 08 Jan 2021 06:59:01 GMT\r\n
    <Last-Modified: Fri, 08 Jan 2021 06:59:01 GMT\r\n>

    首部字段Last-Modified指明资源最终修改的时间

    示意图

    ETag: "80-5b85e175214a7"\r\n

    字段ETag用来告知客户端实体标识。该标识将资源以字符串形式表示。服务器会为每份资源分配对应的ETag值。另外,当资源更新时,ETag值也需要更新。

    Etag通常和If-None-Match一起使用,当浏览器请求服务器的资源A时, 服务器根据A算出ETag返回给浏览器,浏览器把"3f80f-1b6-3e1cb03b" 和 A 同时缓存在本地。当下次再次向服务器请求A时,会通过If-None-Match把ETag发送给服务器,服务器再次计算A的哈希值并和浏览器返回的值做比较。如果发现A发生了变化,就把A返回给浏览器(200)。如果发现A没有变化,就给浏览器返回一个304未修改。这样通过控制浏览器端的缓存,可以节省服务器的带宽,因为服务器不需要每次都把全量数据返回给客户端。

    示意图

    Accept-Ranges: bytes\r\n

    Accept-Ranges用来告知客户端服务器是否能处理范围请求。可指定的字段值有两种,可处理范围请求时指定其为bytes,反之则指定其为none。

    示意图

    Content-Length: 128\r\n    
    [Content length: 128] <Content-Length: 128\r\n>

    字段Content-Length表明了实体体部分的大小,单位是字节

     

    Content-Type: text/html; charset=UTF-8\r\n 
    <Content-Type: text/html; charset=UTF-8\r\n>

    字段Content-Type说明了实体主体内对象的媒体类型。和字段Accept一样,字段值用type/subtype形式赋值。

     

    参考

    《图解HTTP》

    《计算机网络自顶向下方法》

     

    欢迎大家评论交流,作者水平有限,如有错误,欢迎指出

    展开全文
  • Http请求报文格式和响应报文格式

    千次阅读 2021-02-14 15:05:52
    HTTP请求报文格式 客户端连上服务器后,向服务器发出获取某个Web资源的消息,称之为客户端向服务器发送了一个HTTP请求。 HTTP请求报文主要由请求行、请求头部、请求正文3部分组成。例如,GET /index.html HTTP/1.1...

    HTTP请求报文格式

    客户端连上服务器后,向服务器发出获取某个Web资源的消息,称之为客户端向服务器发送了一个HTTP请求。

    HTTP请求报文主要由请求行、请求头部、请求正文3部分组成。例如,GET /index.html HTTP/1.1

     

    HTTP 请求报文由请求行、请求头部、空行 和 请求包体 4 个部分组成

    请求示例:

     

     

     

    GET请求示例:

    POST请求示例:

    tips:回车符 \r 换行符 \n

     

    请求行

    由3部分组成,分别为:请求方法、URL以及协议版本,之间由空格分隔

    请求方法包括GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE以及扩展方法,当然并不是所有的服务器都实现了所有的方法,部分方法即便支持,处于安全性的考虑也是不可用的

    URL地址中如果包含中文,浏览器会自动对中文字符进行编码之后再发送

    协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1

    GET

    请求获取Request-URI所标识的资源

    POST

    在Request-URI所标识的资源后附加新的数据

    HEAD

    请求获取由Request-URI所标识的资源的响应消息报头

    PUT

    请求服务器存储一个资源,并用Request-URI作为其标识

    DELETE

    请求服务器删除Request-URI所标识的资源

    TRACE

    请求服务器回送收到的请求信息,主要用于测试或诊断

    CONNECT

    HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器

    OPTIONS

    请求查询服务器的性能,或者查询与资源相关的选项和需求

     

    请求头部

    请求头部为请求报文添加了一些附加信息,由“键/值”对组成,每行一对,名和值之间使用冒号分隔

    常见请求头如下:

    请求头

    说明

    Host

    接受请求的服务器地址,可以是IP:端口号,也可以是域名

    User-Agent

    发送请求的应用程序名称

    Connection

    指定与连接相关的属性,如Connection:Keep-Alive 

    Accept-Charset

    通知服务端可以发送的编码格式

    Accept-Encoding

    通知服务端可以发送的数据压缩格式

    Accept-Language

    通知服务端可以发送的语言

    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8表示客户端可以接受的内容类型,多个值使用;分号隔开q=0.9 表示权重优先级,*/*表示可以接受任意类型内容
    Content-Type: application/x-www-form-urlencoded表单提交时才有可能出现,表示表单的数据类型,使用url编码,url编码 % 16位数
    Upgrade-Insecure-Requests告诉服务器,浏览器可以处理https协议

    请求头部的最后会有一个空行,表示请求头部结束,接下来为请求正文,这一行非常重要,必不可少

     

    请求正文

    可选部分,比如GET请求就没有请求正文

    POST请求体中存放的是表单提交的键值对。例如Json格式:{"name":"c","age":10}

     

     

    HTTP响应报文格式

    所谓响应其实就是服务器对请求处理的结果,或者如果浏览器请求的直接就是一个静态资源的话,响应的就是这个资源本身。

    HTTP响应报文主要由状态行、响应头部、响应正文3部分组成。

     

    在这里插入图片描述

    响应示例:

    在这里插入图片描述

     

     

    状态行

    状态行格式为:HTTP-Version Status-Code Reason-Phrase CRLF,分别为:协议版本,状态码,状态码描述,之间由空格分隔。

    其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。

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

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

    常见状态代码、状态描述的说明如下:

    状态码

    说明

    200                    

    响应成功

    301

    永久重定向,搜索引擎将删除源地址,保留重定向地址

    302

    暂时重定向,重定向地址由响应头中的Location属性指定(JSP中Forward和Redirect之间的区别

    由于搜索引擎的判定问题,较为复杂的URL容易被其它网站使用更为精简的URL及302重定向劫持

    304

    缓存文件并未过期,还可继续使用,无需再次从服务端获取

    400

    客户端请求有语法错误,不能被服务器识别

    403

    服务器接收到请求,但是拒绝提供服务(认证失败)

    404

    请求资源不存在

    500

    服务器内部错误

     

    响应头部 

    与请求头部类似,为响应报文添加了一些附加信息

    常见响应头部如下:

    响应头

    说明

    Server

    服务器应用程序软件的名称和版本

    Content-Type

    响应正文的类型(是图片还是二进制字符串)

    Content-Length

    响应正文长度

    Content-Charset

    响应正文使用的编码

    Content-Encoding

    响应正文使用的数据压缩格式

    Content-Language

    响应正文使用的语言

    Expires: -1、Cache-control:no-cache、Pragma:no-cache

    三个响应头一起使用, 表示禁止浏览器缓存当前页面.

    每个浏览器厂商对认识的禁止头不同因此三个一起使用。

    在解析请求的时候,可能遇见的Transfer-Encoding响应头,而没有Content-Length。

    Transfer-Encoding编码方式

    compress

    采用 Lempel-Ziv-Welch (LZW) 压缩算法

    deflate

    采用 zlib 结构 ( RFC 1950 中规定),和 deflate 压缩算法( RFC 1951 中规定)

    gzip

    表示采用 Lempel-Ziv coding (LZ77) 压缩算法,以及32CRC校验的编码方式

    identity

    用于指代自身(例如:未经过压缩和修改)。除非特别指明,这个标记始终可以被接受

    chunked

    数据以一系列分块的形式进行发送。 Content-Length 首部在这种情况下不被发送

     

     

     

    HTTP 工作原理

      HTTP 协议采用请求/响应模型。客户端向服务器发送一个请求报文,服务器以一个状态作为响应。

      以下是 HTTP 请求/响应的步骤:

      ● 客户端连接到web服务器:HTTP 客户端与web服务器建立一个 TCP 连接;

      ● 客户端向服务器发起 HTTP 请求:通过已建立的TCP 连接,客户端向服务器发送一个请求报文;

      ● 服务器接收 HTTP 请求并返回 HTTP 响应:服务器解析请求,定位请求资源,服务器将资源副本写到 TCP 连接,由客户端读取;

      ● 释放 TCP 连接:若connection 模式为close,则服务器主动关闭TCP 连接,客户端被动关闭连接,释放TCP 连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

      ● 客户端浏览器解析HTML内容:客户端将服务器响应的 html 文本解析并显示;

     

      例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:

      1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;

      2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立 TCP 连接;

      3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;

      4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;

      5、释放 TCP 连接;

      6、浏览器将该 html 文本并显示内容;

     

    HTTP协议的主要特点

    1. 支持C/S(客户/服务器)模式。
    2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GETHEADPOST,每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
    3. 灵活HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
    4. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    5. 无状态HTTP协议是无状态协议,无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

     

    HTTP URL 的格式: http://host[:port][abs_path]

    URL

    http://host[:port][abs_path]

    http

    表示要通过HTTP协议来定位网络资源

    host

    表示合法的Internet主机域名或IP地址

    port

    用于指定一个端口号,拥有被请求资源的服务器主机监听该端口的TCP连接(如果port是空,则使用缺省的端口80。当服务器的端口不是80的时候,需要显式指定端口号)

    abs_path

    指定请求资源的URI(Uniform Resource Identifier,统一资源定位符),如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出。通常这个工作浏览器就帮我们完成了

    PS:

    1,URI、URL和URN之间的区别

    URI全名为Uniform Resource Indentifier(统一资源标识),用来唯一的标识一个资源,是一个通用的概念,URI由两个主要的子集URL和URN组成

    URL全名为Uniform Resource Locator(统一资源定位),通过描述资源的位置来标识资源

    URN全名为Uniform Resource Name(统一资源命名),通过资源的名字来标识资源,与其所处的位置无关,这样即使资源的位置发生变动,其URN也不会变化

    HTTP规范将更通用的概念URI作为其资源标识符,但是实际上,HTTP应用程序处理的只是URI的URL子集

     

     

    参考:

    https://blog.csdn.net/a19881029/article/details/14002273

    https://www.cnblogs.com/CodingUniversal/p/7524088.html

    https://zhuanlan.zhihu.com/p/135864492

    https://blog.csdn.net/xmxt668/article/details/89461183

    展开全文
  • HTTP协议原理及请求、响应报文格式

    千次阅读 2018-06-12 11:11:39
    前言HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。HTTP协议的主要特点支持C/S(客户/服务器)模式。...

    前言

    HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。


    HTTP协议的主要特点

    1. 支持C/S(客户/服务器)模式。
    2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST,每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
    3. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
    4. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    5. 无状态:HTTP协议是无状态协议,无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。


    HTTP URL 的格式: http://host[:port][abs_path]

    URLhttp://host[:port][abs_path]
    http表示要通过HTTP协议来定位网络资源
    host表示合法的Internet主机域名或IP地址
    port用于指定一个端口号,拥有被请求资源的服务器主机监听该端口的TCP连接(如果port是空,则使用缺省的端口80。当服务器的端口不是80的时候,需要显式指定端口号)
    abs_path指定请求资源的URI(Uniform Resource Identifier,统一资源定位符),如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出。通常这个工作浏览器就帮我们完成了


    HTTP请求、响应报文格式:


        (1).HTTP请求报文格式:

            HTTP请求报文主要由请求行、请求头部、请求数据3部分组成

    1,请求行

    由3部分组成,分别为:请求方法、URL、以及协议版本,之间由空格分隔,格式如下:

    Method Request-URL   HTTP-Version    CRLF




    1.其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行注:除了作

    为结尾的CRLF外,不允许出现单独的CR或LF字符)。


    2.协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1


    请求方法包括GET、POST、DELETE、PUT、HEAD、TRACE、CONNECT 、OPTIONS。其中PUT、DELETE、POST、GET分别对应着增删改查,对于移动开发最常用的就是POST和GET了。


    请求方法说明
    GET请求获取Request-URI所标识的资源
    POST在Request-URI所标识的资源后附加新的数据
    HEAD请求获取由Request-URI所标识的资源的响应消息报头
    PUT请求服务器存储一个资源,并用Request-URI作为其标识
    DELETE请求服务器删除Request-URI所标识的资源
    TRACE请求服务器回送收到的请求信息,主要用于测试或诊断
    CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
    OPTIONS请求查询服务器的性能,或者查询与资源相关的选项和需求


    2,请求头部

    请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔

    请求头解释
    Host接受请求的服务地址,可以是IP:端口号,也可以是域名
    Connection指定与连接的相关属性:Keep-Alive
    Accept-Encoding通知服务端可以发送的数据压缩格式
    User-Agent发送请求的应用程序名
    Accept-Language通知服务端可以发送的语言
    Accept-Charset通知服务端可以发送的编码格式
    例图:
     


    3,请求数据



    HTTP响应报文格式:


    HTTP响应报文主要由状态行、响应头部、响应正文3部分组成。状态行格式如下:

    状态行
    HTTP-Version Status-Code Reason-Phrase CRLF

    其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。

    状态代码有三位数字组成,

        100~199指示信息,表示请求已接收,继续处理

    200-299的状态码表示成功
    300-399的状态码指资源重定向
    400-499的状态码指客户端请求出错
    500-599的状态码指服务端出错(HTTP/1.1向协议中引入了信息性状态码,范围为100~199


    常见的状态码
    200 OK客户端请求成功
    400 Bad Request客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
    403 Forbidden服务器收到请求,但是拒绝提供服务(认证失败)
    404请求资源不存在
    500 Internal Server Error服务器发生不可预期的错误


    2,响应头部




    响应头解释
    Server服务器应用程序软件的名称和版本
    Content-Type发送给接收者的实体正文的媒体类型
    Accept-Language描述资源所用的自然语言,没有设置则该选项则认为实体内容将提供给所有的语言阅读
    Content-Lenght实体正文的长度


    如上,在解析请求的时候,可能遇见的Transfer-Encoding响应头,而没有Content-Length。
    Transfer-Encoding编码方式
    compress采用 Lempel-Ziv-Welch (LZW) 压缩算法
    deflate采用 zlib 结构 (在 RFC 1950 中规定),和 deflate 压缩算法(在 RFC 1951 中规定)
    gzip表示采用 Lempel-Ziv coding (LZ77) 压缩算法,以及32位CRC校验的编码方式
    identity用于指代自身(例如:未经过压缩和修改)。除非特别指明,这个标记始终可以被接受
    chunked数据以一系列分块的形式进行发送。 Content-Length 首部在这种情况下不被发送


    展开全文
  • HTTP请求报文格式: HTTP请求报文主要由请求行、请求头部、请求正文3部分组成 1,请求行 由3部分组成,分别为:请求方法、URL(见备注1)以及协议版本,之间由空格分隔 请求方法包括GET、HEAD、PUT、POST、TRACE、...
  • 二、HTTP响应报文格式: HTTP的响应报文内容包括:   状态行、响应头、空行、数据(响应体)四个部分组成。 状态行主要包括:协议版本、状态码、状态值 响应头主要包括:各类配置信息的key-value值 三、响应报文
  • HTTP报文格式详解

    千次阅读 2021-10-18 21:53:37
    HTTP报文格式
  • HTTP报文格式

    2021-07-10 08:41:05
    在前面的文章中我们提到,HTTP报文格式有两种类型,分别为请求报文和响应报文。 请求报文是客户端发送给服务器端的,而响应报文是服务器端发送给客户端的。本篇内容就是介绍一下这两类报文的格式。 二、HTTP请求报文...
  • HTTP 工作原理 超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议。...客户端向服务器发送一个请求报文,服务器以一个状态作为响应。 以下是 HTTP 请求/响应的流程: 客户...
  • 文章目录报文结构HTTP 请求报文的请求行请求方法GET/HEADPOST/PUT其他方法URIURI 的格式URI 的编码HTTP 响应报文的状态行状态码HTTP 请求、响应头部字段 HTTP 协议再规范文档里详细定义了报文的格式,规定了组成部分...
  • 请求报文结构: 1. 请求行 : 【请求行】:方法 [空格] 请求url [空格] HTTP/版本号 回车符 换行符 例:POST http://192.168.2.217:8080/index.jsp HTTP/1.1 2. 请求头 【请求头】头部字段名称 冒号 值 回车符 换行符...
  • 剖析 HTTP 响应报文

    2022-03-17 10:33:46
    1、HTTP 响应报文格式 HTTP/1.1 200 OK Bdpagetype: 1 Bdqid: 0xf3c9743300024ee4 Cache-Control: private Connection: keep-alive Content-Encoding: gzip Content-Type: text/html;charset=utf-8 Date: Fri, 26 ...
  • 请求报文格式 HTTP 请求报文由请求行、请求头部、空行 和 请求包体 4 个部分组成,如下图所示: 请求行:请求行由方法字段、URL 字段 和HTTP 协议版本字段 3 个部分组成,他们之间使用空格隔开。常用的 HTTP ...
  • 报文流 HTTP报文是在HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的元信息(meta-information)开头。 ...报文分为请求报文和响应报文 请求报文的格式: <method> <re...
  • 文章目录HTTP请求报文和响应报文格式【1】请求报文 HTTP请求报文和响应报文格式 【1】请求报文 请求报文包含四个部分: 请求行:包含HTTP版本号、请求方法、URI…… 请求首部字段 请求内容实体 空行 响应报文包含...
  • HTTP请求报文格式:HTTP请求报文主要由请求行、请求头部、请求正文3部分组成1,请求行由3部分组成,分别为:请求方法、URL(见备注1)以及协议版本,之间由空格分隔请求方法包括GET、HEAD、PUT、POST、TRACE、OPTIONS...
  • 作用: 浏览器和web 服务器之间传输网页资源的协议格式 HTTP底层是基于 TCP 协议实现的, 导致浏览器和服务器之间传输资源之前需要建立连接 HTTP 协议是明文传输, HTTPS 是基于 HTTP 协议的安全通信方式< 密钥交互,...
  • HTTP报文结构 HTTP有两类报文: 请求报文-------从客户向服务器发送请求报文,如图6-12(a) 响应报文-------从服务器到客户的回答,如...两种报文格式区别是开始行不同。 开始行,用于区分是请求报文还是响应报...
  • 目录HTTP报文请求报文响应报文HTTP状态码HTTP状态码分类使用Chrome网络控制台查看通信报文 HTTP报文 HTTP报文是HTTP协议交互时所规定请求和响应的规则。请求端(客户端)向响应端(服务器端)请求的发送的信息叫做...
  • HTTP有两类报文:请求报文和响应报文。 请求报文和响应报文都由三部分组成:起始行、首部、主体。 HTTP请求报文 格式: <method> <request-URL> <version> <headers> <entity-body...
  • 1. HTTP 请求报文介绍 HTTP最常见的请求报文有两种: GET 方式的请求报文 POST 方式的请求报文 说明: GET: 获取web服务器数据 POST: 向web服务器提交数据 2. HTTP GET 请求报文分析 HTTP GET 请求报文效果图: ...
  • 一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。 英文: 1.请求头 请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段...
  • 请求端(客户端)的http报文叫做请求报文,响应端(服务端)的叫做响应报文http报文本身是由多行数据构成的字符串文本。http报文大致可分为报文首部和报文主体两块。两者由最初出现的空行来划分。通常,并不一定要...
  • HTTP协议请求响应报文相关介绍

    千次阅读 2022-04-04 18:19:38
    1.2Http协议是基于TCP之上的,当浏览器须要从server获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到server的连接通道。当本次请求须要的数据完成后,Http会马上将TCP连接断开,这个过程是非常短...
  • HTTP请求报文格式: HTTP请求报文主要由请求行、请求头部、请求正文3部分组成 1,请求行 由3部分组成,分别为:请求方法、URL(见备注1)以及协议版本,之间由空格分隔 请求方法包括GET、HEAD、PUT、POST、...
  • HTTP基础:响应报文

    千次阅读 2019-03-31 17:36:40
    HTTP响应报文(Response)的结构与request的结构基本一致:由状态行、响应头部、空行和响应包体(主体)4个部分组成,如下图所示: 注:header和body之间也有个空行 响应报文headers属性 同样适用Fiddler查看...
  • 详讲OneNET HTTP请求、响应报文格式

    千次阅读 2019-08-19 15:48:42
    在我之前的一篇博客:基于RT-Thread的AT device实现ESP8266 通过socket对接OneNET进行POST和GET 中,使用了RT-Thread的AT device...本章将着重讲解如果使用socket来分装HTTP协议的POST和GET。 一、socket的常用接...
  • http 报文格式、状态码

    千次阅读 2022-02-03 16:30:53
    HTTP 报文格式 HTTP 报文由请求行、首部、实体组成,首部和实体之间由 CRLF(回车换行符) 分隔开。 请求报文格式: <method> <request-URL> <version> <headers> <entity-body> ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,646
精华内容 26,658
关键字:

http响应报文格式