HTTP协议快速入门

http_icon.jpg

一、定义

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请求

01_request_header.jpg

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响应

02_response_header.jpg

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://www.mzph.cn/news/291678.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

删除含有关键词的文件_AweEraser——macOS Catalina最佳的文件粉碎机

您是否正在寻找适用于macOS Catalina的好的文件粉碎机?今天macdown为大家推荐一种永久删除数据的软件——AweEraser。有时,你要销毁或擦除计算机上的所有私人文件,这意味着这些数据必须受到保护,免受他人的侵害。本地硬盘或外部硬…

Cocos2d-JS v3.0 alpha

Cocos2d-JS是整合了Cocos2d-html5 v3.0 alpha和Cocos2d-x JSBinding的新JS引擎仓库。整合之后的核心优势在于Html5和JSB的开发流程及API现在变得高度统一,在使用同一套JS游戏代码的基础上,我们的工具也极大的简化了对于不同目标平台的编译发布流程 核心特…

linux网络编程之用一张图片说明函数inet_ntop、inet_pton、inet_addr、inet_ntoa 、inet_aton函数之间的关系

1、inet_ntop、inet_pton、inet_addr、inet_ntoa 、inet_aton函数之间的关系 2、inet_ntop、inet_pton函数的源代码 1、inet_pton函数源码 int inet_pton(int family, const char *strptr, void *addrptr) {if (family == AF_INET) {struct in_addr in_val;if (inet_aton(s…

聊一聊如何用C#轻松完成一个TCC分布式事务

背景 银行跨行转账业务是一个典型分布式事务场景,假设 A 需要跨行转账给 B,那么就涉及两个银行的数据,无法通过一个数据库的本地事务保证转账的 ACID ,只能够通过分布式事务来解决。在 聊一聊如何用C#轻松完成一个SAGA分布式事务…

Xcode6.1 模拟器路径

Xcode 5的iOS模拟器的应用的目录是在~/Library/Application Support/iPhone Simulator/<iOS_Version>/Applications/{Application_ID} Xcode 6的目录改为~/Library/Developer/CoreSimulator/Devices/{Device_ID}/data/Containers/Bundle/Application/{Application_ID}/这…

安卓效率微商_微商人脉通app下载-微商人脉通 安卓版v2.5.5-PC6安卓网

微商人脉通app是一款很好用的微商营销软件&#xff0c;微商人脉通app可以帮你高效获取客源&#xff0c;微商人脉通app还具有丰富微商各类工具&#xff0c;微商人脉通app是做微商生意第一选择的工具&#xff01;软件介绍微商人脉通app致力于打造微商营销推广行业优秀产品&#x…

linux之如何快速查看文件的大小

1、linux之如何快速查看文件的大小 命令如下&#xff0c;每次都容易忘记&#xff0c;希望下次记住 du -h

新年伊始 .Net7 preview1 发布!

虎年伊始&#xff0c;.NET 7.0就要来了&#xff0c;还学的动吗&#xff1f;从github能看到&#xff0c;截止到2月8号&#xff0c;.NET 7.0 Preview1已经全部开发完成&#xff0c;连Preview2也完成了85%&#xff0c;这进度杠杠的&#xff01;微软这几年大力推进.NET稳定更新&…

DDD:如何更好的使用值对象

背景 大师们让我们多使用“值语义”的对象&#xff08;并非一定是是值对象&#xff09;&#xff0c;我们工作中也没有少使用&#xff08;int、bool、date等等&#xff09;&#xff0c;只是大多数人都没有多的自定义“值语义”的类型&#xff08;我也其中之一&#xff09;&#…

数据挖掘课程实验(8个实验报告)

是从实验一到实验八的 链接&#xff1a;https://download.csdn.net/download/qq_44872173/15558967

hutol json null值没了_JSON数据处理框架Jackson精解第一篇-序列化与反序列化核心用法...

Jackson是Spring Boot默认的JSON数据处理框架&#xff0c;但是其并不依赖于任何的Spring 库。有的小伙伴以为Jackson只能在Spring框架内使用&#xff0c;其实不是的&#xff0c;没有这种限制。它提供了很多的JSON数据处理方法、注解&#xff0c;也包括流式API、树模型、数据绑定…

linux之解决在ubuntu上面打开window文件乱码问题总结

1、问题&#xff1a;比如我们在linux系统里面&#xff0c;通过远程桌面打开Windows的txt文件会出现乱码 2、原因&#xff1a; Linux显示在Windows编辑过的中文就会显示乱码是由于两个操作系统使用的编码不同所致。Linux下使用的编码是utf8&#xff0c;而Windows使用的是gb1803…

什么是异构数据库

异构数据库&#xff08;HDB Heterogeneous DataBase&#xff09;是多个数据库系统的集合&#xff0c;可以实现不同数据库之间数据的共享和透明访问。异构数据库中的每个数据库都拥有自己的DMBS&#xff0c;在实现数据共享的同时&#xff0c;仍保有自己的应用特性、完整性控制和…

枚举法的简单应用

箱子里有红&#xff0c;黄&#xff0c;蓝&#xff0c;白&#xff0c;黑五种颜色玻璃球若干&#xff0c;每次任意拿出三个球&#xff0c;问拿出三种不同颜色玻璃球的可能取法&#xff0c;请输出每种排列的情况。 注解&#xff1a;利用枚举法定义五种情况&#xff0c;“enum colo…

Linux网络操作系统实验报告(1~12)

共12个 链接在此&#xff1a;https://download.csdn.net/download/qq_44872173/15559247 如下是目录&#xff1a; 实验一部分标题如下&#xff1a;

解读WPF中的Binding

1.Overview基于MVVM实现一段绑定大伙都不陌生&#xff0c;Binding是wpf整个体系中最核心的对象之一这里就来解读一下我花了纯两周时间有哪些秘密。这里我先提出几个问题应该是大家感兴趣的&#xff0c;如下&#xff1a;&#xff08;1&#xff09;INotifyPropertyChanged是如何被…

maven 导入数据库

2019独角兽企业重金招聘Python工程师标准>>> 一.mysql 配置 基本代码 1. pom.xml 文件配置:jeesite.property jdbc.typemysql jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/yaoshi?useUnicodetrue&characterEncodingutf-8 jdbc.user…

linux之多任务的同步与互斥

1、操作系统&#xff1a; 基本都是多任务操作系统&#xff0c;即同时有大量可调度实体在运行。在多任务操作系统中。 2、同时运行的多个任务可能产生的问题 1) 都需要访问/使用同一种资源 2) 多个任务之间有依赖关系&#xff0c;某个任务的运行依赖于另一个任务 这…

下载matlab安装包太慢_MATLAB 2020a商业数学中文版软件下载安装教程

【软件语言】&#xff1a;简体中文 【支持系统】&#xff1a;Win7/Win8/Win10【软件类别】&#xff1a;安装版【更新时间】&#xff1a;2020年5月15日【下载地址】&#xff1a;www.rjazbs.me/t-2945.html客服微信&#xff1a;rjazbsMATLAB是一款商业数学软件&#xff0c;用于算…