关于http协议

 

一、HTTP协议简介


 

       Http协议又叫超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP),是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

      它是基于TCP的应用层协议,它不关心数据传输的细节,HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,只有遵循统一的 HTTP 请求格式,服务器才能正确解析不同客户端发的请求,同样地,服务器遵循统一的响应格式,客户端才得以正确解析不同网站发过来的响应。

      设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法,1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1,所有的WWW文件都必须遵守这个标准。

二、http协议的作用及特点


 

作用:规范了浏览器和服务器之间的数据交互

特点:

    1.简单快速。客户端想服务器请求服务时,只需要传送请求方法和路径。

    2.灵活。HTTP协议允许传送任意格式的数据。正在传输的类型由,content-type标明。

    3.无连接。就是每个请求都建立一个连接,请求处理完毕并发送至客户端之后就断开连接。这样明显有其缺点,就是在需要在连续发送请求时,需要为每一个请求单独的再次建立连接,很浪费时间和资源。于是在HTTP协议1.1版本之后引入了可持续连接,也就是再每一个请求处理完毕后,它不会立刻就断开连接,而是再等待一段时间,如果在此期间又有新的请求过来,那么等待时间刷新,如果没有,则等待时间完毕后,连接关闭。

   4.无状态。是指协议对事务处理没有记忆能力。也就是说,如果数据处理需要用到前面的信息,那么前面的信息还是需要重传。这样的话,如果一个请求需要用到前面的信息,就会导致要处理的数据量增大。但是如果请求不需要前面的信息,就可以实现快速应答。

三、HTTP的请求响应模型


 

HTTP协议永远都是客户端发起请求,服务器回送响应。见下图:

 

这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。

HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。

四、工作原理


 

一次HTTP操作称为一个事务,其工作过程可分为四步:

1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。

2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了

五、http协议的版本


 

HTTP/1.0,发送请求,创建一次连接,获得一个web资源,连接断开,其定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP/1.1,发送请求,创建一次连接,获得多个web资源,连接断开,在HTTP/1.0的基础上上新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

六、hhtp请求内容


 

HTTP 请求由请求行、请求头、空行、请求体组成

请求行:请求方式 + URL + 协议版本

  • 常见的请求方法有 GET、POST、PUT、DELETE、HEADOPTIONS, TRACE、C  ONNECT
  • 客户端要获取的资源路径(所谓的URL)
  • 客户端使用的 HTTP 协议版本号(目前使用的是http1.1)

请求头:客户端向服务器发送请求的补充说明

  • host:请求地址
  • User-Agent: 客户端使用的操作系统和浏览器的名称和版本.
  • Content-Length:发送给HTTP服务器数据的长度。
  • Content-Type:参数的数据类型
  • Cookie:将cookie的值发送给HTTP 服务器
  • Accept-Charset:自己接收的字符集
  • Accept-Language:浏览器自己接收的语言
  • Accept:浏览器接受的媒体类型

请求体:一般携带的请求参数

  • application/json:{"name":"value","name1":"value2”}
  • application/x-www-form-urlencoded: name1=value1&name2=value2
  • multipart/from-data:表格形式
  • text/xml
  • content-type:octets/stream

七、http响应内容


 

HTTP 响应格式与请求的格式很相似,也是由响应行、响应头、空行、响应体组成。

状态行:HTTP 版本号 + 响应状态码 + 状态说明

响应状态码有 1XX、2XX、3XX、4XX、5XX、5XX。

  • 1XX  提示信息 - 表示请求已被成功接收,继续处理 
  • 2XX  成功 - 表示请求已被成功接收
  • 3XX  重定向 - 要完成请求必须进行更进一步的处理
  • 4XX  客户端错误 -  请求有语法错误或请求无法实现
  • 5XX  服务器端错误 -   服务器未能实现合法的请求响应头
  • 响应头:响应头与请求头对应,是服务器对该响应的一些附加说明
  • 响应体:它才是真正的响应数据,这些数据其实就是网页的 HTML 源代码

八.关于http报文


 

1.http报文

它是HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分。这些报文都是在客户端、服务器和代理之间流动,它由三个部分组成:对报文进行描述的 起始行(start line)、包含属性的 首部(header) 块,以及可选的包含数据的 主体(body) 部分。

HTTP-message   = start-line

                      *( header-field CRLF )

                      CRLF

                      [ message-body ]

2.http报文分类与格式

HTTP报文都可以分为两类:请求报文(request message) 和 响应报文 (response message)。请求和响应报文的基本报文结构相同。

 

请求报文的格式:

<method> <request-URL> <version>

<headers>

<entity-body>

响应报文的格式(注意,只有起始行的语法有所不同):

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

<entity-body>

原文地址:https://www.cnblogs.com/ttg-123456/p/12180451.html