ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【计算机网络】测试人关于HTTP的学习和梳理

2021-06-19 17:00:43  阅读:123  来源: 互联网

标签:Web HTTP 请求 报文 连接 计算机网络 响应 梳理


通过阅读《计算机网络–自顶向下方法》,以及结合最近面试的一些经历,作此笔记进行梳理和总结,也为日后的回顾作基底。

文章目录


1)什么是HTTP?

Web(全称 World Wide Web,WWW,万维网)是一个著名的 Internet(因特网)应用。

  • Internet 是一个世界范围的计算机网络,由许多小的网络(子网)互联而成的一个逻辑网,每个子网中连接着若干台计算机(主机)。
  • Web 将 Internet 从只是很多数据网之一的地位提升为仅有的一个数据网。

超文本传输协议(HyperText Transfer Protocol,HTTP)是Web 的应用层协议

  • HTTP协议工作于客户端-服务端架构上
    • HTTP由两个程序实现:客户程序、服务器程序,两者运行在不同端系统中,通过HTTP报文进行会话
    • HTTP定义了这些报文的结构以及客户和服务器进行报文交换的方式
  • HTTP协议的默认的端口号为80

1.1 HTTP的基本思想

HTTP定义了Web客户(Web client)向Web服务器(Web server)请求Web页面(Web page)的方式,以及Web服务器向Web客户传送Web页面的方式。
在这里插入图片描述

  • Web页面(Web page)

    Web页面(Web page,也叫文档)由对象组成

    • 一个对象(object)只是一个文件,且可通过一个URL地址寻址。
      • 文件可以是HTML文件、JPEG图形、Java小程序、视频片段等
    • 多数Web page中有一个HTML基本文件(base HTML file)以及几个引用对象。
      • HTML基本文件通过对象的URL地址引用页面中的其他对象
      • 每个URL地址由两个部分组成:存放对象的服务器主机名、对象的路径名

  • Web客户

    通常由Web浏览器(Web browser)实现。

  • Web服务器

    用于存储Web对象。

    • 流行的Web服务器有Apache、IIS(Microsoft Internet Information Server)

1.2 HTTP特点

  • HTTP是无状态协议(stateless protocol)

    无状态是指协议对于事务处理没有记忆能力,即HTTP协议本身不保存请求和响应之间的通信状态

    • HTTP服务器不保存关于客户的任何信息,每当有新的请求发送时,就会有对应的新响应产生。
    • 后来,通过Session、Cookie等相关技术,也能保持一些用户的状态,但协议本身还是每次都使用一个连接,依然是无状态连接。

  • HTTP具有无连接的特点:

    无连接即限制每次连接只处理一个请求

    • 服务器处理完客户的请求,并收到客户的应答后,即断开连接。
    • 采用这种方式可以节省传输时间。

*从短连接到长连接

  • HTTP/0.9:采用短连接的方式,即客户端和服务器每进行一次HTTP操作就建立一次连接,任务结束就中断连接。
    • 当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源如图像文件等,浏览器就会重新建立另外的HTTP会话。
  • HTTP/1.0:默认使用短连接,提出长连接(也叫持久连接)的概念,但当时仅提供初步的支持。
  • HTTP/1.1:默认使用长连接
    • 使用长连接的HTTP协议,会在响应头加入:Connection:keep-alive
    • 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接
    • Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间
    • 实现长连接需要客户端和服务端都支持长连接

HTTP既能使用非持续连接,也能使用持续连接:

  • 非持续连接(non-persistent connection):

    每个请求/响应对是由一个单独的TCP连接发送
    • 总的响应时间=(2*RTT+传输一个文件的时间)*请求对象的个数
    • 对于每个连接,客户和服务器都要分配TCP的缓冲区和保持TCP变量,Web服务器的负担较重
  • 持续连接(persistent connection):

    所有的请求以及响应由相同的TCP连接发送
    • 总的响应时间=2RTT+传输一个文件的时间请求对象的个数

HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接,因为短连接、长连接的实现在HTTP之外,与HTTP无关,从HTTP自身来看,HTTP依然是无连接的

  • TCP短连接长连接都由客户端发起,而TCP长连接的保活功能主要由服务器应用提供。


2)HTTP报文格式

HTTP规范([RFC1945],[RFC2616],[RFC7540])中定义了HTTP报文格式。

  • HTTP报文有两种:请求报文,响应报文。

2.1 HTTP请求报文

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header line)、空行请求数据四个部分组成,下图给出了请求报文的一般格式:
在这里插入图片描述

2.1.1 请求行(request line)

请求行包含请求方法、URL、协议版本。

  • 请求方法:

    • HTTP1.0 定义了三种请求方法: GET、POST 和 HEAD方法。
    • HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

    最常用到的是GET和POST:
    • GET:请求指定的页面信息,并返回实体主体。
    • POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。
      • 数据被包含在请求体中。
      • POST 请求可能会导致新的资源的建立和/或已有资源的修改
      • POST比GET方式的安全性要高,通过GET提交数据,用户名和密码将明文出现在URL上。

2.1.2 请求头部(header)

头部信息是自定义,其用途在于传递额外信息(浏览器信息、请求的内容类型、相应的语言)。

  • 报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。
  • Accept:客户端接受什么类型的响应。 Accept属性的值可以为一个或多个MIME类型的值(描述消息内容类型的因特网标准,消息能包含文本、图像、音频、视频以及其他应用程序专用的数据)。
  • cookie:客户端的Cookie就是通过这个报文头属性传给服务端。服务端通过jsessionid的值将客户端的多个请求与一个Session关联起来。
  • Referer:表示这个请求是从哪个URL过来的,假如你通过google搜索出一个商家的广告页面,你对这个广告页面感兴趣,鼠标一点发送一个请求报文到商家的网站,这个请求报文的Referer报文头属性值就是http://www.google.com。
  • Cache-Control:对缓存进行控制,如一个请求希望响应返回的内容在客户端要被缓存一年,或不希望被缓存就可以通过这个报文头达到目的。

2.1.3 空行以及请求体(body)

请求体可以承载多个请求参数的数据,包含回车符、换行符和请求数据,并不是所有请求都具有请求数据。

举例
在这里插入图片描述
报文体将一个页面表单中的组件值通过param1=value1&param2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。

  • 不但报文体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1&param2=value2”的方式传递请求参数。

2.2 HTTP响应报文

响应报文由响应行(respond line)、响应头部(header)、响应主体(body)三个部分组成。

在这里插入图片描述

2.2.1 响应行(respond line)

包括主要包括协议版本,状态码,状态码描述。和请求报文相比,响应报文多了一个“响应状态码”,它以“清晰明确”的语言告诉客户端本次请求的处理结果。

  • 状态码规则:

    • HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP 状态码共分为 5 种类型。
      在这里插入图片描述
  • 常见状态码:

    • 200 OK:
      200表示请求在服务器端被正常处理了。在响应报文内,随状态码一起返回的信息会因方法的不同而发生改变。
    • 204 No Content:
      204表示服务器接收的请求已经成功处理,但是在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。当浏览器在发送请求后接收到204响应,它的显示页面不会发生更新。
      • 通常应用在只需要客户端往服务端发送信息,而服务端不需要发送新信息的情况下使用。
    • 301 Moved Permanently:
      永久重定向,301状态码表示请求的资源已经分配了新的URI,以后请求该资源应该访问新的URI。也就是说,如果已经把资源对应的URI保存为书签了,这时应该按 Location 首部字段提示的 URI 重新保存
    • 302 Found
      临时重定向,302表示请求的资源已经被分配了新的URI,希望客户端本次能使用新的URI访问。和301不同的是,这种资源的URI变更是临时的,而不是永久的,因此不用去更新书签
    • 304 Not Modified:
      304 状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。例如,客户端请求的资源在客户端本地已有缓存,会在请求头部中加入“If-Modified-Since"、"If-None-Match"等字段,服务端根据这些字段信息判断这些资源信息是否经过修改,如果没有则返回 304状态码,客户端可以直接使用缓存中的资源
      • 304 状态码返回时,不包含任何响应的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有关系。
    • 400 Bad Request:
      400 状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。另外,浏览器会像 200 OK 一样对待该状态码。
    • 401 Unauthorized:
      401 状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。第一次收到 401 状态码表示需要进行用户认证,第二次再收到 401 状态码说明用户认证失败。
    • 403 Forbidden:
      403 状态码表明对请求资源的访问被服务器拒绝了,当未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源 IP
      地址试图访问)等列举的情况都可能发生 403 。
    • 404 Not Found:
      表示服务器上无法找到请求资源。此外,也可能是服务器端在拒绝请求且不想说明原因的时候使用。
    • 500 Internal Server Error:
      500 状态码表明服务器端在执行请求时发生了错误。也有可能是 Web应用存在的 bug 或某些临时的故障。
    • 503 Service Unavailable:
      503 状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

2.2.2 响应头

响应报文头也是由多个属性组成。

  • 常见的HTTP响应报文头属性:

    • Cache-Control:响应输出到客户端后,服务端通过该报文头属告诉客户端如何控制响应内容的缓存。常见的取值有private(客户端可以缓存)、public、no-cache(需要使用对比缓存来验证缓存数据)、max-age,no-store(所有内容都不会缓存),默认为private。
      • 默认为private,缓存时间为31536000秒(365天)也就是说,在365天内再次请求这条数据,都会直接获取缓存数据库中的数据,直接使用。
    • ETag:一个代表响应服务端资源(如页面)版本的报文头属性,如果某个服务端资源发生变化了,这个ETag就会相应发生变化。它是Cache-Control的有益补充,可以让客户端“更智能”地处理什么时候要从服务端取资源,什么时候可以直接从缓存中返回响应。
    • Location:这个头配合302状态码使用,用于重定向接收者到一个新URI地址。表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。
    • Set-Cookie:服务端可以设置客户端的Cookie,其原理就是通过这个响应报文头属性实现的
    • Last-Modified:文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。

2.2.3 空行和响应体

响应主体包含回车符、换行符和响应返回数据,并不是所有响应报文都有响应数据。



【部分内容参考自】

  • 《计算机网络–自顶向下方法》
  • 《图解HTTP》
  • 《HTTP权威指南》
  • 如何理解HTTP的无连接、短连接、长连接?:https://segmentfault.com/a/1190000015821798

标签:Web,HTTP,请求,报文,连接,计算机网络,响应,梳理
来源: https://blog.csdn.net/m0_37621024/article/details/118046773

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有