• 网络相关知识——HTTP


    网络相关知识——HTTP

    1. HTTP介绍

      协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,HTTP:(Hyper Text Transfer Protocol,超文本传输协议)是基于url地址的资源请求协议。HTTP最大的作用就是确定了请求和响应数据的格式。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。浏览器发送给服务器的数据:请求报文;服务器返回给浏览器的数据:响应报文。注意:http协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。 为了解决这个问题, Web程序引入了Cookie机制来维护状态。

    1.1 IP

    定义:互联网协议地址
    作用:它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异,能唯一标识一台计算机。
    IPv4的范围:255.255.255.255
    局域网ip:192.168.x.x

    1.2 端口

    定义:port,计算机与网络交互的出口
    如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门
    端口可以有65536(即:2^16)个之多!0-65535
    作用:对外发布服务

    1.3 url地址详解

    定义:每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位符),就是指网络地址。
    格式:scheme://host[:port]/path/.../[?query-string][#anchor]

    格式说明
    scheme指定低层使用的协议(例如:http, https, ftp)
    hostHTTP服务器的IP地址或者域名,资源所在计算机(域名最终会解析为IP)
    port#资源对外发布的端口,HTTP服务器的默认端口是80,这种情况下端口号可以省略HTTPS默认端口是443。如果使用了别的端口,必须指明,例如:http://127.0.0.1:8080/
    path访问资源的路径,资源在服务器的位置(tomcat下面,其实是相对webapps的路径)
    query-string发送给http服务器的数据
    anchor跳转到网页的指定锚点位置

    举个例子:http://www.mywebsite.com/login?name=admin&password=admin#stuff

    Schema:                 http
    host:                   www.mywebsite.com
    path:                   login
    Query String:           name=admin&password=admin
    Anchor:                 stuff
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2. 报文

    2.1 http报文的组成

      HTTP通信过程包括客户端往服务器端发送请求以及服务器端给客户端返回响应两个过程。在此过程中,用于HTTP协议交互的信息就是http报文。Http报文分为请求报文返回(响应)报文

    2.2 报文中关注的信息

    • 请求:包括地址、请求状态、方式等

    • 地址:参考url地址

    • 请求状态:参考http状态码

    • 方式:post、get、put、delete等。(主要是封包和发送方式不一样)

    • 参数:需要发送给服务器的参数信息,比如登录:需要把用户名密码发送给服务器

    • 头:主要是传递身份信息和校验信息,分请求头响应头

      • 请求头:主要是用户传递的校验信息
      • 响应头:服务器告诉用户,属于你需要保存的校验信息
    • 返回体:又叫响应。主要是服务器给用户返回处理后的信息。

    2.3 请求方式

    2.3.1 HTTP协议已定义的请求方式

    HTTP1.1中共定义了八种请求方式:

    方法描述
    GET请求指定的页面信息,并返回实体主体。
    HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
    POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
    PUT从客户端向服务器传送的数据取代指定的文档的内容。
    DELETE请求服务器删除指定的页面。
    CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
    OPTIONS允许客户端查看服务器的性能。
    TRACE回显服务器收到的请求,主要用于测试或诊断。
    PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新 。
    2.3.2 GET请求

    特征1:没有请求体。
    特征2:请求参数附着在URL地址后面,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456
    特征3:请求参数在浏览器地址栏(URL)能够直接被看到,存在安全隐患。比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。
    特征4:在URL地址后面携带请求参数,数据容量非常有限(因为浏览器对URL的长度有限制)。如果数据量大,那么超出容量的数据会丢失。
    特征5:从报文角度分析,请求参数是在请求行中携带的,因为访问地址在请求行。

    2.3.3 POST请求

    特征1:有请求体。
    特征2:请求参数放在请求体中。
    特征3:请求体发送数据的空间没有限制。
    特征4:可以发送各种不同类型的数据。
    特征5:从报文角度分析,请求参数是在请求体中携带的。
    特征6:由于请求参数是放在请求体中,所以浏览器地址栏看不到。

    2.3.4 媒体类型
    2.3.4.1 HTTP协议中的MIME类型

    Multipurpose Internet Mail Extensions

    2.3.4.2 用途

      为了让用户通过浏览器和服务器端交互的过程中有更好、更丰富的体验,HTTP协议需要支持丰富的数据类型。

    2.3.4.3 MIME类型定义参考

    我们可以通过查看Tomcat解压目录下conf/web.xml配置文件,了解HTTP协议中定义的MIME类型。

    
    	mp4
    	video/mp4
    
    
    	doc
    	application/msword
    
    
    	json
    	application/json
    
    
    	html
    	text/html
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

      从上面的例子中可以看出:MIME的基本格式是大类/具体类型,MIME类型在HTTP报文中对应的是内容类型:Content-type

    2.4 https协议

      以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

    • 本质:
      本质还是http请求,只是加入了ssl加密机制

    • 区别:
      https协议需要到ca申请证书,一般免费证书很少,需要交费。
      http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
      http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
      HTTPS解决了信任主机的问题

    • 测试:
      只需要关注是否成功配置了证书,证书是否有效
      其加密与解密不需要测试。协议本身就已经是测试通过的。

    2.5 在开发者工具中浏览报文源码

    http

    3. 请求报文

    请求报文格式中分为三大部分,即请求行、请求头、请求体。
    在测试中关注四要素请求方法URL请求头请求体

    http

      使用浏览器开发者工具抓包:在网页(随便一个能交互的网页)上右键或按下F12,打开开发者工具,切换到network界面。(也可以使用Fiddler/charles抓包软件抓包)
    注意:记得勾选 preserve log

    http

    http

    http
    http

    3.1 请求行

    作用:展示当前请求的最基本信息
    POST /dynamic/target.jsp HTTP/1.1
    - 请求方式
    - 访问地址
    - HTTP协议的版本 (一般都是HTTP/1.1)

    3.2 请求消息头

    作用:通过具体的参数对本次请求进行详细的说明,包含了很多客户端需要告诉服务器的信息,比如:浏览器型号、版本,请求内容的类型、长度。
    格式:键值对,键和值之间使用冒号隔开

    3.2.1 Cache 头域
    名称功能示例
    If-Modified-Since把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中。If-Modified-Since: Thu, 09 Feb 2012 09:07:57 GMT
    If-None-MatchIf-None-MatchETag一起工作,工作原理是在HTTP Response中添加ETag信息。 当用户再次请求该资源时,将在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变(该资源没有更新),将返回一个304状态告诉客户端使用本地缓存文件。否则将返回200状态和新的资源和Etag. 使用这样的机制将提高网站的性能If-None-Match: "03f2b33c0bfcc1:0"
    Cache-Control这个用来指定Response-Request遵循的缓存机制,这个是非常重要的规则。Cache-Control:Public 可以被任何缓存所缓存,Cache-Control:Private 内容只缓存到私有缓存中,Cache-Control:no-cache 所有内容都不会被缓存
    Pragma防止页面被缓存, 在HTTP/1.1版本中,它和Cache-Control:no-cache作用一模一样。Pragma: no-cache
    3.2.2 Client 头域
    名称功能示例
    Accept声明当前请求能够接受的『媒体类型』,如果服务器无法返回规定的类型的数据,服务器应该返回一个406错误(non acceptable)。Accept: text/plain, text/html,代表浏览器可以接受服务器回发的类型为text/html,也就是我们常说的html文档。通配符* 代表任意类型,Accept: "/" 代表浏览器可以处理所有类型,一般浏览器发给服务器都是发这个
    Accept-Encoding浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate),(注意:这不是只字符编码)。Accept-Encoding: gzip, deflate
    Accept-Language浏览器申明自己接收的语言,语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等。Accept-Language: en-us
    User-Agent告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本。我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.2; .NET4.0E)
    Accept-Charset浏览器申明自己接收的字符集,这就是本文前面介绍的各种字符集和字符编码,如gb2312,utf-8(通常我们说Charset包括了相应的字符编码方案)。Accept-Charse:utf-8
    3.2.3 Cookie/Login 头域
    名称功能示例
    Cookie浏览器访问服务器时携带的Cookie数据,重要!Cookie: $Version=1; Skin=new;
    2.3.4 Entity头域
    名称功能示例
    Content-Length请求体内容(发送给HTTP服务器数据)的长度Content-Length: 348
    Content-Type请求体的内容类型,这一项的具体值是媒体类型中的某一种Content-Type: application/x-www-form-urlencoded
    2.3.5 Miscellaneous 头域
    名称功能示例
    Referer当前请求来源页面的地址,提供了Request的上下文信息的服务器,告诉服务器我是从哪个链接过来的,比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站,重要!Referer:127.0.0.1
    3.2.6 Transport 头域
    名称功能示例
    Connection设置客户端和服务器之间用于传输HTTP数据的TCP连接状态Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。 Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。
    Host服务器的主机地址,请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的,发送请求时,该报头域是必需的!我们在浏览器中输入:http://www.guet.edu.cn/index.html,浏览器发送的请求消息中,就会包含Host请求报头域:Host:http://www.guet.edu.cn,此处使用缺省端口号80,若指定了端口号,则变成:Host:指定端口号

    注意:HTTP协议是无状态的和Connection: keep-alive的区别
      无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。从另一方面讲,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系。
      HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。
      从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
      Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间

    3.3 请求体

    作用:作为请求的主体,发送数据给服务器。

    GET方式:没有请求体,有querryString

    POST方式:FromData

    3.3.1 QueryString

    http

    http

    3.3.2 Form data

    含义:当前请求体是一个表单提交的请求参数。

    http

    查看源码后,发现格式如下:

    username=admin&password=admin
    - 每一组请求参数是一个键值对
    - 键和值中间是等号
    - 键值对之间是&号

    3.3.3 Request Payload

    含义:整个请求体以某种特定格式来组织数据,例如JSON格式。

    http

    4. 响应报文

     $emsp;返回报文格式同样分为三大部分,即返回行、返回头、返回体。
    测试过程中通常关注重点返回体中的信息。

    http
    http

    http

    4.1 响应状态行

    HTTP/1.1 200 OK

    • HTTP协议版本
    • 响应状态码
    • 响应状态的说明文字

    4.2 响应消息头

    • 包含了服务器的信息;服务发送给浏览器的信息(内容的媒体类型、编码、内容长度等)。
    4.2.1 Cache头域
    名称功能示例
    Date生成消息的具体时间和日期Date: Sat, 11 Feb 2012 11:35:14 GMT
    Expires浏览器会在指定过期时间内使用本地缓存Expires: Tue, 08 Feb 2022 11:35:14 GMT
    Vary告诉代理服务器缓存两种版本的资源:压缩和非压缩,避免一些公共代理不能正确地检测Content-Encoding标头的问题Vary: Accept-Encoding
    4.2.2 Cookie/Login 头域
    名称功能示例
    P3P用于跨域设置Cookie, 这样可以解决iframe跨域访问cookie的问题P3P: CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR
    Set-Cookie用于把cookie 发送到客户端浏览器, 每一个写入cookie都会生成一个Set-Cookie非常重要的header!Set-Cookie: sc=4c31523a; path=/; domain=.acookie.taobao.com
    4.2.3 Entity头域
    名称功能示例
    ETag和If-None-Match 配合使用。(实例请看上节中If-None-Match的实例) ETag: "03f2b33c0bfcc1:0"
    Last-Modified用于指示资源的最后修改日期和时间。(实例请看上节的If-Modified-Since的实例)Last-Modified: Wed, 21 Dec 2011 09:09:10 GMT
    Content-TypeWEB服务器告诉浏览器自己响应的对象的类型和字符集Content-Type: text/html; charset=utf-8Content-Type:text/html;charset=GB2312Content-Type: image/jpeg
    Content-Length指明实体正文的长度,以字节方式存储的十进制数字来表示。在数据下行的过程中,Content-Length的方式要预先在服务器中缓存所有数据,然后所有数据再一股脑儿地发给客户端。Content-Length: 19847
    Content-EncodingWEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。Content-Encoding:gzip
    Content-LanguageWEB服务器告诉浏览器自己响应的对象的语言者Content-Language:da
    4.2.4 Miscellaneous 头域
    名称功能示例
    Server指明HTTP服务器的软件信息Server: Microsoft-IIS/7.5
    X-AspNet-Version如果网站是用ASP.NET开发的,这个header用来表示ASP.NET的版本X-AspNet-Version: 4.0.30319
    X-Powered-By表示网站是用什么技术开发的X-Powered-By: ASP.NET
    4.2.5 Transport头域
    名称功能示例
    Connection设置客户端和服务器之间用于传输HTTP数据的TCP连接状态Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。 Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。
    4.2.6 Location头域
    名称功能示例
    Location用于重定向一个新的位置, 包含新的URL地址Location: https://www.baidu.com,告诉浏览器,接下来要跳转到百度页面(也可以是自己服务器上的路径)

    4.3 响应体

    服务器返回的数据主体,有可能是各种数据类型。

    • HTML页面
    • 图片
    • 视频
    • 以下载形式返回的文件
    • CSS文件
    • JavaScript文件

    4.4 响应状态码

    作用:以编码的形式告诉浏览器当前请求处理的结果

    1XX:信息状态码
    状态码含义描述
    100继续初始的请求已经接受,请客户端继续发送剩余部分
    101切换协议请求这要求服务器切换协议,服务器已确定切换
    2XX:成功状态码
    状态码含义描述
    200成功服务器已成功处理了请求
    201已创建请求成功并且服务器创建了新的资源
    202已接受服务器已接受请求,但尚未处理
    203非授权信息服务器已成功处理请求,但返回的信息可能来自另一个来源
    204无内容服务器成功处理了请求,但没有返回任何内容
    205重置内容服务器处理成功,用户终端应重置文档视图
    206部分内容服务器成功处理了部分GET请求
    3XX:重定向状态码
    状态码含义描述
    300多种选择针对请求,服务器可执行多种操作
    301永久移动请求的页面已永久跳转到新的url
    302临时移动服务器重定向,服务器目前从不同位置的网页响应请求,但请求仍继续使用原有位置来进行以后的请求
    303查看其他位置请求者应当对不同的位置使用单独的GET请求来检索响应时,服务器返回此代码
    304未修改自从上次请求后,请求的网页未修改过
    305使用代理请求者只能使用代理访问请求的网页
    307临时重定向服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求
    4XX:客户端错误状态码
    状态码含义描述
    400错误请求服务器不理解请求的语法
    401未授权请求要求用户的身份演验证
    403禁止服务器拒绝请求(没有权限)
    404未找到服务器找不到请求的页面目录资源,(地址填错,或者文件不存在了)
    405方法禁用禁用请求中指定的方法,请求方式和服务器对应的处理方式不太一样
    406不接受无法使用请求的内容特性响应请求的页面
    407需要代理授权请求需要代理的身份认证
    408请求超时服务器等候请求时发生超时
    409冲突服务器在完成请求时发生冲突
    410已删除客户端请求的资源已经不存在
    411需要有效长度服务器不接受不含有效长度表头字段的请求
    412未满足前提条件服务器未满足请求者在请求中设置的其中一个前提条件
    413请求实体过大由于请求实体过大,服务器无法处理,因此拒绝请求
    414请求url过长请求的url过长,服务器无法处理
    415不支持格式服务器无法处理请求中附带媒体格式
    416范围无效客户端请求的范围无效
    417未满足期望服务器无法满足请求表头字段要求
    5XX:服务端内部错误状态码
    状态码含义描述
    500服务器错误服务器内部错误,无法完成请求(后台报错)
    501尚未实施服务器不具备完成请求的功能
    502错误网关服务器作为网关或代理出现错误(下游服务宕机)
    503服务不可用服务器目前无法使用
    504网关超时网关或代理服务器,未及时获取请求
    505不支持版本服务器不支持请求中使用的HTTP协议版本

    5. HTTP协议的工作流程

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

    1. 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
    2. 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
    3. 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
    4. 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
    5. 如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。
  • 相关阅读:
    IDM中下载请求两次无法下载的解决办法
    基于Python的卷积神经网络的猫狗图像识别系统
    信号与系统学习笔记——信号的分类
    Vue面试题重难点总结
    含文档+PPT+源码等]精品基于Uniapp+SSM实现的作业管理app[包运行成功]SSM毕业设计安卓项目源码
    面试中的自我激励:如何展示你的内在驱动力
    Unity WebGL 编译 报错: emcc2: error: ‘*‘ failed: [WinError 2] ϵͳ�Ҳ���ָ�����ļ���解决办法
    Vision Transformer(Vit)
    Python中__init__.py的作用介绍
    自动定量包装机机械及控制系统设计(PLC控制)
  • 原文地址:https://blog.csdn.net/weixin_45048331/article/details/127842810