极客HTTP协议学习笔记基础篇(8-14)

8、浏览器键入网址再回车,发生了什么

  • 域名解析,TCP连接,发送请求,响应请求,浏览器解析响应渲染页面

9、HTTP报文的结构

  • HTTP协议的核心部分是它传输的报文内容
  • HTTP协议在规范文档里详细的定义了报文的格式,规定了组成部分,解析规则,处理策略,所以可以在TCP/IP层之上实现更灵活丰富的功能,例如连接控制,缓存管理,数据编码,内容协商等。
  • HTTP协议的请求报文和相应报文结构基本相同,由以下三大部分组成
  1. 起始行:描述请求或相应的基本信息
  2. 头部字段集合:使用key-value形式更详细的说明报文
  3. 消息正文(entify):实际传输的数据
    其中前两部分又合称“请求头”或“响应头”,消息正文又称为“实体”
  • HTTP协议规定报文必须有header,可以没有body,且在header之后必须有一个空行,也就是“CRLF”,十六进制的“0D0A”
  • 请求行:简要的描述了客户端想如何操作服务器端的资源
    请求行=请求方法+请求资源路径+协议版本号组成
    这三部分以空格来分隔,最后要用CRLF换行表示结束,CRLF 意思是回车换行,就是回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)
  • 状态行:服务器响应的状态。状态行=协议版本号+状态码+原因。同样是空格分隔,末尾是CRLF
  • 头部字段:键值对的形式,key和value之间用":"分隔,最后用CRLF标识结束,HTTP的头部字段非常灵活,不仅可以使用标准内定义的头部字段,也可以自定义添加任意头(这里要注意如果请求经过nginx,那么nginx会默认会删掉带英文下划线的头部字段,需要配置后才可以使用带下划线的头部字段)
  • 注意的点
  1. 头部字段不区分大小写
  2. 字段名里不允许出现空格,推荐使用"-“而不使用”_"
  3. 字段名后紧跟":",不能有空格,但":“后可以有多个空格(最好还是规范写,一般”:"后是一个空格,rfc标准是0个或多个,但一个空格已经成为习惯了,所以是都可以的)
  4. 字段原则上不能重复,除非这个字段本身的予以允许,例Set-Cookie
    如果请求出现错误,会显示400的错误,表示请求有误,即请求信息无法被服务器理解
  • 头字段分类

  • 通用字段:请求头响应头都可以出现

  • 请求字段:只能出现在请求头里,进一步说明请求信息或额外的附加条件

  • 响应字段:仅能出现在响应头,补充说明响应报文信息

  • 实体字段:实际属于通用字段,专门用来描述body的额外信息

  • Host:必须要求的头字段

  • User-Agent: 只出现在请求头,用于描述发起HTTP请求的客户端(仅作为参考,不一定为实际客户端信息)

  • Date:通用字段,通常出现在响应头,表示HTTP报文创建的时间,客户端可以根据这个时间搭配其他字段决定缓存策略。

  • Server: 响应字段,表示正在提供Web服务的软件名和版本号

  • Content-Length: 实体字段,表示body的长度,也就是请求头或者响应头空行后面的数据的长度,服务器根据这个字段了解后续有多少数据,如果没有这个字段,那么body就不定长,需要使用chunked方式分段传输

10、请求方法的理解

  • HTTP/1.1 规定了八种方法,必须是大学形式
  • GET 获取资源,可以理解为读取或下载数据,这个资源即可以是静态的文本、页面、图片、视频,也可以是由PHP,JAVA动态生成的页面或者其它格式的数据。
    • HEAD 获取资源的元信息,与GET类似,但HEAD方法不会返回请求体,只返回头部信息
  • POST 向资源提交数据,相当于写入或上次数据
  • PUT 类似POST,但POST一般有“新建”的含义,而PUT则是“修改”的含义
  • DELETE 删除资源,这个动作危险性比较大,通常服务器只是对资源做一个删除标记,更多的时候服务器直接就不处理DELETE请求
  • CONNECT 建立特殊的连接隧道,要求服务器为客户端和另一台服务器建立特殊连接隧道,这时Web服务器在中间担任代理的角色。
  • OPTIONS 列出可对资源实行的方法,要求服务器列出可对资源实行的操作方法,在响应头的Allow字段里返回(Nginx未实现对它的支持)
  • TRACE 追踪请求 - 响应的传输路径,多用于对HTTP链路的测试或诊断,可以显示出请求-响应的传输路径。存在漏洞,Web服务器通常是禁止使用的

安全和幂等
安全 指请求方法不会“破坏”服务器上的资源,即不会对服务器上的资源造成实质的修改。如GET,HEAD请求
幂等 多次执行相同的操作,结果也相同,即多次“幂”后结果“相等”,如GET,HEAD,DELETE,PUT

11、正确的网址

  • URI = URL+URN,本质是一个字符串,用来唯一的标记资源的位置或名字。它不仅能标记万维网的资源,也可以标记其它的,例如邮件系统,本地文件系统等任意资源,而“资源”可以是磁盘上的文件也可以是JAVA等提供的动态服务,例如:file:///D:/http_study/www/,这里的://是URI固定的特殊分隔符,而"/D:/http_study/www/"表示文件的路径,中间的主机名被省略了,file协议允许省略主机名,默认是本机localhost
  • URI的查询参数:操作资源的附加参数,一般再URI的末尾"?“后的信息,多个参数以”&"分隔
    URI编码转义使用%,HTML转义使用的是&#

12、正确使用相应状态码

  • 状态码:一个十进制数字,以代码的形式表示服务器对请求的处理结果,RFC标准规定状态码是三位数,具体分成五类,第一位表示分类,0~99不使用,因此状态码的范围为100-599,这五类的具体含义:
  • 1xx:提示信息,表示目前是协议处理的中间状态,还需要后续操作
  • 2xx:成功,报文已被接受并被正确处理
  • 3xx:重定向,资源位置发生移动,需要客户端重新发送请求
  • 4xx:客户端错误,请求报文有误,服务器无法处理
  • 5xx:服务器错误,服务器在内部处理发生了错误

13、HTTP有哪些特点

  • HTTP是一个“灵活可扩展”的传输协议:只规定的报文的基本格式,报文无严格的语法语义限制
  • HTTP是一个“可靠”的传输协议:因为HTTP基于TCP/IP,“可靠”类似一种承诺,指网络在基本正常的情况下收发数据必定成功。
  • HTTP是一个“应用层”的协议。相对于其他应用层协议,例如FTP只能传输文件,SMTP只能发送邮件,SSH只能远程登录,这些应用层协议局限在很少的应用场景,而HTTP因其灵活可扩展,应用场景广得多。
  • HTTP协议使用的是 请求-应答 通信模式。请求-应答 模式也完全符合RPC的工作模式,可以把HTTP请求处理封装成远程函数调用,因此后来有了WebService,restful,gRPC的出现
  • HTTP协议是无状态。每次收发报文都是互相独立的,没有任何联系。
  • 其它特点:传输实体数据可缓存可压缩,可分段获取数据、支持身份认证、支持国际化语言等
    如果要100%保证数据收发成功就不能使用HTTP或TCP,而是要使用消息中间件(MQ),如RabbitMQ,ZeroMQ,Kafka等

14、HTTP的优缺点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值