美文网首页
计算机网络自学笔记:HTTP协议

计算机网络自学笔记:HTTP协议

作者: 云时之间 | 来源:发表于2019-02-10 19:13 被阅读93次

    对大多数用户来说,Web服务最具有吸引力的就是Web的按需操作。当用户需要时,就能得到他想要的内容。而对于正在阅读这份文档的你来说,HTTP真的很重要,因为只要你从事计算机行业,估计就离不开它。

    1.HTTP概况

    HTTP协议由两部分程序实现:一个客户机程序和一个服务器程序,它们运行在不同的端系统中,通过交换HTTP消息进行会话。HTTP定义了浏览器和Web服务器之间的消息格式以及客户机和服务器是如何进行消息交换的。

    HTML是超文本标记语言,定义了网页的表现形式,例如字体、排版等。

    Web页面是由对象组成的。对象(object)简单来说就是文件,如HTML文件、JPEG图形文件、Java小程序或视频片段文件,这些文件可通过一个URL地址寻址。多数Web页面含有一个基本HTML文件以及几个引用对象(你看到的web页是浏览器根据HTML语法,将多个对象文件渲染而成的)。

    例如,如果一个Web页面包含HTML文本和5个JPEG图形文件,那么这个Web页面有6个对象:一个基本HTML文件加5个图片。在基本HTML文件中通过对象的URL地址对对象进行引用。在服务器磁盘中,这个HTML文件和图片是分开存放的。浏览器获得这些对象后,进行渲染,把它们组合在一起呈现给用户。

    URL地址由两部分组成:存放对象的服务器主机名和对象的路径名。

    例如,URL地址

    http://www.someschool.edu.cn/images/Department.gif

    中的http://www.someschool.edu.cn就是主机名,images/Department.gif是路径名。当用户请求一个Web页面时,浏览器向服务器发出对该页面中所有包含对象的HTTP请求消息,服务器接受请求并生成包含这些对象HTTP响应消息进行响应。

    HTTP使用TCP而不是UDP作为它的传输层协议。浏览器发起一个与服务器的TCP连接,一旦连接建立,浏览器和服务器进程就可以通过套接字接口(就是发送/接收函数调用)访问TCP。

    HTTP是无状态的。服务器向客户机发送被请求的文件时,并不存储任何关于该客户机的状态信息。假如一个特定的用户在几秒钟内多次请求同一个对象,服务器并不会因为刚刚为该用户提供了该对象就不再做出反应,而是重新发送该对象。但服务器一般会在日志文件中记录用户的访问历史。

    2.非持久连接和持久连接

    如果浏览器使用一个TCP连接向服务器请求一个Web页面对象,也就是说请求一个对象后这个连接就关闭了,就称为HTTP的非持久连接。

    如果浏览器使用一个TCP连接向服务器请求多个Web页面对象,那么称为持久连接。

    例如上面那个Web页面有6个对象,使用非持久连接,将打开6个TCP连接取回所有对象。若使用持久连接,理论上只需要一次TCP连接。

    现在的浏览器通常使用持久连接,即使选择了HTTP1.0。

    浏览器通常使用并行的TCP连接来加快Web页面的获取。例如Firefox浏览器,在其配置页面about:config中就可以方便地设置访问单个Web服务器的最大TCP连接数目。如果将最大并行连接数设置为1,这样在非持久连接中TCP连接就会以串行方式建立。

    往返时间(Round-TripTime,RTT)的定义,即一个分组从客户机到服务器再回到客户机所花费的时间。RTT包括分组传播时延、分组在中间路由器和交换机上的排队时延以及分组处理时延。

    3:HTTP消息格式

    HTTP消息有两种:请求消息和响应消息。

    •HTTP请求消息

    下面是一个典型的HTTF请求消息:

    GET/somedir/Page.htmlHTTP1.1

    Host:http://www.someschool.edu.cn

    Connection:KeepAliveUser-agent:

    Moailla/2.0

    Accept-language:fr

    Entitybody

    HTTP消息头部是用普通的ASCII文本书写的。

    HTTP请求消息的第一行叫做请求行(requestline),其后继的行叫做头部行(headerline)。

    请求行有3个字段:方法字段、URL字段和HTTP协议版本字段。

    方法字段可以取值GET、POST、HEAD、PUT和DELETE。

    当浏览器请求一个对象时,使用GET方法,在URL字段填写该对象的URL。

    首部行Host:http://www.someschool.edu.cn定义了目标所在的主机。

    通过包含Connection:KeepAlive首部行,浏览器告诉服务器希望使用持久连接。

    User-agent:首部行用来定义用户发送请求的浏览器的类型。

    最后,Accept-language:fr首部行表示用户想获的该对象的语言版本

    “实体”(entitybody)。使用GET方法时实体为空,而使用POST方法提交表单(Form,

    HTML语言的一个标签)时将表单内容放在Entitybody部分。例如,用户在使用POST方法向搜索引擎提供搜索关键词,关键词就出现在Entitybody部分。

    也可以使用GET方法向服务器提交表单,这时输入数据(表单字段值)会在请求行的URL字段进行发送。例如,一个表单使用GET方法,它有一个字段,分别填写的是test,那么得到的URL可能就是http://www.somesite.com/search?test

    HEAD方法类似于GET方法。当服务器收到使用HEAD方法的请求时,会用一个HTT'P消息进行响应,但是并不返回请求对象。应用程序开发者常用HEAD方法进行故障跟踪。

    PUT方法将对象上传到指定的Web服务器上指定的路径。DELETE方法可以删除Web服务器上的对象。

    •HTTP响应消息

    HTTP1.1200OK

    Connection:KeepAlive

    Date:Tue,09Aug201723:23:02GMT

    Server:Apache/3.0(unix)

    Last-Modified:Sun,6May201712:13:24GMTContent-Length:6821

    Con}tent-Tyge:text/html

    (data...)

    响应消息分成三个部分:初始状态行、首部行,然后是实体。

    状态行有3个字段:协议版本、状态码和相应状态信息。

    首部行中Date:首部行指示服务器产生并发送该响应消息的日期和时间。

    Last-Modified:首部行指示了对象创建或者最后修改的日期和时间。

    它对可能在客户机也可能在网络缓存服务器上的对象缓存来说非常重要。

    实体部分包含了所请求的对象。

    常见的状态码

    状态码 说明

    200 响应成功

    302 跳转,跳转地址通过响应头中Location属性指定

    400 客户端请求有语法错误,不能被服务器识别

    403 服务器接收到请求,但是拒绝提供服务(例如认证失败)

    404 请求资源不存在(✨)

    500 服务器内部错误

    首部行的使用是由浏览器和Web服务器根据HTTP协议和用户设置决定的。部分浏览器甚至有插件可以修改HTTP消息头部,例如Chrome浏览器。

    4用户与服务器的交互:cookie

    HTTP使用cookie技术使Web站点能够跟踪用户。

    cookie技术有4个组成部分:

    1 在HTTP响应消息中有一个set-cookie首部行;

    2 在HTTP请求消息中有一个cookie首部行;

    3 在用户端系统中保留有一个cookie文件,由用户的浏览器管理;

    4 在Web站点有一个后端数据库。

    假设Susan从她的家用PC机使用浏览器第一次访问Amazon。

    当请求消息到达AmazonWeb服务器时,该Web站点将产生一个唯一识别码,并以此作为索引在它的后端数据库中产生一个表项。

    接下来AmazonWeb服务器用一个包含set-cookie:首部行的HTTP响应消息对Susan的浏览器进行响应,其中set-cookie:首部行含有识别码。

    当Susan的浏览器收到了该HTTP响应消息时,它会看到该set-cookie:首部。浏览器在它管理的特定cookie文件中添加一行,其中包含该服务器的主机名和set-cookie:首部中的识别码。

    注:

    当Susan继续浏览Susan网站时,每请求一个Web页面,其浏览器就会从它的cookie文件中获取这个网站的识别码,并放到HTTP请求消息的首部行中。

    用这种方式,Amazon服务器可以跟踪Susan在该站点的活动。

    cookie常用于购物车、用户登录认证等。cookie的访问控制是用户隐私访问控制的重要组成部分,很多浏览器(IE等)都可以进行cookie访问权限的设置。

    5:Web缓存

    Web缓存(webcache)也叫代理服务器(proxyserver),可以配置用户的浏览器,使得用户的所有HTTP请求首先指向Web缓存。

    如果设置浏览器每次访问一个Web网站时都通过缓存服务器。

    浏览器会首先建立一个到Web缓存服务器的TCP连接,并向Web缓存服务器发送一个HTTP请求。

    Web缓存服务器检查本地是否存储了该对象拷贝。

    如果有,Web缓存服务器就用HTTP响应消息向客户机浏览器返回该对象。

    如果web缓存服务器没有该对象,它就与该对象的原始服务器建立TCP连接,请求该对象。

    当web缓存服务器接收该对象时,它在本地存储一份拷贝,并用HTTP响应消息向客户机的浏览器发送该拷贝。

    在因特网上部署Web缓存服务器有两个原因。首先,可以加快对客户机请求的响应时间。其次,Web缓存可以大大减少一个单位内部网与因特网接入链路上的通信量。

    条件GET方法

    HTTP协议有一种机制,ConditionalGet方法允许缓存服务器保证它的对象是最新的

    如果

    1请求消息使用GET方法。

    2请求消息中包含一个If-modified-since:首部行,那么

    这个HTTP请求消息就是一个条件GET请求消息。

    使用该条件GET消息告诉服务器,如果当自指定日期之后修改过该对象那么重新发送

    该对象,反之不需要发送。

    Etag

    Etag是服务器对象的唯一标识符,浏览器也可以根据ETag值缓存数据。

    客户机再次请求服务器时,通过If-None-Match:字段告知服务器客户端缓存数据的ETag值。

    服务器收到请求后发现头部的If-None-Match,与被请求对象的唯一标识进行比对。如果两个值不相同,说明对象已被改动,则响应此对象,反之告知浏览器可以使用其缓存。

    相关文章

      网友评论

          本文标题:计算机网络自学笔记:HTTP协议

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