http协议那些事儿

rivers 发表于 2022/04/03 13:34:45 2022/04/03
【摘要】 如果被面试官问到,什么是HTTP协议?你会怎么回答,还是"http协议是超文本协议"吗,一句超文本回答面试官就通过了吗?其实不然。这些面试官是知道的,他想知道的是根详细的内容,下面就一起看下http协议的知识点吧

1. HTTP协议

1.1 http 技术背景

  • 为啥叫超文本传输协议呢

    # 技术由来 
    在互联网早期的时候,我们输入的信息只能保存在本地,无法和其他电脑进行交互。我们保存的信息通常都以文本即简单字符的形式存在,文本是一种能够被计算机解析的有意义的二进制数据包。而随着互联网的高速发展,两台电脑之间能够进行数据的传输后,人们不满足只能在两台电脑之间传输文字,还想要传输图片、音频、视频,甚至点击文字或图片能够进行超链接的跳转,那么文本的语义就被扩大了,这种语义扩大后的文本就被称为超文本(Hypertext)HTML 就是最常⻅的超⽂本了,它本身只是纯⽂字⽂件,但内部⽤很多标签定义了图⽚、视频等的链接,再经过浏览器的解释,呈现给我们的就是⼀个⽂字、有画⾯的⽹⻚了。
    
    # SO,HTTP 是⼀个在计算机世界⾥专⻔在「两点」之间「传输」⽂字、图⽚、⾳频、视频等「超⽂本」数据的「约定和
    规范」。
    # 浏览器
    浏览器使用的是HTTP协议的主要载体。随着网景 大战结束,浏览器迅速发展,至今已有很多浏览器。
    

1.2 http 基本概念

  • HTTP 是什么

    HTTP 是超⽂本传输协议,也就是HyperText Transfer Protocol。HTTP的名字「超⽂本协议传输」,它可以拆成三个部分:超⽂本、传输、协议
    
  • URI/URL

    # URI的全称是(Uniform Resource ldentifier),中文名称是统一资源标识符,使用它就能够唯一地标记互联网上资源
    
    # URL的全称是 (Uniform Resource Locator) ,中文名称是统一资源定位符,也就是我们俗称的网址,它实际上是URI的一个子集。
     
    # URN 通过名字来标识或识别资源。
    

  • 常见的字段有哪些?

    Host 字段:客户端发送请求时,⽤来指定服务器的域名
    Content-Length 字段:表明本次回应的数据⻓度。
    Connection 字段:常⽤于客户端要求服务器使⽤TCP 持久连接,以便其他请求复⽤
    	HTTP/1.1 版本的默认连接都是持久连接,但为了兼容⽼版本的HTTP,需要指定  Connection ⾸   	部字段的值为Keep-Alive。
    
    Content-Type 字段:⽤于服务器回应时,告诉客户端,本次数据是什么格式
    	Content-Type: text/html; charset=utf-8 发送的是网页,使用的是utf8格式
    
    客户端请求的时候,可以使⽤  Accept 字段声明⾃⼰可以接受哪些数据格式。
    	Accept: */*  客户端声明⾃⼰可以接受任何格式的数据。
    
    
    Content-Encoding 字段 :说明数据的压缩⽅法。表示服务器返回的数据使⽤了什么压缩格式
    

1.3 http 常见状态码

  • 5大状态码

301	Moved Permanently	永久移动,请求的资源已被永久的移动到新URI302	Found	临时移动,资源临时被移动,客户端应继续使用原有URI304	Not Modified	文件未修改,请求的资源未修改,服务器返回此状态码时,常用于缓存;



400	Bad Request	客户端请求的语法错误,服务器无法解析或者访问;
401	Unauthorized	请求要求用户的身份认证;
402	Payment Required	此状态码保留,为以后使用;

403	Forbidden	服务器理解请求客户端的请求,但是拒绝执行此请求;
404	Not Found	服务器没有该资源,请求的文件找不到;
405	Method Not Allowed	客户端请求中的方法被禁止;



500	Internal Server Error	服务器内部错误,无法完成请求;
502	Bad Gateway	服务器返回错误代码或者代理服务器错误的网关;
503	Service Unavailable	服务器无法响应客户端请求,或者后端服务器异常;
504	Gateway Time-out	网关超时或者代理服务器超时;
505	HTTP Version not supported	服务器不支持请求的HTTP协议的版本,无法完成处理。

1.4 http 报文介绍

  • http 协议主要有三大部分组成: 起始行、请求头、实体

  • 每个报文的其实行 都是由 3个字段组成:、

    • 方法: http、ftp等
    • URL:统一资源定位符 俗称 网址
    • http版本:

3.5 http 请求URL 介绍

  • 我们以访问http://www.example.com:80/path/to/myfile.html? key1=value1&key2=value2#SomewhereInTheDocument 为例。

    1. http://告诉浏览器使用何种协议。对于大部分Web资源,通常使用HTTP协议或其安全版本,HTTPS协议。另外,浏览器也知道如何处理其他协议。例如,mailto:协议指示浏览器打开邮件客户端;ftp:协议指示浏览器处理文件传输。
    
    2. www.example.com既是一个域名,也代表管理该域名的机构。它指示了需要向网络上的哪一台主机发起请求。当然,也可以直接向主机的 IP address 地址发起请求。但直接使用IP地址的场景并不常见。
    
    3. 端口。两个主机之间要发起TCP连接需要两个条件,主机+端口。它表示用于访问Web 服务器上资源入口。
    
    4.路径。 /path/to/myfile.html是 Web服务器上资源的路径。以端口后面的第一个/开始,到?号之前结束,中间的每一个/都代表了层级(上下级)关系。这个URL的请求资源是一个html页面。
    
    5.参数。?key1=value1&key2=value2是提供给Web服务器的额外参数。如果是GET请求,一般带有请求URL参数,如果是POST请求,则不会在路径后面直接加参数。这些参数是用&符号分隔的键/值对列表。key1 = value1是第一对,key2 = value2是第二对参数
    
    6.锚点.#SomewhereInTheDocument是资源本身的某一部分的一个锚点。锚点代表资源内的一种"“书签",它给予浏览器显示位于该“加书签”点的内容的指示。例如,在HTML文档上,浏览器将滚动到定义锚点的那个点上;在视频或音频文档上,浏览器将转到锚点代表的那个时间。值得注意的是#号后面的部分,也称为片段标识符,永远不会与请求一起发送到服务器。
    
    

3.6 http 版本

  • HTTP/1.0

    第一个在通讯中指定版本号的HTTP协议版本,常用于代理服务器。
    成为了面向事务的应用层协议,该协议需要每请求一次响应建立并拆除一次连接,
    引入了POSTHEAD命令
    相对于一版本在一定程度上保障的数据的传输安全,是一个典型的串行连接事务。
    缺点: 串行处理,效率低下
    
  • HTTP/1.1

    引入持久连接机制并被默认采用,且更好的配合代理服务器工作
    还支持管道方式同一连接下同时发送多个请求,以降低线路负载,提高传输速度
    新增方法: PUTPATCHOPTIONSDELETE
    缺点: 同一TCP连接里,所有通信按次序进行,服务器只能顺序处理回应,如果前面处理过慢,会有许多请求排队,造成队头阻塞(Head-of-line blocking)
    

  • HTTP/2.0

  • HTTP/1.1 与HTTP/2.0 区别

    1HTTP/2.0 采用二进制格式,而非文本格式
    2HTTP/2.0是完全的多路复用,非有序并阻塞的,只需要一个链接即可实现并行
    3、使用报头压缩,HTTP/2降低了开销
    4HTTP/2让服务器可以将响应主动 "推送"到客户缓存中
    

4. HTTPS协议

4.1 https 协议介绍

  • HTTPS(全称是 Hyper Text Transfer Protocol over SecureSocket Layer)是身披SSL/TLS 外壳的 HTTP。它在 HTTP 之上利用 SSL/TLS 建立安全的信道,加密数据传输。它被广泛用于互联网上安全敏感的通讯,例如电商、支付等应用
  • 对称加密:加密与解密用同一套密钥,如 DES、3DES 和 AES 等
  • 非对称加密:加密和解密所使用的密钥不同,如 RSADSA
  • HTTPS 是由 HTTPSSL/TLS协议构建的更为安全的网络协议
  • TLS 记录层协议规定数据的最大大小限制为16KB 字节

4.2 Cookie 和Session 会话

  • HTTP协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;Session和Cookie的主要目的就是为了弥补HTTP的无状态特性。

  • 客户端请求服务端,服务端会为这次请求开辟一块内存空间,这个对象便是Session对象,存储结构为ConcurrentHashMap 。Session 弥补了HTTP无状态特性,服务器可以利用Session存储客户端在同一个会话期间的一些操作记录。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。