美文网首页
不借助浏览器发起一个HTTP请求

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

作者: kindol | 来源:发表于2018-04-17 19:25 被阅读0次

    其实,发起一个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请求

          本文链接:https://www.haomeiwen.com/subject/uxbpkftx.html