zoukankan      html  css  js  c++  java
  • HTTP解析

    1.HTTP概述

    1.1 简介

    • HTTP(Hyper Text Transfer Protocol),超文本传输协议,用于从万维网(www)传输超文本到本地浏览器的传送协议。
    • HTTP是一种应用层协议,承载于传输层协议之上,一般为TCP/IP。

    P.S.:

    HTTP 协议中没有加密机制,但可以通 过和 SSL(Secure Socket Layer, 安全套接层 )或 TLS(Transport Layer Security, 安全层传输协议)的组合使用,加密 HTTP 的通信内容。属于通信加密,即在整个通信线路中加密。

    HTTP + 加密 + 认证 + 完整性保护 = HTTPS(HTTP Secure )

    1.2 特点

    • 简单快速:HTTP机制简单,程序规模小,通信速度快。
    • 媒体独立:只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。
    • 无连接:HTTP限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。从而可以节省传输时间。
    • 无状态:HTTP协议是无状态协议,即对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。而当服务器不需要先前信息时,它的应答就较快。

    2. HTTP工作机制

    HTTP的工作机制由请求和响应构成,是一个标准的客户端/服务器(C/S)模型。

      HTTP的基本工作流程如下:

    (1)建立TCP连接:客户端与服务器建立TCP套接字连接。

    (2)发送HTTP请求:客户端TCP套接字向服务器发送请求报文。

    (3)服务器接受请求并返回HTTP响应:服务器解析请求,定位请求资源,并把资源数据写入TCP套接字,由客户端读取。

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

    3.HTTP解析

    3.1 URI与URL

    (1)URI与URL简介

    • URI(uniform resource identifier),统一资源标识符,用来唯一的标识一个资源。
    • URL(uniform resource locator),统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。

    (2)URL格式

    互联网通过URL来标识某一资源的地址,HTTP通过URL来获取指定的资源数据。

      URL格式:protocol :// hostname[:port] / path / [;parameters][?query][#fragment]

    • protocol:传输协议
    • hostname:存放资源的服务器的域名或 IP 地址。
    • port:端口号。可选,省略时使用方案的默认端口,HTTP默认为80。
    • path:文件路径。
    • parameters:用于指定特殊参数。可选
    • query:用于给动态网页传递参数。可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。可选。
    • fragment:信息片段,用于指定网络资源中的片段。可选。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。

    3.2 HTTP请求消息结构

    客户端通过发送HTTP请求消息向服务器请求资源的访问。HTTP请求由三部分组成:请求行、请求报头、空行、请求正文。

    (1)请求行

    请求行用来说明请求方法,要访问的资源以及所使用的HTTP版本。

    请求行格式: Method  Request-URI  HTTP-VersionCRLF(以空格为间隔)

    • Method :请求方法
    • Request-URI:指定要访问资源的地址
    • HTTP-Version:HTTP版本
    • CRLF:换行符

    (2)请求报头

    请求报头用来说明服务器要使用的附加信息、或者客户端自身的信息。服务器可以根据请求报头为客户端提供更好的响应。

    请求报头格式:属性名:[空格]内容。

    (3)空行

    空行表示请求报头结束

    (4)请求正文

    只有在发送POST请求时才会有请求正文,GET方法并没有请求正文。

    3.3 HTTP响应消息结构

    服务器接收并处理客户端发过来的请求后,会返回一个HTTP的响应消息。HTTP响应消息也由四个部分组成:状态行、响应报头、空行、响应正文。

     (1)状态行

    状态行用来描述服务器对HTTP请求消息的处理结果。

    状态行格式:HTTP-Version  Status-Code  Reason-PhraseCRLF(以空格为间隔)

    • HTTP-Version:HTTP版本
    • Status-Code:状态码,用以表示HTTP请求消息的处理状态
    • Reason-Phrase:短文,用以描述HTTP请求消息的处理状态

    状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别。

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

    常用的状态码:

    (2)响应报头

    响应报头为客户端提供一些额外的信息,有助于客户端处理响应,并在将来发起更好的请求。

    响应报头格式:属性名:[空格]内容。

    (3)空行

    空行表示响应报头结束。

    (4)响应正文

    响应正文服务器返回给客户端的数据信息。

    4. HTTP请求方法

    (1)请求方法

    HTTP/1.1协议中共定义了八种方法,以不同方式操作指定的资源。

    GET

    向服务器请求指定的资源数据,并由服务器返回实体主体。

    HEAD 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头。使用这个方法可以在不必传输全部内容的情况下,就可以获取其中关于该资源的信息。
    POST 向指定资源位置提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求消息。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
    PUT 向指定资源位置上传其最新内容。
    DELETE 请求服务器删除Request-URI所标识的资源。
    CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
    OPTIONS 该方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
    TRACE 回显服务器收到的请求,主要用于测试或诊断。

    GET与POST的区别:

    • GET是从服务器上获取数据,POST是向服务器传送数据。
    • GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连。 POST方法是把提交的数据放在HTTP包的请求体中。
    • GET传送的数据量较小,一般不能大于2KB。POST传送的数据量较大,一般被默认为不受限制。文件传输一般用POST。
    • GET安全性非常低,POST安全性稍微高点。但是如果没有加密的话,它们安全级别都是一样的,随便一个监听器都可以把所有的数据监听到。

    (2)注意事项

    • HTTP请求方法是区分大小写的。
    • HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。特定的HTTP服务器还能够扩展自定义的方法。

    5. HTTP历史版本

    HTTP0.9 HTTP1.0 HTTP1.1(当前应用最广泛) HTTP2.0
    • 只支持GET请求方法
    • 不支持请求/响应头
    • 只支持文本传输
    • 只支持短连接
    • 支持GET、HEAD、POST方法
    • 支持请求/响应头
    • 支持对象不限于超文本
    • 支持长连接、缓存机制、身份认证
    • 支持多种请求方法
    • 支持请求/响应头
    • 支持对象不限于超文本
    • 支持长连接、编码传输、请求流水线
    • http 2.0是下一代http协议,目前应用还非常少
  • 相关阅读:
    26 转义符 re模块 方法 random模块 collection模块的Counter方法
    25 正则表达式
    24 from 模块 import 名字
    24 from 模块 import 名字
    24 from 模块 import 名字
    23 析构方法 items系列 hash方法 eq方法
    21 isinstance issubclass 反射 _str_ _new_ _len_ _call_
    20 属性, 类方法, 静态方法. python2与python3的区别.
    python(1)
    python之字符串格式化
  • 原文地址:https://www.cnblogs.com/linfeng-learning/p/12291439.html
Copyright © 2011-2022 走看看