HTTP协议位于应用层,建立在TCP协议之上,也属于面向连接的可靠传输。它不再像TCP连接那样需要指定端口号,因为HTTP协议默认使用80号端口。
机器的端口号分为0~65536,其中,0~1024号端口被系统占用,其余端口可由用户自由分配。例如HTTP协议占用了80/tcp号端口,HTTPS协议占用了443/tcp,443/udp号端口,FTP协议占用了21/tcp号端口,TELNET协议占用了23/tcp号端口。
这样,建立HTTP连接时只需要指定IP地址就可以了。
在Android中,HTTP协议封装在HttpURLConnection类中,其内部也是使用Socket进行通信,只是它对Socket进行了封装,使我们可以更方便地进行调用。下面讲一讲,HTTP里丰富了哪些信息。
Socket更适用于保持长连接,HttpURLConnection一般用于短连接。
这篇文章分析了Socket与HttpURLConnection的使用区别:
Socket、URLConnection 和HttpURLConnection的区别
HTTP传输的信息分为请求信息与响应信息。客户端向服务端发送请求信息,服务端向客户端发送响应信息。
上图是HTTP的请求数据格式。
HTTP的请求方法有:
GET,POST,PUT,DELETE
GET方法用于向服务器获取信息,但可以使用该方法提交少量信息,大小受限制,这与服务器,客户端以及操作系统有关。
POST方法用于向服务器提交信息,上传的信息理论上是没有限制的。
PUT方法用于更新服务器上的资源。
DELETE方法用于删除服务器上的资源。
URL为统一资源标识符,为资源在互联网中的唯一标识,这也是请求信息要发送到的目的地。
协议版本为HTTP的版本号。
HTTP的请求数据中还会包含一些头部字段,用来设置此次HTTP连接的属性。
HTTP请求的头属性有:
HTTP Request Header 请求头
Header | 解释 | 示例 |
---|---|---|
Accept | 指定客户端能够接收的内容类型 | Accept: text/plain, text/html |
Accept-Charset | 浏览器可以接受的字符编码集。 | Accept-Charset: iso-8859-5 |
Accept-Encoding | 指定浏览器可以支持的web服务器返回内容压缩编码类型。 | Accept-Encoding: compress, gzip |
Accept-Language | 浏览器可接受的语言 | Accept-Language: en,zh |
Accept-Ranges | 可以请求网页实体的一个或者多个子范围字段 | Accept-Ranges: bytes |
Authorization | HTTP授权的授权证书 | Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Cache-Control | 指定请求和响应遵循的缓存机制 | Cache-Control: no-cache |
Connection | 表示是否需要持久连接。(HTTP 1.1默认进行持久连接) | Connection: close,keep-alive |
Cookie | HTTP请求发送时 |