💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
***** **HTTP协议** [TOC=6] # 1. 为什么要学习HTTP协议? 中国人与中国人使用汉语沟通。 美国人与美国人使用英语沟通。 德国人与德国人使用德语沟通。 日本人与日本人使用日语沟通。 汉语、英语、德语、日语。就像约束、规范一样。要让他们听懂我们说的话要使用相应的语言。 那么,我们要使用一台计算机和另一台计算机通信,有没有规范/协议呢? 那么,那么这个规范/协议是什么? # 2. HTTP协议的由来 它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定义了今天普遍使用的一个版本——HTTP 1.1。 ## 2.1 RFC Request For Comments(RFC),是一系列以编号排定的文件。文件收集了有关互联网相关信息,以及UNIX和互联网社区的[软件](https://baike.baidu.com/item/%E8%BD%AF%E4%BB%B6/12053)文件。目前RFC文件是由Internet Society(ISOC)赞助发行。基本的互联网通信协议都有在RFC文件内详细说明。RFC文件还额外加入许多的论题在标准内,例如对于互联网新开发的协议及发展中所有的记录。因此几乎所有的互联网标准都有收录在RFC文件之中。 # 3. 什么是HTTP协议? HTTP协议,即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。 # 4. HTTP协议有哪些特点呢? HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。 * 支持客户/服务器模式 * 简单快速 * 灵活 * 无连接 * 无状态 # 5. HTTP请求头与相应头 HTTP的请求由三部分组成,分别是:请求行、请求头、请求正文 请求头:请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。 常见的请求头: Accept:Accept请求报头域用于指定客户端接受哪些类型的信息。 Accept-Charset:Accept-Charset请求报头域用于指定客户端接受的字符集。 Accept-Encoding:Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码。 Authorization:Authorization请求报头域主要用于证明客户端有权查看某个资源。 Host(发送请求时,该报头域是必需的):Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通 常从HTTP URL中提取出来的, HTTP的响应由三个部分组成,分别是:状态行、响应头、响应正文 响应头:响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的 资源进行下一步访问的信息。 常见的响应头: Location:Location响应报头域用于重定向接受者到一个新的位置。 Server:Server响应报头域包含了服务器用来处理请求的软件信息。 # 6. HTTP请求方法与响应码 根据HTTP标准,HTTP请求可以使用多种请求方法。 HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。 HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。 ![](https://box.kancloud.cn/9a2cad81985e1e3f8f481d40da5054b0_1670x764.png) HTTP响应码: 状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值: 1xx:指示信息--表示请求已接收,继续处理 2xx:成功--表示请求已被成功接收、理解、接受 3xx:重定向--要完成请求必须进行更进一步的操作 4xx:客户端错误--请求有语法错误或请求无法实现 5xx:服务器端错误--服务器未能实现合法的请求 常见状态代码、状态描述、说明: 200 OK       //客户端请求成功 400 Bad Request   //客户端请求有语法错误,不能被服务器所理解 401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用  403 Forbidden   //服务器收到请求,但是拒绝提供服务 404 Not Found   //请求资源不存在,eg:输入了错误的URL 500 Internal Server Error //服务器发生不可预期的错误 503 Server Unavailable   //服务器当前不能处理客户端的请求,一段时间后可能恢复正常 # 7. GET请求和POST请求的区别 * GET在浏览器回退时是无害的,而POST会再次提交请求。 * GET请求会被浏览器主动cache,而POST不会,除非手动设置。 * GET请求只能进行url编码,而POST支持多种编码方式。 * GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。 * GET请求在URL中传送的参数是有长度限制的,而POST么有。 * GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。 * GET参数通过URL传递,POST放在Request body中。 # 8. HTTP1.1与HTTP1.0的区别 (1)加入了缓存处理 (2)带宽的优化 (3)错误通知管理 (4)host头处理 (5)长链接