一、定义

The Hypertext Transfer Protocol (HTTP) is an application protocol for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web. Hypertext is structured text that uses logical links (hyperlinks) between nodes containing text. HTTP is the protocol to exchange or transfer hypertext. -- wikipedia

从HTTP的定义可以看出,HTTP协议是互联网上进行数据通信的基础协议,用来交换或传输超文本。超文本是一种结构化的文本,在包含文本的节点之间使用逻辑链接(也叫超链接)。

二、概述

HTTP是基于TCP/IP协议的应用层协议。HTTP允许进行客户端和服务器之间的通信。通过HTTP或HTTPS请求的资源由URI(统一资源标识符)或URL(统一资源定位符)来标识。

在客户端-服务器的模式中,HTTP扮演着请求-响应协议的角色。客户端(通常是浏览器)提交HTTP请求消息给服务器。服务器可以提供HTML文件或其他类型的资源,或者代表客户端执行操作,返回响应消息给客户端。响应包含关于请求的完整状态信息。

三、历史

1、HTTP/0.9

该版本于1991年发布。

  • 只接受GET一种请求方法,没有指定版本号,且不支持请求头。
  • 服务器只能返回HTML格式的字符串。

2、HTTP/1.0

该版本于1996年发布。

  • 除了GET方法,还新增了POST和HEAD。任何格式的内容都可以发送。
  • 请求和响应的格式,除了数据部分,还包括头信息,用来描述元数据。
  • 新增了状态码、多字符集支持、权限、缓存、内容编码等功能。

3、HTTP/1.1

该版本于1997年发布。对1.0版本进行了修订和完善,并一直沿用至今。

  • 新增了PUT、PATCH、OPTIONS、DELETE等方法。
  • 客户端请求的头信息新增了Host字段,用来指定服务器的域名,这样就可以将请求发往同一台服务器的不同网站。
  • 新增了持久连接,可以被多个请求多次使用。
  • 新增了管道机制,在同一个TCP连接里,客户端可以同时发送多个请求,但服务器还是按照顺序进行响应。
  • 使用Content-Length声明本次响应的数据长度,以区分多个响应。

4、HTTP/2

该版本于2015年发布。

  • 头信息和数据都是二进制,统称为帧。对头信息进行了压缩。
  • 在一个TCP连接中,客户端可以同时发送多个请求或接收响应,不需要按照顺序一一对应。
  • 将每个请求或响应的所有数据包称为一个数据流,在发送数据包的时候必须标记属于哪个数据流。
  • 允许服务器主动向客户端推送,发送资源。

四、格式

每个HTTP请求和响应都遵循相同的格式,包含请求行/状态行、消息头(Header)和消息体(Body),其中消息体是可选的。

  • 消息头包含若干属性,但要保证一行只有一个属性,并且必须以\r\n(回车换行)结尾。
  • 当遇到空行时,后面的数据全属于消息体。

五、HTTP请求

1、请求行

GET / HTTP/1.1

其中,GET表示请求方法;/表示请求资源的路径;HTTP/1.1表示协议版本。

2、请求方法

用来表明对指定资源的操作方式。常用的请求方法有:

  • OPTIONS,返回服务器针对特定资源所支持的HTTP请求方法。
  • HEAD,与GET请求一致,只不过不会返回响应体。
  • GET,请求指定的资源。
  • POST,向指定资源提交数据进行处理请求,数据包含在请求体中,可能会导致新资源的创建或已有资源的修改。
  • PUT,向指定资源位置上传最新内容。
  • DELETE,请求服务器删除所标识的资源。

GET和POST方法的主要区别:

  • GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连。POST把提交的数据放在Body中。
  • GET提交的数据大小最多1024字节。POST提交的数据大小没有限制。
  • GET提交数据时,会出现在URL上。POST则不会出现在URL上。

3、请求头

是对请求的一种限定,包含很多属性。常用的属性有:

  • Accept,客户端可以接受的MIME类型。
  • Accept-Encoding,客户端可以接受的数据压缩格式。
  • Accept-Charset,客户端可以接受的字符集编码。
  • Accept-Language,客户端可以接受的语言。
  • User-Agent,客户端的一些基本信息,如使用的操作系统和浏览器的名称和版本等。
  • Content-Type,表示请求中的媒体类型信息。
  • Content-Length,表示请求消息体的长度。
  • Connection,指定是否继续保持连接。
  • Host,指定要访问的虚拟主机名和端口号。
  • Cookie,将cookie值发送给服务器。
  • If-Modified-Since,缓存资源的最后获取时间。

六、HTTP响应

1、状态行

HTTP/1.1 200 OK

其中,HTTP/1.1表示协议版本;200表示状态码;OK是状态说明。

2、状态码

根据响应结果的类型,大致分为以下几类:

2.1 1XX(信息类)

该类型状态码表示接收到请求并且继续处理。

  • 100,客户端必须继续发出请求。
  • 101,客户端要求服务器根据请求转换HTTP协议版本。

2.2 2XX(响应成功)

该类型状态码表示动作被成功接收、理解和接受。

  • 200,表明该请求被成功地完成,所请求的资源发送到客户端。
  • 201,提示知道新文件的URL。
  • 202,接受并处理,但处理未完成。
  • 203,返回信息不确定或不完整。
  • 204,收到请求,但返回信息为空。
  • 205,服务器完成了请求,用户必须复位当前已经浏览过的文件。
  • 206,服务器已经完成了部分用户的GET请求。

2.3 3XX(重定向类)

该类型状态码表示为了完成指定的动作,必须接受进一步处理。

  • 300,请求的资源可在多处获得。
  • 301,本网页被永久性转移到另一个URL。
  • 302,请求的网页被重定向到新的地址。
  • 303,建议用户访问其他URL或访问方式。
  • 304,自从上次请求后,请求的网页未修改过。
  • 305,请求的资源必须从服务器指定的地址获得。
  • 306,前一版本HTTP中使用的代码,现已不再使用。
  • 307,声明请求的资源临时性删除。

2.4 4XX(客户端错误类)

该类型状态码表示请求包含错误语法或不能正确执行。

  • 400,客户端请求有语法错误。
  • 401,请求未经授权。
  • 402,保留有效ChargeTo头响应。
  • 403,禁止访问,服务器收到请求,但拒绝提供服务。
  • 404,可连接服务器,但服务器无法取得所请求的网页,请求资源不存在。
  • 405,用户在Request-Line字段定义的方法不被允许。
  • 406,根据用户发送的Accept,请求资源不可访问。
  • 407,类似401,用户必须首先在代理服务器上取得授权。
  • 408,客户端没有在用户指定的时间内完成请求。
  • 409,对当前资源状态,请求不能完成。
  • 410,服务器上不再有此资源。
  • 411,服务器拒绝用户定义的Content-Length属性请求。
  • 412,一个或多个请求头字段在当前请求中错误。
  • 413,请求的资源大于服务器允许的大小。
  • 414,请求的资源URL长于服务器允许的长度。
  • 415,请求资源不支持请求项目格式。
  • 416,请求中包含Range请求头字段,在当前请求资源范围内没有range指示值。
  • 417,服务器不满足请求Expect头字段指定的期望值。

2.5 5XX(服务器错误类)

该类型状态码表示服务器或网关错误。

  • 500,服务器错误。
  • 501,服务器不支持请求的功能。
  • 502,网关错误。
  • 503,无法获得服务。
  • 504,网关超时。
  • 505,不支持的http版本。

3、响应头

是对响应的一种限定,包含很多属性。常用的属性有:

  • Location,实现请求重定向。
  • Server,服务器的基本信息。
  • Content-Encoding,服务器发送数据时使用的压缩格式。
  • Content-Language,发送的数据所用的语言。
  • Content-Type,所发送的数据的类型。
  • Content-Length,发送数据的大小。
  • Set-Cookie,把cookie发送到客户端。
  • Last-Modified,指示资源的最后修改日期和时间。

转载于:https://www.cnblogs.com/gefenghua/p/6289273.html

HTTP协议快速入门相关推荐

  1. http协议 服务器主动下发,HTTP协议快速入门指南

    看完下面的文章,回答这几个问题 常用的HTTP方法有哪些 GET方法与POST方法的区别 HTTP请求报文与响应报文格式 常见的HTTP相应状态码 HTTP1.1版本新特性 常见HTTP首部字段 HT ...

  2. FlexRay总线协议快速入门、深度剖析与应用示例

    传统的CAN.以太网采用CSMA/CD的机制来进行媒体访问,导致报文传输有延时,系统响应的行为具有不确定性,FlexRay协议采用TDMA和FTDMA相结合的方式,可以满足实时系统的确定性和实时性,响 ...

  3. 不经意传输协议快速入门

    不经意传输 一.介绍 不经意传输(oblivious transfer)又简称OT.是一种可保护隐私的双方通信协议.接受者的隐私不被发送者所知道,使通信双方以一种选择模糊化的方式传送消息.抽象地讲,就 ...

  4. 【使用C++开发MCU】04-CAN实例之CAN FD协议快速入门

    概述 随着现代技术的进步,自90年代开始使用的CAN协议[Classical CAN protocol (ISO 11898-1:2015) ]在各个邻域具有广泛应用但也面临巨大的压力. 因此,本专栏 ...

  5. CAT1模块EC200S 4G物联网模块串口透传MQTT协议 快速入门指导资料

    EC200S是广州斯迈尔特推出的一款工业级,小体积自带STM32CPU,引出串口.SPI\AD等常用接口,用户只要通电就能应用到自己的产品中.EC200S的版本已经完全可以支持UDP TCP PPP ...

  6. 物联网IoT协议之OPC UA快速入门教程

    本文转载,原文作者:源码先生, 文章链接:https://www.debugself.com/2019/11/27/opc_guide/, 请勿用于商业用途.如有侵权,请告知删除,谢谢! 八大物联网I ...

  7. 张赐荣:计算机网络快速入门教程

    计算机网络协议快速入门 [编辑 / 张赐荣] 我们每天都使用互联网.你有没有想过,它是如何工作的? 全世界几十亿台电脑,连接在一起,两两通信.上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了, ...

  8. Servlet和HTTP请求协议-学习笔记01【Servlet_快速入门-生命周期方法、Servlet_3.0注解配置、IDEA与tomcat相关配置】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

  9. Day14-HTTP协议 web开发概述 servlet快速入门

    HTTP:HyperText Transfer Protocol 超文本传输协议 用于定义web浏览器和web服务器之间交换数据的过程 特点: 基于请求/响应模型的协议.请求和相应必须成对出现,现有请 ...

最新文章

  1. Git credential helper 让你的 https不再需要输入用户名密码
  2. Ashby diagram
  3. python中sign函数图片_python接口自动化-实现sign签名(MD5加密)
  4. Oracle中sys和system的区别
  5. 动态规划-直方图最大长方形
  6. 探讨对理想团队模式构建的设想及软件流程的理解
  7. javascript设计模式——Publish/Subscribe
  8. ehcache springboot_阿里内部进阶学习SpringBoot+Vue全栈开发实战文档
  9. Android开发16——获取网络资源之基础应用
  10. ascii码与hex转换c语言,ASCII与HEX对照转换表(示例代码)
  11. MATLAB调用ANSYS进行有限元分析
  12. JAVA深度学习文本审核_内容审核-文本
  13. Android中的Switch控件
  14. 2021-11-13 信道划分介质访问控制ALOHA协议CSMA协议
  15. win10屏幕亮度调节不见了,调节不了,解决办法
  16. QT TCPsocket 封包 粘包分析
  17. Debian 下安装中文语言包和中文输入法
  18. 【实战】如何有效的进行测试用例评审(测试用例评审又臭又长,怎么办)
  19. FPGA第五节:ADDA实验
  20. 计算机操作系统——学习笔记(下)

热门文章

  1. TypeScript 原来可以这么香?!
  2. MySQL数据库语句总结
  3. Go语言与数据库开发:01-09
  4. webpack开发Vue配置
  5. IP地址转化为数字,charindex ,SUBSTRING
  6. hdu 5310 Souvenir
  7. SWFUpload V2.2.0 说明文档
  8. 20189215 2018-2019-2 《密码与安全新技术专题》第7周作业
  9. J - 青蛙的约会(扩展欧几里得)
  10. C++中STL的一些用法的补充