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协议,目前应用还非常少
  • 相关阅读:
    linux下安装配置DHCP服务器
    CentOS7安装配置Apache HTTP Server
    CentOS7安装配置DNS服务器
    CentOS7安装配置SAMBA服务器
    小程序全局监听
    springboot+redis
    java对接微信小程序
    获取上一个页面的data
    定时器
    maven项目打包
  • 原文地址:https://www.cnblogs.com/linfeng-learning/p/12291439.html
Copyright © 2011-2022 走看看