前言:
现在正在从事Android开发,一直以来对网络模块的认识都非常的模糊。
对于HTTP这方便的知识一窍不懂,有时候看别人整理的资料太多理论知识根本看不懂,于是整理了这篇文章方便自己回顾,也希望能帮助像我一样不太懂后台的人。
URI和URL
URI (Uniform Resource Identifiers) 统一资源标示符
URL(Uniform Resource Locator) 统一资源定位符,是一种特殊类型的URI。
URI和URL一直都经常混乱,不过细看了URL是怎么组成的,就不怕混乱了。
URL一般由三部组成:
- 协议(或称为服务方式)
- 存有该资源的主机IP地址(有时也包括端口号)
- 主机资源的具体地址。如目录和文件名等
于是我理解成是一个地址
Request和Response
Request请求:
由请求行、请求头部、空行、请求数据四个部分组成
请求行:
GET /[要访问的资源] HTTP/1.1
POST / HTTP/1.1
Response响应:
由状态行、消息报头、空行、响应正文四个部分组成
状态行:
HTTP/1.1 200 OK
HTTP状态码:
状态码由三位数字组成,第一个数字定义了响应的类型,共分为五类:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态码:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
GET提交:
GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连。
HTTP协议
原理:
HTTP 是基于TCP/IP协议的应用层协议。
它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。
Content-Type:
HTTP允许传输任意类型的数据对象,传输的类型由Content-Type标记。
浏览器是依靠Content-Type来判断响应的内容是网页还是图片,是视频还是音乐。
常用的Content-Type属性:
属性 | 内容 |
---|---|
text/html | .html 网页 |
image/jpeg | .jpeg和.jpg 图片文件 |
image/png | .png 图片文件 |
application/json | json语句(接口的时候经常用) |
application/octet-stream | .* (二进制流,不知道文件类型) |
application/x-www-form-urlencoded | Form数据被编码为名称/值对 |
multipart/form-data | Form数据被编码为一条信息,页面上的每个空间对应消息中的一个部分。 |
application/x-www-form-urlencoded和multipart/form-data在Form中的用法:(大神总结的)
- form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded。
- 当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2...),然后把这个字串append到url后面,用?分割,加载这个新的url。
- 当action为post时候,浏览器把form数据封装到http body中,然后发送到server。
- 如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。 但是如果有type=file的话,就要用到multipart/form-data了。
application/x-www-form-urlencoded的请求例子:
POST /app/user/login HTTP/1.1
Host: 10.240.131.7:8080
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
Postman-Token: 05234002-4223-66fb-34f8-9be70557a745
username=potato&password=112233
好好学习,天天向上。<( ̄oo, ̄)/