前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Http 协议

Http 协议

作者头像
呼延十
发布2019-07-01 16:21:23
4660
发布2019-07-01 16:21:23
举报
文章被收录于专栏:呼延呼延

HTTP(Hypertext Transfer Protocol),超文本传输协议,他是现代互联网最基本也是最重要的协议。Http协议是无状态的,应用层协议,是web开发的基础。

Http基础

http协议,简单的说就是客户端用固定格式向服务器发送一条信息,服务器收到此请求之后经过处理返回一个固定格式的数据。

URL

如果我们想访问一个网站,并不需要熟悉http协议,只需要在浏览器中输入对应网站的URL即可。

URL用于描述一个网络上的资源。就像门牌号之于房子一样的作用。

http://www.google.com:80/search?name=huyanshi#top 在上面这个url中: http:指定所用的协议,原先为http,最近大部分网站都已经使用更加安全的https。 www.google.com:host地址,经过解析可以得到网站的ip地址。 80:端口号。Http服务器的默认端口是80,这种情况下端口号可以省略。 /search:访问的资源在服务器上的路径。 ?name=huyanshi:发送给服务器的数据。 #top:锚。

请求Method

我们通过url告诉了浏览器我们要访问的资源路径,那么我们对这个资源想做什么呢?这个操作就是通过method定义的,http1.1定义了8种标准的操作。

GET:GET方法应该仅被用在向服务器请求查看一个数据时。

POST:POST请求会向指定的自愿提交数据,请求服务器进行处理。

HEAD:HEAD方法只会获取服务器响应的响应头信息,常用于客户端查看服务器端的性能。

PUT:PUT方法向指定的资源位置上传其最新内容,通常用于上传文件。

DELETE:删除对应资源。

CONNECT:Http1.1预留。

OPTIONS:返回对应资源支持的Http请求方法。

TRACE:回显服务器收到的信息。

其中,PUT,DELETE,POST,GET对应数据操作的增删改查,其中又以GET和POST最为常用。

GET和POST的区别和联系

这个问题也是面试问题里的常客了,但是其实很难说的清楚,网上的答案也是各抒己见,并无统一答案。 我的理解是,GET和POST最大的区别是语义区别,GET用于请求数据,POst用于提交数据。(http规范里规定,但是具体实现的时候有没有遵守就不一定了,后面所说的很多区别都是规范,而不是强行要求的实现。)

区别有:GET是安全的,幂等的,可缓存的,POST是不安全的,不幂等的,不可缓存的。

安全性:

对于服务器的安全性:GET请求只用于获取数据,不会修改服务器资源,因此对于服务器而言GET方法是安全的,而POst会提交一部分数据,服务器根据数据对资源进行修改,因此对于服务器而言Post方法不安全。

对于用户的安全性:GET方法将请求参数放在URL里进行明文传输,如果参数中包含密码,手机号码等内容会直接显示并且所有人可见,并且Url会及谁来浏览器中。POST方法对请求数据写在请求体中,也是明文传输,但是比起GET是安全了一点点的,,,,,。

幂等的: GET:规范中的GET方法连续执行多次,得到的结果应该是一样的。 POST:POST执行每一次可能都会对服务器端的资源进行改变,因此执行多次结果会不同。 这也就是为什么当你在浏览器中点击返回按钮,有时候会提醒你,当前页面提交表单,如果返回或者刷新会造成表单重复提交,请你确认操作的原因。

可缓存的:顾名思义就是一个方法是否可以被缓存,此RFC里GET,HEAD和某些情况下的POST都是可缓存的,但是绝大多数的浏览器的实现里仅仅支持GET和HEAD。

大多数的区别都是“语义”区别而不是“语法”区别 就像你也可以用GET来提交一个参数,而用POST方法查询一个数据,但是这样会造成语义混乱!千万不要!

关于GET和POST的区别,我看到一个讲的很好的小栗子,分享给大家:

微博场景中:

www.weibo.com?id=222 使用这个URL查看一条微博,应该用GET请求,这样你分享给别人,别人访问这个URL就可以看到这条微博。而如果使用POST,别人拿到这条URL是“www.weibo.com”,毫无意义。

www.weibo.com?user=huyanshi&content=xixixi 而发微博,点赞,评论这样的操作就应该使用POST请求。使用上面这条URL为huyanshi用户发一条内容为xixixi的微博,那么别人复制一下这条URL也可以替你发一条微博了。

HTTP状态码

客户端通过METHOD定义请求类型,服务端通过返回的状态码告诉客户端相应类型。

http1.1定义了5类状态码。状态码由三位数字组成,第一个数字定义了响应的类别。

1XX:表示q请求已经成功接收,可以继续发送请求,如果已经发送完成可以忽略此状态码。 2XX:成功。 3XX:重定向。要想完成请求需要进行下一步的处理。 4XX:客户端错误。请求有语法错误或者请求无法实现。 5XX:服务器错误。服务器对于合法的请求处理过程出现错误。

常见状态码:

代码语言:javascript
复制
200 				//成功
400 Bad Request  //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden  //服务器收到请求,但是拒绝提供服务
404 Not Found  //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
ChangeLog

2018-03-27 完成

以上皆为个人所思所得,如有错误欢迎评论区指正。

欢迎转载,烦请署名并保留原文链接。


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Http基础
  • URL
  • 请求Method
  • GET和POST的区别和联系
  • HTTP状态码
    • ChangeLog
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档