Http协议详解

前言

这篇博客是我查阅别人的博客和一些资料,加上自己的理解写的,纯手打不易。其实以前也学过计算机网络,只是当时没引起重视,现在再来学习一下更加细节的东西。有补充或者纠错的话,请在下面留言补充,我及时更新。

http是什么?

http:hyper text transfer protocol,超文本传输协议。

用来干嘛?

用于从www(world wide web)服务器传输数据到本地浏览器的协议。

工作在哪里?

应用层,工作在客户端与服务器这种架构上。客户端通过http协议向服务器发送url 请求,服务器再将数据返回给客户端。

特点是什么?

1、简单快速:客户端只需向服务端发送请求路径与方法,服务器就会根据不同的路径与方法返回相应数据,由于http请求简单,因此服务器程序规模小,响应快速。

2、传输数据灵活:http可以传输任意类型的数据。类型由content-type决定。

3、无连接:即每次连接只处理一个请求,服务器在收到客户端请求载返回数据给客户端,收到客户端应答之后,即断开连接,采用这种方式都可以节约传输时间。

4、支持b/s,c/s架构

5、无状态:即协议对传输状态没有记忆,如果后续处理需要用到之前的状态就必须重新加载,显然,这样的话,传输数据就比较大。

工作流程是什么?

1、建立tcp连接:比如点击一个超链接:www.baidu.com,http的工作就开始了。

2、建立连接后,发送请求报文,请求报文包括:请求行,请求头,空行,请求数据

3、服务端接受请求并返回响应,服务端解析请求,查找资源,将资源返回给客户端。一个响应包括:响应行,响应头,空行,响应数据。

4、释放tcp连接:若connection状态为close,则服务器主动关闭连接,客户端被动关闭连接;若connection状态为keepalive,则该请求还会保持一段时间,在这段时间内还可以请求数据。

5、客户端渲染html内容:客户端首先解析状态行,如果状态成功,然后解析响应头,响应头则告知了应该处理的若干字节的html文档,客户端读取响应数据,根据语法规则进行渲染 。

对http有了初步了解之后,我们从请求开始看。

http请求request

之前工作流程中讲了发送请求包括的几部分,现在一一来看他们是什么。我随便点击一个开源中国的请求作为例子。

100950_DWWM_3802541.png

 

1、请求行:

就是general里面的内容,表明了请求的方法,请求的协议,请求的url地址,和氢气的状态码。

2、请求头:

就是request  header里面的内容

3、空行:

请求头后面的空行是必须的

4、请求数据:

也叫主体,可以放任意的数据,我这里的请求数据就是我编辑的博客的文档内容,与我的账号的一些信息。

看了请求,再看请求里的内容,先看url。

http之url

是什么:

url:UniformResourceLocator,统一资源定位符,是互联网上用于标注某一资源的位置。属于uri的一种。

说到这里,那就先说一下,uri。

uri:统一资源标识符,用于唯一地标识一个资源。

互联网上,一个html文档,一张图片,一个视频,一段程序等都是由一个uri来定位的。

uri的构成:

(1)、访问资源的命名机制;

(2)、存放资源的主机名;

(3)、资源自身的名字;

再说回url

举个栗子:https://my.oschina.net:8080/u/3802541/blog/edit?id=123&pwd=123#name

(1)、协议:前面的https就是协议;

(2)、域名:my.oschina.net,在一个url中也可以使用ip地址作为域名;

(3)、端口号:8080,端口不是必须的,如果省略的话,使用默认端口;

(4)、虚拟目录:端口号后面的第一个“/”开始到最后一个“/”之间就是虚拟目录;

(5)、文件名:从最后一个“/”到“?”之间就是文件名,如果没有“?”的话就是最后一个“/”到“#”之间,如果“?”和“#”都没有的话,就是最后一个“/”之后的都是文件名,当然,文件名也不是必须的,没有的话,就是用默认的文件名;

(6)、参数部分:“?”之后到“#”之前都是参数,参数使用“&”符号链接,也不是必须的;

(7)、锚部分:“#”之后的。

好了,说了请求的url,再说说下一个,请求的方法。

请求的方法有哪些?

http1.0定义了三种方法:get、post、head

http1.1定义了新的方法:options、put、delete、trace、connect

介绍一下每种方法都是干嘛的。

(1)、get:请求指定的页面信息,并返回实体主体;

(2)、post:向指定资源提交数据进行处理请求,数据被包含在请求体中;

(3)、head:类似于get请求,不过返回的响应内容没有响应数据,只有头部;

(4)、options:允许客户端查看服务器的性能;

(5)、put:从客户端传送的数据替代指定文档的内容;

(6)、delete:请求服务器删除指定的页面;

(7)、trace:回显服务器收到的请求,用于测试或诊断;

(8)、connect:http1.1中预留给能够将连接改为管道方式的代理服务器;

说了请求方法,再说一下get请求与post请求的区别,前段时间考试的时候遇到过,没有答的很全面。

get请求与post请求的区别

(1)、提交数据的方式不同:get提交数据会将要提交的数据放在url中的?后面,而post则是将要提交的数据放在请求的body中;

(2)、提交数据的大小限制:get提交的数据大小有限制(因为url长度有限),post请求的数据长度无限制;

(3)、关于缓存:get请求可以被缓存,而post请求不可以被缓存;

(4)、浏览器历史记录:get请求可以保存在浏览器历史记录中,而post请求不会保存在浏览器历史记录中;

(5)、关于收藏书签:get请求可以被收藏为书签,而post请求不可以被收藏为书签;

(6)、对数据类型的限制:get请求只允许ASCII字符,post请求没有限制,也允许二进制;

(7)、可见性:get请求数据在url中可见,post请求载url中不可见;

(8)、安全性:get请求发送的数据会在url中,可以被查看,因此相对于post来说不太安全,而post请求相对来说较为安全,因为数据不会被保存在浏览器历史或web服务器日志中。因此,如果要传密码的话,肯定不能用get请求;

(9)、后退:get请求后退无害,post请求后悔的话,数据会被重新提交(因此应该提醒用户数据会被重新提交);

状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

112953_F4L9_3802541.png

点击这个查看具体的一些状态码的解释

http之响应消息Response

前文说过,响应报文是由响应行,响应头,空行,响应体组成。

113407_Bttr_3802541.png

一一来解释:

(1)、响应行:由协议、状态码、状态消息构成;

(2)、响应头:说明客户端要使用的一些附加信息;

(3)、空行:消息头后的空行是必须的;

(4)、响应数据体,是服务器返回给客户端的数据,这里是一个html文档。

好啦,我相信看了这篇博客之后,对理解http就有一定的了解了,想要深入的话,可以去看一下大神的博客和官方的文档。

为步入社会参加工作做准备,加油。

转载于:https://my.oschina.net/u/3802541/blog/1791655

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值