【计算机网络】HTTP协议知识点总结

文章目录

    • OSI七层模型
    • 网址和URL
    • HTTP的报文格式
      • HTTP请求报文
        • GET和POST的区别
          • 为什么get比post快?
          • get传参最大长度的理解误区
        • HTTP协议的8种请求类型
      • HTTP响应报文
        • HTTP状态码
        • HTTP用的什么连接?
      • HTTP和HTTPS区别
      • HTTPS中SSL层原理
      • HTTP 工作原理
      • 请你说说soket编程和HTTP协议
      • 请你说一说http缓存问题,缓存寿命,以及怎么判断文件在服务器是否更改的
      • http为什么是无状态的?
    • HTTP协议cookie和session有什么区别

OSI七层模型

OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)。
【计算机网络】HTTP协议知识点总结_第1张图片

整个过程以公司A和公司B的一次商业报价单发送为例子进行详解:

  1. 应用层

OSI模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP、HTTPS、FTP等

实际公司A的老板就是我们所述的用户,而他要发送的商业报价单,就是应用层提供的一种网络服务,当然,老板也可以选择其他服务,比如说,发一份商业合同,发一份询价单,等等。

  1. 表示层

表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一。

由于公司A和公司B是不同国家的公司,他们之间的商定统一用英语作为交流的语言,所以此时表示层(公司的文秘),就是将应用层的传递信息转翻译成英语。同时为了防止别的公司看到,公司A的人也会对这份报价单做一些加密的处理。这就是表示的作用,将应用层的数据转换翻译等。

  1. 会话层

会话层就是负责建立、管理和终止表示层实体之间的通信会话,该层的通信由不同设备中的应用程序之间的服务请求和响应组成。

会话层的同事拿到表示层的同事转换后资料,(会话层的同事类似公司的外联部),会话层的同事那里可能会掌握本公司与其他好多公司的联系方式,这里公司就是实际传递过程中的实体。他们要管理本公司与外界好多公司的联系会话。当接收到表示层的数据后,会话层将会建立并记录本次会话,他首先要找到公司B的地址信息,然后将整份资料放进信封,并写上地址和联系方式。准备将资料寄出。等到确定公司B接收到此份报价单后,此次会话就算结束了,外联部的同事就会终止此次会话。

  1. 传输层

传输层建立了主机端到端的链接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路。我们通常说的,TCP、UDP就是在这一层。端口号既是这里的“端”。

传输层就相当于公司中的负责快递邮件收发的人,公司自己的投递员,他们负责将上一层的要寄出的资料投递到快递公司或邮局。

  1. 网络层

本层通过IP寻址来建立两个节点之间的连接,为端源的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的传输层。这一层就是我们经常说的IP协议层,IP协议是Internet的基础。

网络层就相当于快递公司庞大的快递网络,全国不同的集散中心,比如说,从深圳发往北京的顺丰快递(陆运为例啊,空运好像直接就飞到北京了),首先要到顺丰的深圳集散中心,从深圳集散中心再送到武汉集散中心,从武汉集散中心再寄到北京顺义集散中心。这个每个集散中心,就相当于网络中的一个IP节点。

6.数据链路层

将比特组合成字节,再将字节组合成帧,使用链路层地址(以太网使用MAC地址)来访问介质,并进行差错检测。

7.物理层

实际最终信号的传输是通过物理层实现的。通过物理介质传输比特流,规定了电平、速度和电缆针脚

快递寄送过程中的交通工具,就相当于我们的物理层,例如汽车,火车,飞机,船。

TCP/IP五层协议和OSI的七层协议对应关系如下。

【计算机网络】HTTP协议知识点总结_第2张图片

网址和URL

我们进入一个网页,地址栏中就会出现一串英文字母,这不是网址,它叫URL,“统一资源定位符”。一个完整的URL包括——协议部分、网址、文件地址部分。

  • 协议部分以//为分割符。在地址栏输入一个网址的时候,协议部分是不用输入的,浏览器会自动补上默认的HTTP协议。
  • 网址部分大家也经常用到,比如 www.baidu.com。这是一个网站独一无二的网络名字。
  • 去掉www的前缀,比如baidu.com,这个部分就叫做域名,域名的最右边就是顶级域名,常见的比如:.com 表示商业机构,.org 表示非盈利性组织。.gov 表示政府机构。.edu 表示教育及科研机构。用来表示国家顶级域名的比如:.cn 表示中国。.us 表示美国。.jp 表示日本。
  • 总公司的下属分公司、或者公司下设的其他产品网站,会使用一个与域名类似的二级域名,比如腾讯网的域名是 qq.com,它的子产品 QQ 邮箱使用的就是二级域名 mail.qq.com,包括腾讯视频 v.qq.com。
  • 从域名后第一个/到最后一个/为止,是虚拟目录部分,从最后一个/开始到?为止,是文件名部。#号后面就是锚部分,虚拟目录、文件名、锚都不是 URL 必须的部分,虽然一个标准的 URL 地址看起来很复杂,但其实我们在输入 URL 的时候是只要输入网址或域名就可以了。

HTTP的报文格式

HTTP请求报文

超文本传输协议(简称HTTP)是应用层协议。HTTP是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求,服务器接到请求后,给予相应的响应信息。

HTTP请求报文由请求行、请求头部、空行和请求包体4个部分组成:

【计算机网络】HTTP协议知识点总结_第3张图片

  1. 请求行:由方法字段、URL字段和HTTP协议版本字段3个部分组成,他们之间使用空格隔开。请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT;

  2. 请求头部:由关键字/值对组成,每行一对,关键字和值用英文冒号‘:’分割。请求头部通知服务器有关于客户端请求的信息。

    • ser-Agent:产生请求的浏览器类型;

    • Accept:客户端可识别的响应内容类型列表;星号 “ * ” 用于按范围将类型分组,用 “ / ” 指示可接受全部类型,用“ type/* ”指示可接受 type 类型的所有子类型;

    • Accept-Language:客户端可接受的自然语言;

    • Accept-Encoding:客户端可接受的编码压缩格式;

    • Accept-Charset:可接受的应答的字符集;

    • Host:请求的主机名,允许多个域名同处一个IP 地址,即虚拟主机;

    • connection:连接方式(close 或 keepalive);

    • Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie;

  3. 空行:最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头;

GET和POST的区别

【计算机网络】HTTP协议知识点总结_第4张图片
一般的区别:
①POST更安全(不会作为URL的一部分,不会被缓存、保存在服务器日志以及浏览器浏览记录中,然而,从传输的角度来说,他们都是不安全的,因为 HTTP 在网络上是明文传输的,只要在网络节点上捉包,就能完整地获取数据报文。要想安全传输,就只有加密,也就是 HTTPS。)
②POST发送的数据更大(GET有URL长度限制)
③POST能发送更多的数据类型(GET只能发送ASCII字符)
④POST比GET慢
⑤POST用于修改和写入数据,GET一般用于搜索排序和筛选之类的操作(淘宝、支付宝的搜索查询都是get提交),目的是资源的获取、读取数据

为什么get比post快?
  1. post请求包含更多的请求头
  2. post在真正接受数据之前会将请求头发送给服务器进行确认,然后才真正发送数据
    post请求的过程:
    (1)浏览器请求tcp连接(第一次握手)
    (2)服务器答应进行tcp连接(第二次握手)
    (3)浏览器确认,并发送post请求头(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
    (4)服务器返回100 Continue响应
    (5)浏览器发送数据
    (6)服务器返回200 OK响应
    get请求的过程:
    (1)浏览器请求tcp连接(第一次握手)
    (2)服务器答应进行tcp连接(第二次握手)
    (3)浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
    (4)服务器返回200 OK响应
    也就是说,目测get的总耗是post的2/3左右,这个口说无凭,网上已经有网友进行过测试。
  3. get会将数据缓存起来,而post不会
  4. post不能进行管道化传输
get传参最大长度的理解误区

1.总结
(1)http协议并未规定get和post的长度限制
(2)get的最大长度限制是因为浏览器和web服务器限制了URL的长度
(3)不同的浏览器和web服务器,限制的最大长度不一样
(4)要支持IE,则最大长度为2083byte,若支持Chrome,则最大长度8182byte

2.误解
(1)首先即使get有长度限制,也是限制的整个URL的长度,而不仅仅是参数值数据长度,http协议从未规定get/post的请求长度限制是多少
(2)所谓的请求长度限制是由浏览器和web服务器决定和设置的,各种浏览器和web服务器的设定均不一样,这依赖于各个浏览器厂家的规定或者可以根据web服务器的处理能力来设定。IE 和 Safari 浏览器 限制 2k,Opera 限制4k,Firefox 限制 8k(非常老的版本 256byte),如果超出了最大长度,大部分的服务器直接截断,也有一些服务器会报414错误。

  • GET:当客户端要从服务器中读取某个资源时,使用GET方法。GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端,即向服务器请求某个资源。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(‘?’)代表URL的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind。

  • POST:当客户端给服务器提供信息较多时可以使用POST方法,POST方法向服务器提交数据,比如完成表单数据的提交,将数据提交给服务器处理。GET一般用于获取/查询资源信息,POST会附带用户数据,一般用于更新资源信息。POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据;

HTTP协议的8种请求类型

http消息由客户端到服务端的请求以及服务端到客户端的响应组成。

HTTP请求其实像发送邮件一样,我们告诉邮局地址,邮局发送邮件,请求头是我们附加的一些信息,可以告诉收件人,谁发的邮件,谁可以看,这是一封加密的邮件,你要根据什么规则把这封邮件翻译过来等等规则,请求内容当然就是我们要发送的具体内容,响应就是收件人给我的回信,响应头会告诉我们一些附加信息比如他告诉我们,你发送的那个收件人没有(404)或者我正确收到了你的来信(200),我给你的响应是什么加密方式,你要怎么解码,响应内容就是他要告诉我们的具体内容,你也可以把邮局当做一个代理,收件人当做服务器。

  1. GET
    get方法请求指定的页面信息,返回实体主体。该请求是向服务器请求信息,请求参数会跟在url后面,因此,对传参长度有限制的,而且不同浏览器的上限是不同的。由于get请求直接将参数暴露在url中,因此对于一些带有重要信息的请求可能并不完全合适。
  2. POST
    post请求是向指定资源提交数据进行处理请求,例如提交表单或上传文件等。数据被包含在请求体中,post请求可能会导致新的资源的建立和/或已有资源的修改。post方法没有对传递资源的大小进行限制,往往是取决于服务器端的接受能力,而且,该方法传参安全性稍高些
  3. PUT
    put方法是从客户端向服务器传送的数据取代指定的文档的内容。PUT方法的本质是idempotent的方法,通过服务是否是idempotent来判断用PUT还是POST更合理,通常这两种方法没有刻意之分
  4. DELETE
    请求服务器删除指定的页面,DELETE请求一般会返回3种状态码:
  • 200(OK)-删除成功,同时返回删除的资源
  • 202(Accepted)-删除请求已经接受,但没有被立即执行(资源也许已经被转移到了待删除的域)
  • 204(NO Content)-删除请求已经被执行,但是没有返回资源(也许是请求删除不存在的资源造成的)
  1. OPTIONS
    允许客户端查看服务器的性能。
  2. HEAD
    类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
  3. CONNECT
    预留给能够将连接改为管道方式的代理服务器
  4. TRACE
    回显服务器收到的请求,主要用于测试或诊断

HTTP响应报文

HTTP响应报文由状态行、响应头部、空行和响应包体4个部分组成:
【计算机网络】HTTP协议知识点总结_第5张图片

  1. 状态行:状态行由HTTP协议版本字段、状态码和状态码的描述文本3个部分组成,用空格隔开;
  2. 空行:最后一个响应头部之后是一个空行,发送回车符和换行符,通知服务器以下不再有响应头部。
  3. 响应包体:服务器返回给客户端的文本信息

HTTP状态码

  • 状态码由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类:

    • 1XX:表示服务器已经接收了客户端请求,客户端可继续发送请求;
    • 2XX:表示服务器已成功接收到请求并进行处理;
    • 3XX:表示服务器要求客户端重定向;
    • 4XX:表示客户端的请求有非法内容;
    • 5XX:表示服务器未能正常处理客户端的请求而出现意外错误
  • 状态码的描述文本有如下取值:

    • 状态码的描述文本有如下取值:

2XX 成功

· 200 OK,表示从客户端发来的请求在服务器端被正确处理

· 204 No content,表示请求成功,但响应报文不含实体的主体部分

· 206 Partial Content,进行范围请求

3XX 重定向

· 301 moved permanently,永久性重定向,表示资源已被分配了新的 URL

· 302 found,临时性重定向,表示资源临时被分配了新的 URL

· 303 see other,表示资源存在着另一个 URL,应使用 GET 方法丁香获取资源

· 304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况

http状态码304的意思是:客户端已经执行了GET,但文件变化。如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个304状态码。简单的表达就是客户端已经执行了GET,但文件未变化。

· 307 temporary redirect,临时重定向,和302含义相同

4XX 客户端错误

· 400 bad request,请求报文存在语法错误

· 401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息

· 403 forbidden,表示对请求资源的访问被服务器拒绝

· 404 not found,表示在服务器上没有找到请求的资源

5XX 服务器错误

· 500 internal sever error,表示服务器端在执行请求时发生了错误

· 503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求

    - 200 OK:客户端请求成功;
    - 400 Bad Request:表示客户端请求有语法错误,不能被服务器所理解
    - 401 Unauthonzed:表示请求未经授权,该状态码必须与 WWW-Authenticate 报头域一起使用;
    - 403 Forbidden:表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因;
    - 404 Not Found:请求的资源不存在,例如:输入了错误的URL;
    - 500 Internal Server Error:表示服务器发生不可预期的错误,导致无法完成客户端的请求
    - 503 Service Unavailable:表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常

- 响应头部:可能包括:

    - Location:Location响应报头域用于重定向接受者到一个新的位置。例如:客户端所请求的页面已不存在原先的位置,为了让客户端重定向到这个页面新的位置,服务端可以发回LOcation响应报头后使用重定向语句,让客户端去访问新的域名所对应的服务器上的资源;
    
    - Server:Server响应报头域包含了服务器用来处理请求的软件信息以及版本。它和 User-Agent 请求报头域是相对应的,前者发送服务器端软件的信息,后者发送客户端软件(浏览器)和操作系统的信息。
    
    - Vary:表示不可缓存的请求头列表
    
    - Connection:连接方式。对于请求来说:close(告诉 WEB 服务器或者代理服务器,在完成本次请求的响应后,断开连接,不等待本次连接的后续请求了)。keepalive(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求);对于响应来说:close(连接已经关闭);         keepalive(连接保持着,在等待本次连接的后续请求); Keep-Alive:如果浏览器请求保持连接,则该头部表明希望WEB 服务器保持连接多长时间(秒);例如:Keep-Alive:300;WWW-Authenticate:WWW-Authenticate响应报头域必须被包含在401 (未授权的)响应消息中,这个报头域和前面讲到的Authorization 请求报头域是相关的,当客户端收到 401 响应消息,就要决定是否请求服务器对其进行验证。如果要求服务器对其进行验证,就可以发送一个包含了Authorization 报头域的请求;

HTTP用的什么连接?

在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。
但从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。

HTTP和HTTPS区别

HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

https在传输层传输数据。会加密客户端到服务器端传输的所有数据,每一个从客户端到服务器端的请求都会被加密传输。
https采用非对称加密算法+对称加密算法来保证数据的安全。

【计算机网络】HTTP协议知识点总结_第6张图片

HTTPS和HTTP的区别主要如下:

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

HTTPS中SSL层原理

SSL利用数据加密、身份验证和消息完整性验证机制,为网络上数据的传输提供安全性保证。SSL支持各种应用层协议。由于SSL位于应用层和传输层之间,所以可以为任何基于TCP等可靠连接的应用层协议提供安全性保证。

  1. 身份验证机制

SSL利用数字签名来验证通信对端的身份。非对称密钥算法可以用来实现数字签名。由于通过私钥加密后的数据只能利用对应的公钥进行解密,因此根据解密是否成功,就可以判断发送者的身份,如同发送者对数据进行了“签名”。例如,Alice使用自己的私钥对一段固定的信息加密后发给Bob,Bob利用Alice的公钥解密,如果解密结果与固定信息相同,那么就能够确认信息的发送者为Alice,这个过程就称为数字签名。使用数字签名验证身份时,需要确保被验证者的公钥是真实的,否则,非法用户可能会冒充被验证者与验证者通信。如下图所示,Cindy冒充Bob,将自己的公钥发给Alice,并利用自己的私钥计算出签名发送给Alice,Alice利用“Bob”的公钥(实际上为Cindy的公钥)成功验证该签名,则Alice认为Bob的身份验证成功,而实际上与Alice通信的是冒充Bob的Cindy。SSL利用PKI提供的机制保证公钥的真实性。

  1. 数据传输的机密性

SSL加密通道上的数据加解密使用对称密钥算法,目前主要支持的算法有DES、3DES、AES等,这些算法都可以有效地防止交互数据被破解。对称密钥算法要求解密密钥和加密密钥完全一致。因此,利用对称密钥算法加密传输数据之前,需要在通信两端部署相同的密钥。

  1. 消息完整性验证

为了避免网络中传输的数据被非法篡改,SSL利用基于MD5或SHA的MAC算法来保证消息的完整性。MAC算法是在密钥参与下的数据摘要算法,能将密钥和任意长度的数据转换为固定长度的数据。利用MAC算法验证消息完整性的过程如下图所示。发送者在密钥的参与下,利用MAC算法计算出消息的MAC值,并将其加在消息之后发送给接收者。接收者利用同样的密钥和MAC算法计算出消息的MAC值,并与接收到的MAC值比较。如果二者相同,则报文没有改变;否则,报文在传输过程中被修改,接收者将丢弃该报文。

MAC算法要求通信双方具有相同的密钥,否则MAC值验证将会失败。因此,利用MAC算法验证消息完整性之前,需要在通信两端部署相同的密钥。

4.利用非对称密钥算法保证密钥本身的安全

对称密钥算法和MAC算法要求通信双方具有相同的密钥,否则解密或MAC值验证将失败。因此,要建立加密通道或验证消息完整性,必须先在通信双方部署一致的密钥。SSL利用非对称密钥算法加密密钥的方法实现密钥交换,保证第三方无法获取该密钥。如下图所示,SSL客户端(如Web浏览器)利用SSL服务器(如Web服务器)的公钥加密密钥,将加密后的密钥发送给SSL服务器,只有拥有对应私钥的SSL服务器才能从密文中获取原始的密钥。SSL通常采用RSA算法加密传输密钥。(Server端公钥加密密钥,私钥解密密钥)

实际上,SSL客户端发送给SSL服务器的密钥不能直接用来加密数据或计算MAC值,该密钥是用来计算对称密钥和MAC密钥的信息,称为premaster secret。SSL客户端和SSL服务器利用premaster secret计算出相同的主密钥(master secret),再利用master secret生成用于对称密钥算法、MAC算法等的密钥。premaster secret是计算对称密钥、MAC算法密钥的关键。

5.利用PKI保证公钥的真实性

PKI通过数字证书来发布用户的公钥,并提供了验证公钥真实性的机制。数字证书(简称证书)是一个包含用户的公钥及其身份信息的文件,证明了用户与公钥的关联。数字证书由权威机构——CA签发,并由CA保证数字证书的真实性。

SSL客户端把密钥加密传递给SSL服务器之前,SSL服务器需要将从CA获取的证书发送给SSL客户端,SSL客户端通过PKI判断该证书的真实性。如果该证书确实属于SSL服务器,则利用该证书中的公钥加密密钥,发送给SSL服务器。

验证SSL服务器/SSL客户端的身份之前,SSL服务器/SSL客户端需要将从CA获取的证书发送给对端,对端通过PKI判断该证书的真实性。如果该证书确实属于SSL服务器/SSL客户端,则对端利用该证书中的公钥验证SSL服务器/SSL客户端的身份。

HTTP 工作原理

HTTP 协议采用请求/响应模型。客户端向服务器发送一个请求报文,服务器以一个状态作为响应。

以下是 HTTP 请求/响应的步骤:

● 客户端连接到web服务器:HTTP 客户端与web服务器建立一个 TCP 连接;

● 客户端向服务器发起 HTTP 请求:通过已建立的TCP 连接,客户端向服务器发送一个请求报文;

● 服务器接收 HTTP 请求并返回 HTTP 响应:服务器解析请求,定位请求资源,服务器将资源副本写到 TCP 连接,由客户端读取;

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

● 客户端浏览器解析HTML内容:客户端将服务器响应的 html 文本解析并显示;

例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:

1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;

2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立 TCP 连接;

3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;

4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;

5、释放 TCP 连接;

6、浏览器将该 html 文本并显示内容;

请你说说soket编程和HTTP协议

由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。
而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。

很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方建立的是Socket连接,服务器就可以直接将数据传送给客户端;若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连接请求,不仅可以保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。

请你说一说http缓存问题,缓存寿命,以及怎么判断文件在服务器是否更改的

1 缓存的类型:
缓存是一种保存资源副本并在下次请求中直接使用该副本的技术,缓存能够节约网络资源,提升页面响应速度。常见的缓存类型分为共享缓存和私有缓存

1.1 私有缓存

私有缓存只能用于单独用户,常见的浏览器缓存便是私有缓存。私有缓存能够存储用户通过http下载过的文档,从而在用户再次访问时直接提供给用户,而不用向服务器发送请求。

1.2 共享缓存

共享缓存能够被多个用户使用,常用的web代理中便使用的共享缓存

缓存寿命

缓存寿命的计算的依据依次是:

请求头中的Cache-Control: max-age=N。相应的缓存寿命即为 N,从设置开始,N秒之后过期。

Expires属性,Expires属性的值为过期的时间点,在这个时间点后,该缓存被认为过期

Last-Modified信息。缓存的寿命为头里面 Date表示的事件点减去 Last-Modified的时间点的结果乘以 10%

判断文件是否更改可以看文件时间戳

http为什么是无状态的?

无状态是指协议对于事务处理没有记忆能力,因为http协议目的在于支持超文本的传输,更加广义一点就是支持资源的传输,那么在客户端浏览器向服务器发送请求,继而服务器将相应的资源发回客户这样一个过程中,无论对于客户端还是服务器,都没有必要记录这个过程,因为每一次请求和响应都是相对独立的,一般而言,一个url对应唯一的超文本,正因为这样d唯一性,所以http协议被设计为无状态的链接协议符合他本身的需求。

HTTP协议cookie和session有什么区别

  • cookie 服务器给客户端返回数据的时候,中间加了一个标识,然后客户端在此请求数据的时候,数据中带上这个标识,那么服务器接收到请求消息时就知道这个请求来自于谁了
  • cookie和session的区别
  1. cookie数据存放在客户的浏览器上,session数据存放在服务器上;
  2. cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗;考虑到安全应该使用session
  3. session会在一定时间内保存在服务器上,当访问量增加时,会比较占用服务器的性能;考虑到服务器性能方面,应当使用cookie;
  4. 单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie;
  5. 将登陆信息等重要信息存放在session中,其他信息如果需要保留,可以放在cookie中。

你可能感兴趣的:(【计算机网络】HTTP协议知识点总结)