企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## HTTP协议 #### HTTP是Web常见应用的网络协议,简称超文本传输协议 http是基于TCP传输层实现的,默认的TCP端口为80 http目前使用最多的版本是1.1,最新的版本是2.0,下个版本是3.0 http协议是无状态的 每次请求都是独立的,任何两个请求之间没有什么必然的联系 ## 多次http请求 客户端请求网页多数情况不是一次请求就能成功的,首先是响应html页面,然后发现HTML页面还引用的了其他资源。例如css/js/图片等,还会自动发送http请求这些需要的资源。现在的http版本支持管道机制,可以同时请求和响应多个请求,大大提高了效率 ## 基于TCP协议 HTTP协议目的是规定客户端和服务的数据传输的格式和数据交互行为,并不负责数据传输的细节。http底层基于TCP实现的,现在的版本默认持久连接,多次的http请求使用一个TCP连接。 ## HTTP的组成 为请求和响应两个部分,请求是指客户端想服务器发送的消息;响应是指服务器收到信息后想客户端返回的信息 ### URI(统一资源标识符) **完整uri** : http:user:pass@host.com:8080/p/a/t/h?query=string#hash user 用户名(可选) pass 对应密码(可选) host.com 主机域名地址(或者IP地址) 8080 端口号,默认是80 /P/a/t/h 资源路径 query=string 参数传递,多个参数通过&拼接 hash 锚点 ## 请求(Request): 1,请求行 (方法 路径 协议) 2,请求头信息 (格式为key=value) 3,请求主体信息 (可选,发送的内容) 请求头信息与主体信息之间要有一个空行 例子: POST /index.php http/1.1 host:localhost content-type:application/x-www-form-urlencoded content-length:25 name=zhangsan ## 请求行 1,请求方法 GET POST HEAD DELETE PUT TRACE OPTIONS 2,请求路径 URL的一部分 3,所用协议 目前常用是1.1 ## 请求头信息 1,post请求要注明请求主体的长度 content-length:length 2,服务器要能偶解析到POST数据还需要请求头包含数据类型 content-type:application/x-www-form-urlencoded //需要经过url编码 格式为key:value (键值对) ## 请求主体 使用&拼接在一起的key=value键值对组成 使用CMD模拟HTTP请求: 1,服务器根目录创建index.php,内容为 <?php echo "Hello World"; 2,打开CMD, telnet localhost 80 3,CTRL+] 4,get /index.php http/1.1 ***** HTTP/1.1 200 OK Date: Wed, 13 Nov 2019 05:49:40 GMT Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j mod_fcgid/2.3.9 X-Powered-By: PHP/5.3.29 Connection: close Content-Type: text/html Hello World 遗失对主机的连接。 ***** ## 响应(Reponse) 响应行(协议 状态码 状态文字) 响应头信息 (格式为key=value) 空行 主体信息(可能为空) 例子: HTTP/1.1 200 OK Content-Type: text/html content-length:25 hello ## HTTP动词 1,GET:获取资源 2,POST:创建资源 3,PUT:修改资源 4,HEAD:获得报文首部 5,DELETE:删除文件 6,OPTIONS:询问支持的方法 7,TRACE:追踪路径 8,CONNECT:用于隧道协议连接代理 ## HTTP状态码与状态文字 状态码:用来反应服务器响应状态 状态文字:用来描述状态码的 ### 5种分类: 1** 信息,服务器收到请求,需要请求者继续执行操作 2** 成功,操作被成功接收并处理 3** 重定向,需要进一步的操作以完成请求 4** 客户端错误,请求包含语法错误或无法完成请求 5** 服务器错误,服务器在处理请求的过程中发生了错误 ## Content-Type ·内容类型,定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件 ### application/x-www-form-urlencoded (原生form表单传输方式)默认的连接方式 1,数据以key/value 中间用&连接 2,key和value都要用URL编码 POST http://www.example.com HTTP/1.1 Content-Type:application/x-www-form-urlencoded;charset=utf-8 ***** ### multipart/form-data (表单上传) POST http://www.example.com HTTP/1.1 Content-Type:multipart/form-data;boundary=---WebkitFormBoundaryrGKCBY7qhFd3TrwA ---WebkitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition:form-data;name="text" title ---WebkitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition:form-data;name="file";filename="test.png" Content-Type:image/png ***** ### application/json (API常用格式) POST http://www.example.com HTTP/1.1 Content-Type:application/json;charset=utf-8 {"title":"test","sub":[1,2,3]} ## text/xml (API常用格式) POST http://www.example.com HTTP/1.1 Content-Type:text/xml