介绍
HTTP(HyperText Transfer Protocol)超文本传输协议,计算机网络众多通讯协议中的一种,是用于服务端传送超文本至客户端浏览器的传送协议,基于TCP/IP通讯协议来传输数据。
补充
所谓通讯协议,实质上就是一种通信方式,比如古时候的烽火,当烽火点亮是代表有外敌,没有点亮则无事发生。而在电路、网路中成了二进制0和1,即高电平和低电平,通俗来讲就是有电和没电。但是若只有0和1传输的信息十分有限因而出现了多位二进制来组合成为特定的信息。而接入Internet这个超大型网路后,一条线往往不是单单为了两点间通信而设置的,且大多数的网络都是网状结构,如同蜘蛛网一般,而网络接入点之间往往还有着各种机器(如交换机)为整个网络服务,在如此复杂的公用网络上,若所有人都用各自创造的通讯协议在这公用的网络上通讯时,毫无疑问整个网络系统将无法良好的运作。因此人们制定标准,把多位二进制封装成各式各样的通讯协议,每个通讯协议都有各自的特点,它们的特点都是根据它们的服务对象而设定的,符合其应用场合的,一般其设定都是为了通讯的安全性和效率性。作为普通开发者并不需要了解太过深入,只需熟悉接入的信息发送与接收的方式以及错误反馈如何去处理,若是感兴趣的可以学习一下计算机网络这门课程。
工作原理
HTTP协议是使用在CS(客户端-服务端)架构上,浏览器(客户端)通过URL(统一资源定位符)向服务端发送请求。
特点
简单:每个资源都通过url来定位,一般想访问什么资源,输入url即可。
灵活:可以传输不同数据类型的数据(http协议头部有‘数据类型’项)
无连接:连接一次就会断开,不会保持连接(节省传输时间,节省资源)
无状态:第一次请求结束,断开后,第二次请求,服务器不会记住第一次请求的状态,即不会记忆之前的信息(记住账号密码是通过其它方式完成的,不是通过http,这样的优点是应答快)
HTTP报文结构
请求报文
响应报文
请求方法
GET:获取资源
POST:传输资源
PUT:更新资源
DELETE:删除资源
HEAD:获取报文头部
CONNECT:将服务器作为代理去访问其它网页然后返回数据
OPTION:允许客户端查看服务器的性能
TRACE:回显服务器收到的请求,主要用于测试或诊断
GET和POST的区别:
1.浏览器回退时,GET不会重新请求,POST会重新请求
2.GET请求会被主动缓存,POST不会
3.GET请求的参数会被保留在历史记录里,POST不会
4.GET请求直接暴露在URL上,POST请求放在请求体上
状态码
分类:
1**:信息,服务器收到请求,需要请求者继续执行操作
2**:成功,操作被成功接收并处理
3**:重定向,需要进一步的操作以完成请求
4**:客户端错误,请求包含语法错误或无法完成请求
5**:服务器错误,服务器在处理请求的过程中发生了错误
状态码 | 描述 |
---|---|
100 Continue | 继续。客户端应继续其请求 |
101 Switching Protocols | 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
200 OK | 请求成功。一般用于GET与POST请求 |
201 Created | 已创建。成功请求并创建了新的资源 |
202 Accepted | 已接受。已经接受请求,但未处理完成 |
100 Continue | 100 Continue |
100 Continue | 100 Continue |
100 Continue | 100 Continue |
203 Non-Authoritative Information | 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 |
204 No Content | 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
205 Reset Content | 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 |
206 Partial Content | 部分内容。服务器成功处理了部分GET请求 |
300 Multiple Choices | 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 |
301 Moved Permanently | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 Found | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
303 See Other | 查看其它地址。与301类似。使用GET和POST请求查看 |
304 Not Modified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
305 Use Proxy | 使用代理。所请求的资源必须通过代理访问 |
306 Unused | 已经被废弃的HTTP状态码 |
307 Temporary Redirect | 临时重定向。与302类似。使用GET请求重定向 |
400 Bad Request | 客户端请求的语法错误,服务器无法理解 |
401 Unauthorized | 请求要求用户的身份认证 |
402 Payment Required | 保留,将来使用 |
403 Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
405 Method Not Allowed | 客户端请求中的方法被禁止 |
406 Not Acceptable | 服务器无法根据客户端请求的内容特性完成请求 |
407 Proxy Authentication Required | 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权 |
408 Request Time-out | 服务器等待客户端发送的请求时间过长,超时 |
409 Conflict | 服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突 |
410 Gone | 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置 |
411 Length Required | 服务器无法处理客户端发送的不带Content-Length的请求信息 |
412 Precondition Failed | 客户端请求信息的先决条件错误 |
413 Request Entity Too Large | 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 |
414 Request-URI Too Large | 请求的URI过长(URI通常为网址),服务器无法处理 |
415 Unsupported Media Type | 服务器无法处理请求附带的媒体格式 |
416 Requested range not satisfiable | 客户端请求的范围无效 |
417 Expectation Failed | 服务器无法满足Expect的请求头信息 |
500 Internal Server Error | 服务器内部错误,无法完成请求 |
501 Not Implemented | 服务器不支持请求的功能,无法完成请求 |
502 Bad Gateway | 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求 |
503 Service Unavailable | 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
504 Gateway Time-out | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
505 HTTP Version not supported | 服务器不支持请求的HTTP协议的版本,无法完成处理 |
根据状态码反馈和报文信息处理前后端数据交互问题是开发者需要注意的地方。