不借助浏览器发起一个HTTP请求

其实,发起一个HTTP请求,本质上就是建立一个Socket连接

只是HTTP只是一个协议,因而,在使用outputStream.write写的二进制数据格式要符合HTTP。

步骤

  1. 浏览器建立Socket前,根据地址栏输入的URL的域名DNS解析出IP地址
  2. 根据IP地址和默认的80端口与远程服务器建立Socket连接
  3. 浏览器根据URL组装成一个get类型的HTTP请求头,通过outputStream.write发送到目标服务器
  4. 服务器等待inputStream.read返回数据
  5. 断开连接

HTTP和Socket的关系

  • Socket

    又称为套接字,是操作系统提供给应用程序进行网络通信的抽象API,不是协议,这里的socket指的是http socket, 由IP+Port组成,IP涉及主机到主机,对应网络层;Port涉及TCP/UDP,应用对应用,对应传输层

    这意味着,可以使用socket开发基于TCP、UDP等的应用

    linux系统中还有一种socket称之为unix domain socket,是通过本地文件进行进程间通信的方式

  • HTTP

    基于TCP的应用层协议,虽然TCP是支持长连接(而Socket与连接的长短没有关系,真正相关的是TCP)的,但是HTTP并不强制要求长连接

    大部分情况下,一次HTTP请求的完成经过如下:

    建立TCP连接(可以使用Socket)->客户端发送报文->服务端返回报文->服务端或客户端关闭此连接

    这个过程,由于每次都要建立连接,并在完成一次请求响应后关闭连接,所以大家称为“短连接”。

    HTTP的所谓Keep-Alive,实际上是一种不可控的行为,是为了在一定程度上改善HTTP性能的,即服务端和客户端希望不立刻断开连接,这样下次发送数据时就不需要建立TCP连接了,但是服务端和客户端的任何一方都可以随时断开

你可能感兴趣的:(不借助浏览器发起一个HTTP请求)