HTTP请求报文分为 请求行,请求头,请求体:
当请求方式是post的时,请求体会有请求的参数,格式如下:username=zhangsan&password=123
HTTP的响应报文:响应行,响应头,响应体
格式:报文协议+状态码
状态码: 1xx:指示信息,表示请求已接收,继续处理
2xx:成功,表示请求已被成功接受,处理。
200 OK:客户端请求成功204 No Content:无内容。服务器成功处理,但未返回内容。一般用在只是客户端向服务器发送信息,而服务器不用向客户端返回什么信息的情况。不会刷新页面。206 Partial Content:服务器已经完成了部分GET请求(客户端进行了范围请求)。响应报文中包含Content-Range指定范围的实体内容3xx:重定向
301 Moved Permanently:永久重定向,表示请求的资源已经永久的搬到了其他位置。
302 Found:临时重定向,表示请求的资源临时搬到了其他位置
303 See Other:临时重定向,应使用GET定向获取请求资源。303功能与302一样,区别只是303明确客户端应该使用GET访问
307 Temporary Redirect:临时重定向,和302有着相同含义。POST不会变成GET
304 Not Modified:表示客户端发送附带条件的请求(GET方法请求报文中的IF…)时,条件不满足。返回304时,不包含任何响应主体。虽然304被划分在3XX,但和重定向一毛钱关系都没有
4xx:客户端错误
400 Bad Request:客户端请求有语法错误,服务器无法理解。401 Unauthorized:客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。403 Forbidden:资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。404 Not Found:请求资源不存在。比如,输入了错误的url415 Unsupported media type:不支持的媒体类型5xx:服务器端错误,服务器未能实现合法的请求。
500 Internal Server Error:服务器发生不可预期的错误。501 Not Implemented:服务器不支持实现请求所需要的功能。例如,客户发出了一个服务器不支持的PUT请求。502 Bad Gateway 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。503 Server Unavailable:务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个Retry-After头。504 Gateway Timeout 由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。(HTTP 1.1新)505 HTTP Version Not Supported 服务器不支持请求中所指明的HTTP版本。(HTTP 1.1新) ———————————————— 版权声明:本文为博主「有抱负的小狮子」的原创文章,原文链接:https://blog.csdn.net/weixin_38087538/article/details/82838762更多请求头属性可以参考这篇文章:http://tools.jb51.net/table/http_header
最常见的post提交数据的方式。浏览器原生的form表单,如果不设置enctype属性,那么最终就会以application/x-www-form-urlencoded 方式提交数据 提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。大部分服务端语言都对这种方式有很好的支持。
很多时候,我们用 Ajax 提交数据时,也是使用这种方式。例如 JQuery 和 QWrap 的 Ajax,Content-Type 默认「application/x-www-form-urlencoded;charset=utf-8」。
使用表单上传文件时,必须让 form 的 enctyped 等于这个值。
POST http://39.108.107.149:8080/vk/app/rest/ddp/iDataSourcesBaseService/file HTTP/1.1 Content-Type: multipart/form-data; boundary=--------------------------629236571647111133881449 cache-control: no-cache Postman-Token: 2146b4b3-2d30-469c-bbcd-fbc4693934d9 User-Agent: PostmanRuntime/7.1.1 Accept: */* Host: 39.108.107.149:8080 cookie: JSESSIONID=6CD80B7028062D9190717CEE001C3194 accept-encoding: gzip, deflate content-length: 435 Connection: keep-alive ----------------------------629236571647111133881449 Content-Disposition: form-data; name="file"; filename="test.txt" Content-Type: text/plain test upload ----------------------------629236571647111133881449 Content-Disposition: form-data; name="extCode" test ----------------------------629236571647111133881449 Content-Disposition: form-data; name="extId" 3306 ----------------------------629236571647111133881449-- //结束标识 ————————————————首先生成了一个 boundary 用于分割不同的字段,为了避免与正文内容重复,boundary 很长很复杂。然后 Content-Type 里指明了数据是以 mutipart/form-data 来编码,本次请求的 boundary 是什么内容。
消息主体里按照字段个数又分为多个结构类似的部分,每部分都是以 --boundary 开始,紧接着内容描述信息,然后是回车,最后是最后是字段具体内容(文本或二进制),如果传输的是文件,还要包含文件名和文件类型信息。消息主体最后以 --boundary-- 标示结束。
上面提到的这两种 POST 数据的方式,都是浏览器原生支持的,而且现阶段原生 form 表单也只支持这两种方式。但是随着越来越多的 Web 站点,尤其是 WebApp,全部使用 Ajax 进行数据交互之后,我们完全可以定义新的数据提交方式,给开发带来更多便利。 ————————————————
用来告诉服务端消息主体是序列化后的 JSON 字符串
POST http://39.108.107.149:8080/vk/app/rest/ddp/vkIndexsService/queryVkIndxs HTTP/1.1 Content-Type: application/json cache-control: no-cache Postman-Token: 5014bc39-0777-49d5-bb8a-73db9a981e49 User-Agent: PostmanRuntime/7.1.1 Accept: */* Host: 39.108.107.149:8080 cookie: JSESSIONID=6CD80B7028062D9190717CEE001C3194 accept-encoding: gzip, deflate content-length: 132 Connection: keep-alive { "name":"828验证继承", "getresultType":"2", "createTime":"Tue Sep 11 2018 00:00:00 GMT+0800 (中国标准时间)" } 这种方案,可以方便的提交复杂的结构化数据,特别适合 RESTful 的接口。各大抓包工具如 Chrome 自带的开发者工具、Firebug、Fiddler,都会以树形结构展示 JSON 数据,非常友好 ————————————————版权声明:本文为博主「有抱负的小狮子」的原创文章 原文链接:https://blog.csdn.net/weixin_38087538/article/details/82838762