计算机网络一:HTTP协议相关

HTTP和HTTPS的区别

HTTPHTTPS
说明超文本传输协议,网络层协议HTTP+SSL
证书不需要需要
信息传输方式明文密文(SSL加密)
端口80443
连接无状态有状态
安全性不安全安全

HTTP1.0和HTTP1.1的区别

  1. http1.0中浏览器与服务器只保持短暂的连接,浏览器的每次请求都与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求
  2. 而http1.1则提供永久性连接
  3. http1.1中增加Host请求头字段后,实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点
  4. http1.1提供身份认证(基于口令的基本认证方式)

HTTP协议执行过程概述

  1. 客户端与服务器建立连接(通过TCP协议)
  2. 客户端向服务器发送请求(请求报文格式)
  3. 服务器向客户端发送响应信息(响应报文格式)

HTTP请求的一次完整过程

  1. 建立 TCP 连接(之前可能还有一次DNS域名解析)
  2. 三次握手建立TCP完成后,客户端向服务器发送请求命令,比如 GET https://www.baidu.com?name=xx&addr=xx HTTP1.1
  3. 客户端发送请求头信息,发送完了header后会接着发送一个空白行,GET请求没有数据,POST请求要发送body数据
  4. 服务器接收到以上信息后,开始处理业务,处理完有了结果以后,服务器开始应答
  5. 服务器返回响应头信息,发送完response header以后,再发送一个空白行
  6. 然后服务器向客户端发送数据
  7. 发送完了服务器四次挥手关闭 TCP 连接

请求报文格式

图解:
http请求报文格式
实例:
在这里插入图片描述

  1. 请求行
    • 格式:请求方式 请求url 请求协议/版本
    • 示例:GET /login.html HTTP/1.1
  2. 请求头
    • 格式:请求头名称:请求头值(多组key-value对)
  3. 请求空行
    • 作用:空行,用于分割请求头和请求体
  4. 请求体
    • 用于封装POST请求消息的请求参数
    • 只有使用POST方式的请求才有请求体

响应报文格式

图解:
在这里插入图片描述
实例:
在这里插入图片描述

  1. 状态行
    • HTTP版本号 状态码 状态值 换行符
  2. 响应头
    • 响应头名称:响应头值(多组key-value对)
  3. 响应空行
    • 空行,用于分隔响应头和响应体
  4. 响应体
    • 存放响应的数据

请求报文和响应报文中的知识点

请求方式

请求报文中的请求行包含请求方式部分,HTTP协议有8种请求方式,常用的有2种(GET和POST)

  1. GET
    1. 请求参数在请求行中,在url后
    2. 请求的url长度是有限制的(请求能携带的参数较少)
    3. 不太安全
    4. 高效
    5. 会在浏览器的地址栏显示数据内容
  2. POST
    1. 请求参数在请求体中
    2. 请求的url长度没有限制(请求能携带的参数较多)
    3. 相对安全
    4. 不高效
    5. 不会在浏览器的地址栏显示数据内容
  3. PUT
    • 向指定资源位置上传其最新内容
  4. DELETE
    • 请求服务器删除Request-URL所标识的资源
  5. OPTIONS
    • 返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
  6. HEAD
    • 向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息
  7. TRACE
    • 回显服务器收到的请求,主要用于测试或诊断
  8. CONNECT
    • HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
GET和POST方法的区别
  1. get重点在从服务器上获取资源,post重点在向服务器发送数据
  2. get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用"?“连接,多个请求数据间用”&"连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的;post传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的
  3. Get受URL长度限制,传输的数据量小,但效率较高;Post可以传输大量数据,所以上传文件时只能用Post方式
  4. get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等;post较get安全性较高
  5. get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码;post支持标准字符集,可以正确传递中文字符
请求头

常见的请求头:

  1. User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息(用于解决浏览器兼容性问题)
  2. Referer:告诉服务器,我(当前请求)从哪里来。可以用于防盗链或统计工作
  3. Accept:支持的数据类型
  4. Accept-Encoding:支持的编码格式
  5. Accept-Language:语言环境
  6. Cache-Control:缓存控制
  7. Connection:请求完成是断开还是保持连接
响应头

常见的响应头:

  • Allow:服务器支持哪些请求方法
  • Content-Encoding:文档的编码方法
  • Content-Length:内容长度
  • Concent-Type:后面的文档属于的MIME类型
  • Date:当前的GMT时间
  • Expires:应该在什么时候认为文档已过期而不再缓存它
  • Last-Modified:文档的最后改动时间
  • Location:客户应当到哪里去提取文档
  • Refresh:浏览器应该在多少时间之后刷新文档(单位:秒)
  • Server:服务器名字
  • Set-Cookie:设置和页面关联的Cookie
  • WWW-Authenticate:客户应该在Authorization头中提供什么类型的授权信息
响应状态码

状态码分类:

  1. 1xx:信息,服务器收到请求,需要请求者继续执行操作
  2. 2xx:成功,操作被成功接收并处理
  3. 3xx:重定向,需要进一步的操作以完成请求
  4. 4xx:客户端错误,请求包含语法错误或无法完成请求
  5. 5xx:服务器错误,服务器在处理请求的过程中发生了错误

常见状态码:

  • 200:请求成功
  • 301:永久重定向,资源被永久转移到其他URL
  • 302:临时重定向(重定向时会改变method:把POST改为GET)
  • 307:临时重定向(不会改变method)
  • 400:错误的请求
  • 401:未被授权,需要身份验证
  • 403:请求被拒绝
  • 404:请求的资源不存在
  • 500:内部服务器错误
  • 502:网关错误,收到了上游响应但无法解析
  • 503:服务器暂时无法使用
  • 504:上游响应超时

HTTP相关面试题

HTTP的缓存机制

HTTP的缓存分为两种,都通过HTTP响应头控制缓存:

  • 强制缓存:再次请求时,无需再向服务器发送请求
  • 协商缓存:再次请求时,需要向服务器校验新鲜度,如果资源是新鲜的,就返回304,从浏览器获取资源
HTTP长连接与短连接
  • 短连接:在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话
  • 长连接:从HTTP/1.1起,默认使用长连接,用以保持连接特性。在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接
  • 本质:HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接
http的无状态无连接的含义
  • 无连接:服务器处理完客户的请求,并收到客户的应答后,即断开连接
  • 无状态:每个请求都是独立的,服务器不知道客户端是什么状态
HTTP是无状态协议,应如何保存用户的状态?

HTTP是无状态协议,即不保存状态,也就是HTTP协议自身不对请求和响应之间的通信状态进行保存。保存用户状态使用的是Session机制,Session的主要作用就是通过服务端记录用户的状态。服务端给特定的用户创建特定的 Session之后就可以标识这个用户并且跟踪这个用户了(一般情况下,服务器会在一定时间内保存这个Session,过了时间限制,就会销毁这个Session)。Session保存在服务端,一般保存在内存或数据库中。通过在Cookie中附加一个Session ID的方式实现Session跟踪。如果Cookie被禁用了,就利用URL重写把Session ID直接附加到URL路径的后面。

Cookie的作用是什么?与Session的区别是什么?
  • 概述:Cookie和Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样
  • 作用:Cookie一般用来保存用户信息
  • 区别:
    1. Cookie一般用来保存用户信息,Session一般用来通过服务器端记录用户的状态
    2. Cookie数据保存在客户端,Session数据保存在服务器端
    3. 相对来说Session安全性比Cookie高(因为Session存储在服务器端)
URI和URL的区别
  • URI:统一资源标志符,可以唯一标识一个资源
  • URL:统一资源定位符,可以提供该资源的路径
  • 区别:URL是一种具体的URI,不仅唯一标识资源,而且提供定位该资源的信息
HTTP优化方案
  1. TCP复用:TCP连接复用是将多个客户端的HTTP请求复用到一个服务器端TCP连接上,而HTTP复用则是一个客户端的多个HTTP请求通过一个TCP连接进行处理。前者是负载均衡设备的独特功能;而后者是HTTP 1.1协议所支持的新功能,目前被大多数浏览器所支持。
  2. 内容缓存:将经常用到的内容进行缓存起来,那么客户端就可以直接在内存中获取相应的数据了。
    压缩:将文本数据进行压缩,减少带宽
  3. SSL加速(SSL Acceleration):使用SSL协议对HTTP协议进行加密,在通道内加密并加速
  4. TCP缓冲:通过采用TCP缓冲技术,可以提高服务器端响应时间和处理效率,减少由于通信链路问题给服务器造成的连接负担。
keep-alive的作用

在早期的HTTP/1.0中,每次http请求都要创建一个连接,而创建连接的过程需要消耗资源和时间,为了减少资源消耗,缩短响应时间,就需要重用连接。在后来的HTTP/1.0中以及HTTP/1.1中,引入了重用连接的机制,就是在http请求头中加入Connection: keep-alive来告诉对方这个请求响应完成后不要关闭,下一次咱们还用这个请求继续交流。协议规定HTTP/1.0如果想要保持长连接,需要在请求头中加上Connection: keep-alive。

keep-alive的优点:

  1. 较少的CPU和内存的使用(由于同时打开的连接的减少了)
  2. 允许请求和应答的HTTP管线化
  3. 降低拥塞控制 (TCP连接减少了)
  4. 减少了后续请求的延迟(无需再进行握手)
    报告错误无需关闭TCP连接
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值