HTTP协议

作者: 黑色泡沫_bccb | 来源:发表于2018-05-31 09:04 被阅读30次

    本篇文章来自简书转载,非原创,感谢种树人~。

    图片可以点击放大查看。高清图片下载地址::GitHub

    HTTP协议: 

    关键词提炼(服务器  传送超文本  到本地浏览器  的传输协议)超文本传输协议。

    是服务器传送超文本到本地浏览器的传输协议。应用层协议。 

    HTTP协议所在的协议层

    HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。 Http 对应 TCP/IP 协议层的 应用层,TCP对应 传输层、IP对应 网络层。默认HTTP的端口号为80,HTTPS的端口号为443。

    什么是协议:

    关键词提炼(通信双方的一种规定)

    协议其实就是通信双方的一种规定。在计算机领域就是大家规定好的一个标示位。比如收到一个字节,这个字节第一位表示男女,后面6位表示年龄,最后一位是校验位。

    HTTP请求格式

    客户端通过发送 HTTP 请求向服务器请求对资源的访问。 它向服务器传递了一个数据块,也就是请求信息,规范把 HTTP 请求分为三个部分:请求行、  请求头和请求正文。

    该请求的内容格式如下所示:

    请求行(请求首行)

    请求头

    信息空行

    请求体(请求正文)

    HTTP 1.1中的8种请求方式

    HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而 HTTP 中的GET,POST,PUT,DELETE就对应着对这个资源的查,增,改,删4个操作。

    HTTP响应格式

    当服务器收到客户端的请求后,会发送响应消息给客户端。一个完整的响应消息主要包括

    响应首行、

    响应头信息、

    空行

    响应正文。

    其中,每个部分都代表了不同的含义。

    HTTP请求响应模型 

    HTTP由请求和响应构成,是一个标准的客户端服务器模型(B/S)。HTTP协议永远都是客户端发起请求,服务器回送响应。见下图:

     HTTP是一个无状态的协议。无状态是指客户机(Web浏览器)和服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息.HTTP遵循请求(Request)/应答(Response)模型。客户机(浏览器)向服务器发送请求,服务器处理请求并返回适当的应答。所有HTTP连接都被构造成一套请求和应答。

    GET POST报文实例

    1 GET 可提交的数据量受到URL长度的限制,HTTP 协议规范没有对 URL 长度进行限制。这个限制是特定的浏览器及服务器对它的限制

    2 理论上讲,POST 是没有大小限制的,HTTP 协议规范也没有进行大小限制,出于安全考虑,服务器软件在实现时会做一定限制

    3 参考上面的报文示例,可以发现 GET 和 POST 数据内容是一模一样的,只是位置不同,一个在URL里,一个在 HTTP 包的包体里

    提交数据的方式

    HTTP 协议中规定 POST 提交的数据必须在 body 部分中,但是协议中没有规定数据使用哪种编码方式或者数据格式。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的 HTTP 请求满足上面的格式就可以。

    但是,数据发送出去,还要服务端解析成功才有意义。一般服务端语言如 php、python 等,以及它们的 framework,都内置了自动解析常见数据格式的功能。服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。

    application/x-www-form-urlencoded

    multipart/form-data

    HTTP工作流程

     一次HTTP操作称为一个事务,其工作整个过程如下:

    1 ) 、地址解析【应用层】

    如用客户端浏览器请求这个页面:http://localhost.com:8080/index.htm

    从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:

    协议名:http

    主机名:localhost.com

    端口:8080

    对象路径:/index.htm

    在这一步,需要域名系统DNS解析域名localhost.com,得主机的IP地址。

      2)、封装HTTP请求数据包【应用层】

         把以上部分结合本机自己的信息,封装成一个HTTP请求数据包

     3)封装成TCP包,建立TCP连接(TCP的三次握手)【传输层】

    在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。这里是8080端口

     4)客户机发送请求命令【网络层,链路层,物理层】

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

     5)服务器响应

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

            实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。

    6)服务器关闭TCP连接

     一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码

        Connection:keep-alive

    TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

    HTTP中重要的请求头和响应头字段

    GET请求为例

    (1)首先分析其请求首行:GET  / Example04?username=zhangsan&password=123 / HTTP/1.1

    GET :指的是请求方式。

    Example04?username=zhangsan&password=123 :指的是请求地址,即URL。

    HTTP/1.1 :指的是协议及版本号。

    (2)我们来分析这些请求头,理解它们的作用:

    Accept :告诉服务器当前浏览器支持的MIME类型。

    Accept-Language :告诉服务器当前浏览器支持的语言环境,这里的值是en-US,zh-CN。enà表示英文,USà表示美国,zhà表示中文,CNà表示中国。

    User-Agent :表示当前浏览器的类型和OS的类型,其中MSIE 8.0表示是ie浏览器,版本是8.0等。

    Accept-Encoding :当前浏览器支持的数据压缩格式,有时候服务器给浏览器发送的东西很大,这时候服务器就要考虑当数据被压缩后,浏览器能不能给解压出来,那么这个请求头就是浏览器告诉服务器它能够解压的格式。

    Host :浏览器请求的主机名和端口号,在这里它请求的主机是localhost,虽然后面没有显示端口号,但是你要知道这个端口号是80,它是http协议默认的端口号。

    Connection :连接的方式,Keep-Alive表示的意思是连接一会。

    Cookie :这是一个与cookie相关的请求头。

    (3)请求信息中的空行,处于请求头和请求正文之间。

    (4)以上请求信息中没有请求正文,是因为该请求方式是GET请求,而GET方式的请求信息中是没有请求正文的,POST请求有请求正文。 

    POST请求为例

    Post方式请求信息与Get方式请求信息进行比较,有以下两点区别:

    1.请求首行区别:请求参数的位置不同以上两种请求方式都是带参数的请求,POST请求首行是:POST /Example04/index.jsp HTTP/1.1,GET请求首行为: GET /Example04?username=zhangsan&password=123 HTTP/1.1,其中GET请求首行中,”?”后面的是请求参数,多个请求参数之间用”&”连接。可以看出,POST请求的请求参数并不在请求首行中。

    2.GET请求没有请求体,POST请求有请求体。从例1图可以看出,请求体的内容是从form.html页面提交过来的参数。这些参数的格式:参数名=参数值&参数名=参数值&…,get请求没有请求体,它的请求参数附加在请求首行的url后面。

    HTTP常用状态码及其含义

    作者:蜗牛快跑zzzz

    链接:https://www.jianshu.com/p/8d3ab4e718e1

    來源:简书

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

        本文标题:HTTP协议

        本文链接:https://www.haomeiwen.com/subject/phifsftx.html