HTTP协议——学完之后的总结(上)

前言:

最近面了360搜索的后台开发,面试内容比较一般,问了问项目,再问了问算法,都答了上来,但是最后自己脑残问了个面试官不喜欢的问题,结果就挂了。想来没什么好总结的,就说说之后的打算把。

4月份以来,一直在找实习,准备面试,笔试的过程中,结果这个月基本没有怎么学习了。看看自己的博客更新记录和github的push记录,简直惭愧。以前那个一心奋斗,一定要进入bat的那个人哪里去了。在离目标这么接近的时候放弃了,我对不起我自己一年多的努力,也只会让我的前女友更加看不起我了。

之后的日子,打算先花两周看完《STL源码解析》,并且中间必须要更新博客,然后再花两周时间写一个HTTP服务器,不一定要多复杂,要让自己熟悉写一个复杂服务器的过程。然后再后面的时间查漏补缺,看看有什么可以研究的源码,让自己的项目经历上可以多写一写东西。

除此之外,保证每天做3到leetcode的题目。而且我买的剑指offer也还没有读。没有时间再拿来浪费了。

我的github:

github又快一个月没有更新过了,不过现在已经做了200题,按照一天3题的速度应该一个月可以做完第一遍吧。

https://github.com/YinWenAtBIT

一、HTTP知识树:


该图记录了http协议需要了解的各个部分,我将从上往下解说。

二、知识点总结:

2.1:关键词:

平时会经常接触到URL,他就是我们访问web的一个字符串地址,那么URI是什么呢?他们是什么关系呢?
先看看官方的解释:
URL:uniform resource location 统一资源定位符
URI:uniform resource identifier 统一资源标识符
这也就是说,URI是一种资源的标识;而URL也是一种URI,也是一种资源的标识,但它也指明了如何定位Locate到这个资源。

URI是一种抽象的资源标识,既可以是绝对的,也可以是相对的。但是URL是一种URI,它指明了定位的信息,必须是绝对的。
而我们平时所说的相对地址,仅仅是相对于另一个绝对地址而言。

2.2:基本概念:

1. http用于客户端和服务端之间的通信,运行在应用层之上。

2. 客户端发送请求,服务端回复相应达成通信。(客户端没有发送请求时,服务端不会发送相应)

3. HTTP是不可以保存状态的协议(不保存通信状态,因此之后引入了cookie)

4. 使用URI定位资源

5. 可以使用持久链接节省通信量,使用持久链接时,TCP连接不会断开

6. 使用持久链接时,可以使用管线化技术,即可以一次发送多个http请求,不必等回复。

2.3:HTTP方法:

1. GET方法,用于获取资源,POST与GET都用于获取信息,但是GET方式仅仅是查询,并不对服务器上的内容产生任何作用结果;每次GET的内容都是相同的,GET方法必须把查询的URL放在HTTP首部中,大小会有限制。(查)

2. POST方法:POST则常用于发送一定的内容进行某些修改操作,POST方法可以把内容放在报文中,大小不受限制(改)

3. 在GET方法中传递的参数在报文首部,而POST方法中的数据在报文段,相对来说,POST方法安全性更高。

4. PUT方法:用来上传文件,保存在URI指定位置,一般不用(增)

5. DELETE方法:删除URI所指向的内容,一般不用(删)

6. HEAD方法:和GET方法一样,但是不返回报文主体部分,用于确定URI的有效性和更新时间日期等。

7. OPTIONS方法:用来确定HTTP服务器支持的方法。

8. TRACE方法:用来追踪http报文是如何被代理中转的,一般不用(类比traceroute)

9. CONNECT方法:在于代理服务器建立隧道时使用,主要使用SSL协议吧通信内容加密后经隧道传输。

2.4:HTTP报文:

报文格式:


其中空行用于区分报文首部和报文主体内容,是由一个回车符和一个换行符组成。
无论是请求报文还是响应报文都需要有报文首部,当然报文主体有的请求报文是没有的。
请求报文首部由以下组成:

1. 请求行:包含请求方法,请求URI,和HTTP版本

2 请求字段:包含首部请求字段,通用首部字段,实体首部字段(用来传递KEY——VALUE对,实际表示的各种参数)

相应报文首部:

1. 状态行:包含HTTP版本,响应结果的状态码,原因短语

2. 各种字段:同上

报文主体:

由于某些报文的内容过大,因此在传输时,为了减少传输的时间,会采取一些压缩的措施。
例如上面的报文信息中,Accept-Encoding就定义了内容编码的格式:gzip
有下面几种方式:
gzip:GNU压缩格式
compress:UNIX系统的标准压缩格式
deflate:是一种同时使用了LZ77和哈弗曼编码的无损压缩格式
identity:不进行压缩

部分请求:

有些场景下,http报文请求一些很大的图片,但是加载过程很慢。
比如我们登录一些大图片的网址,会发现有时候图片是一块一块加载的。
这就是因为设置了http请求的长度,这样就可以分块的加载资源文件。
在请求报文中使用Range属性,在响应报文中使用Content-Type属性都可以指定一定字节范围的http请求。
 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值