HTTP协议简介:

一些基本概念:

  • 协议:指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。
  • HTTP协议:超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送给客户端的流览器。下面看一个图:

URI和URL的区别:
URI:是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。它主要是由三部分主成:

  • 访问资源的命名机制。
  • 存放资源的主机名。
  • 资源自身的名称,由路径表示,着重强调于资源。

举个粟子:file://a:1234/b/c/d.txt,其中file://表示访问资源的命名机制;a:1234表示存放资源的主机名;b/c/d.txt表示资源自身的路径。

URL:是uniform resource locator,统一资源定位器,它是一种具体的URI,用URL可以用来标识一个资源,而且还指明了如何locate这个资源。

它主要是由以下三部分组成:

  • 协议【如http或htpps协议】。
  • 存在该资源的主机ip地址。
  • 主机资源的具体地址。

所以URL是具体的URI,它强调用的是路径,而URI强调的是资源。

HTTP协议的特点:

  • 简单快速。
  • 无连接。每次请求就会自动断开。
  • 无状态。这个协议对于以前的数据是没有记忆的。

request / reponse:

打开浏览器,在地址栏中输入URL,然后我们看到了网页,那原理是怎样的呢?

其简单的原理是:当输入URL时浏览器会向Web服务器发送一个request请求,而Web服务器收到请求之后会进行相应的处理,然后再将response发送给浏览器,接着浏览器就解析这个response的html文档,这样就看到了咱们的网页,而有可能request是经过代理服务器【它是一个中转站,能提高访问速度,因为大多数代理服务器都有缓存功能,如果访问地址时先走缓存,最后再走Web服务器】最后再到达Web服务器。

而对于request和response的头信息有哪些是值得咱们在面试时需要观注的呢?这里采用charles对请求进行拦截进行查看:

request:

接下来两个头信息是比较容易忽略但是很重要,如下:

它通常需要与response中请求头中的ETag联合使用的,它的大概工作原理是:告诉reponse中可以添加ETag进去,如果再次请求时则会在请求头添的If-No-Match中ETag的值,这时就可以通过服务器来验证该ETag值有木有改变,如果木有改变的话则会给客户端返回一个304状态码来告诉客户端可以使用本地缓存文件,这就大大提高了客户端的性能。

它是将缓存页面的最后修改时间发送给服务器,而服务器会根据这个时间再来和服务器实际文件的最后修改时间进行比较,如果一致则返回304给客户端,如果不一致则会返回200并将最新的内容下发给客户端。

纵观整个请求头,Referer和If-No-Match这两个请求头在面试中是经常会被问到的,所以这里需要注意。

response:

最后一个代理连接响头是非常重要的,keep-alive表示当客户端访问服务端的http的Tcp连接不会被关闭,如果客户端再次访问,那么就会继续用这个建议好的TCP连接而不会再次建立连接。

HTTP协议中比较容易混淆的知识点:

http1.1/http1.0的区别:

  • http1.0产生的背景
    超文本传输协议(HyperText Transfer Protocol)伴随着计算机网络和浏览器的诞生,HTTP1.0也随之而来,处于计算机网络跌应用层,在TCP协议之上的,
  • http1.0所做的优化
    带宽:现阶段已经解决。
    延迟:1.浏览器阻塞:浏览器对于同一个域名,同时只能有4个连接。
    延迟:2.DNS查询:浏览器需要知道目标服务器的IP才能建立连接。
    延迟:3.建立连接:三次握手。由于Http是基于Tcp的~
  • http1.1/http1.0的具体区别
    1、缓存处理:在http1.0时代,缓存主要是利用请求头的If-Modified-Since来做为缓存策略的标准,而在http1.1引入了更多的缓存策略,比如If-None-Match。
    2、带宽优化及网络连接的使用:在http1.0中存在一些浪费带宽的现象,比如客户端请求服务器只需要一小部份数据,但是服务端会一股脑的将整个数据都返回,同时又不支持断点续传功能,而在http1.1中请求头中引入了一个range请求头,它允许只请求某个范围的数据。
    3、Host头处理:在http1.0中一台主机只对应一个唯一一个IP地址,因为请求的消息头中并没有传递主机名,而随着虚拟主机的发展,一台物理机可以存在多个虚拟主机,并且共享一个IP地址,在http1.1中request和response都带有host头消息,如果木有则会报400错误。
    4、长连接【这是最大的区别~】:在http1.0中每次请求都需要创建连接,而在http1.1中默认就支持keep-alive长连接,性能大大提高。
  • http1.1/http1.0存在的问题
    1、Http1.X在传输数据时,每次都需要重新建立连接,无疑增加了大量的延迟时间。【指的http1.0,换成http1.1可以解决此问题】
    2、Http1.X在传输数据时,所有传输的数据都是明文,客户端与服务器端都无法验证对方的身份【用https可以解决此问题】
    3、Http1.X在使用时,header里携带的内容过大,在一定程序上增加了传输的成本。
    4、虽然在Http1.X支持了keep-alive,来弥补多次创建连接产生的延迟,但是keep-alive使用多了同样会给服务器带来大量的性能压力。

get/post方法的区别:

  • 提交的数据:get在提交时数据会在URL当中体现,post一般提交时都会在body中。
  • 提交的数据大小是否有限制:对于get方法有大小限制,而post方法没有限制,因为在body中。
  • 取得变量的值:get方式是通过Request.QueryString取得,而post方式是通过Request.From来取得。
  • 安全问题:get方式肯定是不太安全,因为数据是携带在URL当中的,而post则比较安全。

cookie和session的区别:

cookie:

  • 什么是cookie?
    Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。而cookie的设置主要是分为如下以个步骤:

    它的机制的引入就解决了Http无状态的问题。

  • 工作原理:

    它是保存在客户端的。

session:

  • 什么是session?
    Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。
  • session的工作原理:
    1、第一步当然是创建session了:在服务端运行时来创建。
    2、在创建了session的同时,服务器会为该session生成唯一的session id。
    3、在session被创建之后,就可以调用session相关的方法往session中增加内容。
    4、当客户端再次发送请求的时候,会将这个session id带上,服务器接受了请求之后就会依据session id找到相应的session。

区别:

  • 存储位置不同:session是保存在服务器端,而cookies是保存在客户端。
  • 存取方式的不同:session可以存存任何数据类型,而cookies只能保存字符串。
  • 安全性(隐私策略)不同:session安全,cookies不安全。
  • 有效期上的不同:session有效期较短,而cookies可以比较长。
  • 对服务器造成的压力不同:session对服务器压力较大,而cookies是保存在客户端完全对服务器不会造成压力。

网络协议相关面试问题-http协议相关面试问题的更多相关文章

  1. 关于面试总结8-http协议相关面试题

    前言 在PC浏览器的地址栏输入一串URL,然后按Enter键这个页面渲染出来,这个过程中都发生了什么事?这个是很多面试官喜欢问的一个问题 如果测试只是停留在表面上点点点,不知道背后的逻辑,是无法发现隐 ...

  2. GPL协议中国第一案尘埃落定,相关开源软件应如何风控?

    导读:2019年11月6日,数字天堂(北京)网络技术有限公司(以下简称 “数字天堂公司”)诉柚子(北京)科技有限公司.柚子(北京)移动技术有限公司(以下简称 “柚子公司”)侵犯计算机软件著作权纠纷一案 ...

  3. 蓝牙协议分析(5)_BLE广播通信相关的技术分析

    1. 前言 大家都知道,相比传统蓝牙,蓝牙低功耗(BLE)最大的突破就是加大了对广播通信(Advertising)的支持和利用.关于广播通信,通过“玩转BLE(1)_Eddystone beacon” ...

  4. 脑残式网络编程入门(三):HTTP协议必知必会的一些知识

    本文原作者:“竹千代”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.前言 无论是即时通讯应用还是传统的信息系统,Http协议都是我们最常打交 ...

  5. HTTP协议 结构,get post 区别(阿里面试)

    如果需要想了解相关的TCP的协议结构,底层架构,以及每次面试必问的三次握手,四次挥手可以 参考:TCP协议详解7层和4层解析(美团面试,阿里面试) 尤其是三次握手,四次挥手 具体发送的报文和状态都要掌 ...

  6. 【面试】http协议知识

    一.什么是HTTP协议        HTTP协议是一种应用层协议,HTTP是HyperText Transfer Protocol(超文本传输协议)的英文缩写.HTTP可以通过传输层的TCP协议在客 ...

  7. 在网络7层协议中,如果想使用UDP协议达到TCP协议的效果,可以在哪层做文章?(QQ 为什么采用 UDP 协议,而不采用 TCP 协议实现?)

    为了解决这题,可以具体看看下面这个讨论. 解灵运工程师 185 人赞同 某次架构师大会上那个58同城做即时通信的人说:原因是因为当时没有epoll这种可以支持成千上万tcp并发连接的技术,所以他们使用 ...

  8. python 网络爬虫概念与HTTP(s)协议

    1. 爬虫相关概念 1.1 定义 爬虫就是通过编写程序模拟浏览器上网,然后让其去互联网上抓取数据的过程 1.2 主流语言实现爬虫优劣 php:可以实现爬虫.但是php在实现爬虫中支持多线程和多进程方面 ...

  9. Android网络编程(一)HTTP协议原理

    相关文章 Android网络编程(一)HTTP协议原理 Android网络编程(二)HttpClient与HttpURLConnection Android网络编程(三)Volley使用方法全解析 A ...

  10. 网络基础和 TCP、IP 协议

    1.网络基本概念 1.1 什么是网络:一些网络设备按照一定的通讯规则(网络协议)进行通讯的系统. 1.2 VPN(虚拟私有网络)加密,相当于专线,从分支机构到总部. 1.3 资源共享的功能和特点: 数 ...

随机推荐

  1. python基础知识(字典)

    创建字典 变量名 = {key:value,.....} zip()    转换为zip对象 空字典 变量名 = {} 变量名 = dict(key = value,....) 创建只有键的字典 fr ...

  2. windows端口映射

    1. 查看netsh interface portproxy show all 2. 添加端口映射转发netsh interface portproxy add v4tov4 listenaddres ...

  3. 从零探索Java网络编程01之 TCP/IP 与 Socket

    最近完成了几项比较简单的项目, 终于是在996里偷了点闲暇时光, 想着来研究研究些啥吧?  一个普通的控制台日志映入了我的眼帘(孽缘呀): (图中使用 SpringBoot 的 log4j 来输出日志 ...

  4. 使用mysqldump对mysql进行备份与恢复

    说明: 主参考:https://blog.csdn.net/fanren224/article/details/79693860 mysql数据全量备份 1.开启二进制日志,备份指定数据库 cat & ...

  5. 深入理解C语言-深入理解数组

    数组,作为C语言中常见的复杂数据类型,了解其本质有助于深入了解C语言 数组概念 元素类型角度:数组是相同类型的变量的有序集合测试指针变量占有内存空间大小 内存角度:联系的一大片内存空间 数组初始化 数 ...

  6. 20.采集项目流程篇之清洗数据绑定到hive表中

    先启动hive 在mydb2这个数据库中创建表: create external table mydb2.access(ip string,day string,url string,upflow s ...

  7. 小记--------spark的宽依赖与窄依赖分析

    窄依赖: Narrow Dependency : 一个RDD对它的父RDD,只有简单的一对一的依赖关系.RDD的每个partition仅仅依赖于父RDD中的一个partition,父RDD和子RDD的 ...

  8. sp_addlinkedserver 跨服务器连接数据库查询

    ----创建远程链接服务器--exec sys.sp_addlinkedserver --@server='LMS',--被访问的服务器别名--@srvproduct='',--@provider=' ...

  9. Java学习 面向对象(下)——Java疯狂讲义th4

    面向对象(下) [TOC] 包装类 通过包装类可以把8个基本类型的值包装成对象使用. 自动拆箱.自动装箱 把字符串类型值转换成基本类型的值: 包装类的 parseXxx(String s)静态方法 包 ...

  10. Unknown column '字段名' in 'field list' 错误解决方案

    当后台报这个错误的时候,说明实体类中的字段名出错了,解决方案: 1,检查数据库中的字段名与实体类中的字段名是否一致,特别要注意单词字母, 2,检查数据库中的字段是否与实体类中的字段一致.比如数据库中没 ...