网络协议 -- HTTP协议

一、HTTP协议介绍

1.1 什么是HTTP

HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP协议位于TCP/IP协议栈的应用层。

HTTP是一个客户端和服务器端请求和应答的标准,主要用于从万维网(即WWW,全称 World Wide Web)服务器传输超文本到本地浏览器之间的请求数据和响应数据的协议。客户端通过使用网页浏览器或者其它的工具发起一个HTTP请求到服务器上指定端口(默认端口为80),服务器在收到请求之后,返回响应内容(文本、图片等)。

HTTP协议是基于TCP协议来进行数据传输的。

1.2 HTTP的版本

HTTP协议已经演化出了很多版本,它们中的大部分都是向下兼容的。客户端在请求的开始告诉服务器它采用的协议版本号,而后者则在响应中采用相同或者更早的协议版本。现在大多使用的都是1.1版本。

  • 1.0版本: HTTP 协议非常老的标准,为了提高系统的效率,HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。正式因为这种特性造成了一些性能上的缺陷。

  • 1.1版本: 克服了HTTP 1.0的缺陷,HTTP 1.1支持持久连接(HTTP/1.1的默认模式使用带流水线的持久连接),在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。同时还增加更多的请求头和响应头来改进和扩充HTTP 1.0的功能(如POST请求头字段等)。

  • 2.0版本: 2015年5月作为互联网标准正式发布。主要新增如下特性:多路复用,二进制分帧,首部压缩,服务端推送。

三、HTTP消息请求

3.1 URI、URL、URN

通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource IdentifiersURI)来标识。我们常用的是URL,那么URI, URL, URN之前有什么区别和联系了?

URI = Uniform Resource Identifier 统一资源标识符
URL = Uniform Resource Locator    统一资源定位符
URN = Universal Resource Name     统一资源名称

三者关系如下图:
这里写图片描述

URI用来唯一标识符来标识一个资源,是一个通用的概念,URIURLURN两个子集组成。

URL通过描述资源的位置来标识资源。

URN通过资源的名字来标识资源,与其所处的位置无关,这样即使资源的位置发生变动,其URN也不会变化。

HTTP规范将更通用的概念URI作为其资源标识符,但是实际上,HTTP应用程序处理的只是URI的URL子集.

3.1 消息请求格式

这里写图片描述

3.2 HTTP常见的请求方法

HTTP消息请求的第一个字段就是“请求方法”,HTTP 1.1 中定义的几种常见的请求方法如下(只列出了常用的):

  • GET
    向服务器获取数据。使用GET请求方法时,消息Body中没有“请求数据”(见上面消息格式的图)部分,所以将需要提交到服务器的数据放在URL中,因此能够提交到服务器的数据会受到URL长度的限制。
    这里写图片描述
 各个浏览器对URL长度的限制如下(这些限制值可能随着浏览器的版本的更新而发生改变,仅供参考):
1. IE浏览器(Microsoft Internet Explorer) 对URL长度限制是2083(2K+53),超过这个限制,则自动截断(若是form提交则提交按钮不起作用)。
2. Firefox
Firefox(火狐浏览器)对URL长度限制是65536字符,但实际上有效的URL最大长度不少于100,000个字符。
3. Chrome
chrome对URL长度限制是8182个字符。
4. Safari
Safari对URL长度限制是80000字符。
5. Opera
Opera浏览器对URL长度限制是190000 字符。
  • POST
    向服务器提交数据(例如提交表单或者上传文件)。提交的数据包含在Body中。
    这里写图片描述

四、HTTP消息响应

4.1 消息响应格式

这里写图片描述

这里写图片描述

4.2 HTTP状态码

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

1xx消息—— 请求已被服务器接收,继续处理
2xx成功 —— 请求已成功被服务器接收、理解、并接受
3xx重定向 —— 需要后续操作才能完成这一请求
4xx请求错误 —— 请求含有词法错误或者无法被执行
5xx服务器错误 —— 服务器在处理某个正确请求时发生错误

常见的状态码有:

200 OK                        //客户端请求成功
400 Bad Request               //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized              //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
403 Forbidden                 //服务器收到请求,但是拒绝提供服务
404 Not Found                 //请求资源不存在,比如:输入了错误的URL
500 Internal Server Error     //服务器发生不可预期的错误
503 Server Unavailable        //由于超载或系统维护,服务器暂时的无法处理客户端的请求

关于HTTP状态码的完整定义见:https://tools.ietf.org/html/rfc2616#page-39

china_jeffery CSDN认证博客专家 C/C++ Qt Node.js
持续学习者;
擅长开发开源组件及相关工具;
长期致力于应用各种IT新技术提升生产效率和解决实际问题;
china_jeffery@163#com
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值