2015-10-20 72 views
0

我想这是以前曾被问及的答案,但我不知道要搜索什么才能找到它。这发生在我身上,作为您在计算机网络大学课程中学习的东西 - 我从来没有拿过的东西。如果有人能指出我的答案,那会很好。网络/ Golang - 对“GET”请求的解析

所以,问题是:

在许多语言中,像围棋和JavaScript,它是相对简单的做一个“GET”请求通过HTTP/HTTPS的API。但是表面之下发生了什么,在一个相对较高层次的描述中呢?

我问,因为我需要一个更好的理解,以掌握如何处理各种错误,我收到时,事情不应该如他们应该的行为。

对于我打算回答的一种想法,我会参考Golang的http调用方法。在Golang中,您可以导入net/http包并拨打电话http.Get("http://www.example.com")。但是你也可以指定一个“客户端”,你可以配置它来拥有特定的定制头文件等等。你可以在客户端中指定一些更复杂的东西,比如使用的传输器等等,而我对它并不感兴趣的东西除非它解决了我的问题。

基本上,这归结为:Go是完全并发的,在我的情况下是并行的。我每秒向一个API发出约300个请求。 golang docs的建议是客户端对于并发使用是安全的,所以应该只实例化一次 - 实质上,我有一个全局客户端,通过它来传输每个请求。

如果我得到一个错误,指出连接已被杀死,是否会影响一个请求,很多请求,我是否必须对客户端做任何事情以获得另一个连接?

此外,它是一次一个连接请求,还是有一个新的连接为每个请求?请求之间的连接是否持续,什么决定了它们何时死亡?

这个问题可能很漫长,可能没有意义。如果任何人都可以回答它的任何部分,那将非常感激。

+1

你似乎只是问“http工作如何”? go客户端处理http/1.1(和go1.6中的http/2)。如果你了解协议,客户的行为就会如此。这不是http的细节教程的地方。如果你想讨论如何使用客户端,讨论一下*邮件列表就是一个更好的论坛,但在这里你应该提出具体的问题。 – JimB

回答

3

网络:

dns-> ip-> tcp-> http。 DNS将域名解析为一个IP地址; tcp添加一个端口(如HTTP默认80)等; http添加标题,表单数据等。最后你的http数据包从你的网络适配器发送并经过互联网路由器的处理,然后到达正确的http服务器。

网/ HTTP:

我们必须回答golang文档中所有的传输层的问题,主要是this。请仔细阅读。

更新:

连接错误只是影响一个请求。即使多个请求使用相同的tcp连接,因为请求响应对一拜一,所以一个连接错误永远不会使两个请求失败。

+1

好的,谢谢!但是,有一个问题,当错误指出“连接已关闭”时,是指单个请求的连接还是更持久,处理多个“GET”? – bawjensen

+0

@bawjensen:连接可能是持久的,也可能不持久。这取决于客户端在协议级别处理,您不必担心。 – JimB

+0

你说得对,我不**有担心。但是由于我的连接出现错误,我花了很多时间在HTTPS连接周围建立密码,可能如果我可以根据特定情况优化连接的行为,我可以消除这些错误并加快我的代码。 – bawjensen