Android基础(十一)HTTP网络连接

应用层协议HTTP

  • Android一般使用Http协议进行网络连接,来发送和接收数据。
  • Http协议格式一般分为请求格式和应答格式:
  • 请求格式:请求行|请求头部|空白行|请求体
  • 响应格式:响应行|响应头部|空白行|响应数据

在请求格式中,通常的请求行中的Method方法包括POST GET HEAD(作用类似与于GET方法) OPTION DELETE PUT等 ,除此之外还包括URL,协议版本(1.0/1.1之类的)等。请求头部中包括一些附加信息,用键值来表示(键:值),包括Host、user-agent、connection等信息。请求体是可选部分,GET请求就可以不用请求体,直接将要传递的数据放在url中。

  • POST 和 GET的区别
    • GET参数通过url传递,POST放在request body中
    • GET请求在url中传递的参数是有长度限制的,而POST没有。
    • GET比POST更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息。
    • GET产生一个TCP数据包;POST产生两个TCP数据包(一个传HEAD一个传data)。
  • HTTP返回码含义

    • 200:客户端请求成功。
    • 302:重定向。
    • 404:请求资源不存在。
    • 400:请求语法错误,服务器无法理解。
    • 403:服务器收到请求,但拒绝提供服务。
    • 500:服务器内部错误。
    • 503:服务器当前不能处理客户端请求,可能需要一段时间后才能恢复正常。
  • HTTP1.0和HTTP1.1的区别

    • 前者暂时连接,传输完成立刻断开;后者在请求头中带有连续传递字段keep active时,会保持连接,让后续传输不必重新连接
  • Android中连接类HttpURLConnection.java(HttpClient.java是Apache库中的类,在android M之后被废弃,不再使用)。HttpURLConnection的使用一般如下:
URL url = new URL("http://www.baidu.com");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET")
//connection.setRequestMethod("POST")
connection.setConnectTimeout(6000);
connection.setReadTimeout(6000);
InputStream in = connection.getInputStream();//服务端响应耗时操作
//OutputStream out = connection.getOutputStream();//客户端请求耗时操作,最终数据写入实在out.flush()中完成
...
connection.disconnect();//关闭

传输层协议TCP/UDP

HTTP属于应用层的协议,是基于传输层协议TCP(传输控制协议)的。而在传输层,TCP和UDP(用户数据报协议)经常拿来比较。
TCP(Transmission Control Protocol)协议是面向连接的协议。需要三次握手建立连接,需要四次挥手断开连接。
三次握手过程:

  • 客户端发送:SYN = 1,ACK = X,端口号(http 的是60)
  • 服务端应答:SYN = 1,ACK = X+1;SEQ = Y;
  • 客户端确认:ACK = Y+1;SEQ = X+1
    四次挥手过程:
  • 客户端提出停止连接请求:FIN = 1;
  • 服务端应答:ACK = 1;
  • 服务端发送停止连接请求:FIN = 1;
  • 客户端应答:ACK =1;

TCP协议是面向连接的协议,就是为了保证连接可靠稳定。为了达到这一目标,在数据传递时,有确认、窗口、重传、拥塞控制机制。数据传递完后会断开连接节省系统资源。详细来说,在传递数据时,data将被分割成固定长度大小发送,发送时启动定时器,为重传做准备。接受到数据后会校验后确认。在传递时两方都有窗口控制大小,避免拥堵。缺点就是传输慢效率低,容易被攻击(DOS,DDOS)
UDP(User Data protocol)协议是面向无连接协议,尽最大努力完成交付。优点是传输快、安全;缺点是不可靠、很可能丢包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值