网络编程—HTTP

4.4 HTTP编程

4.4.1 UDP和TCP的区别

UDP是一种数据报模式的协议,TCP是一种流模式的协议。

UDP的发送端调用了几次sendto,接收端必须用相同次数的recvfrom读取数据。因为UDP是基于报文的,每次只能读取一个报文,报文之间不会合并;若接收缓冲区小于报文长度,则多余部分会被丢弃。

TCP的发送端调用发送(send)100字节的数据,但是接收缓冲区只有10字节,那么它会分10次来接收recv()。若发送端发送10字节的数据,但是接收缓冲区有100字节,那么客户端可以调用10次send来发送数据,服务器端可以1次性读取(recv)。TCP的流模式传输,使数据之间没有边界。

上图是TCP传输的具体流程,当TCP客户端传输数据到socket发送缓冲区,OS将数据取出来,通过网络发送到服务器端socket接收缓冲区,等待recv来读取。但是需要注意的是当客户端调用send发送数据后,数据会存放在客户端socket发送缓冲区内,至于OS什么时候会取走数据就不是应用程序可以决定的;当OS取走数据后,不管服务器端有没有调用recv,都会把数据存放到服务器端的socket接收缓冲区内;当调用recv后,不管缓冲区有多少数据,都会被取走。

为了解决TCP中数据无界的问题,客户端对数据进行封包后再发送,服务器端接收数据后解包。常用的数据交换格式有JSON、XML、字节编码等。

当使用一问一答的形式来传输数据,称为消息模式,其常用数据交换格式为JSON。

当进行文件流、视频流等大量数据的传输,称为流模式,其常用数据交换格式为字节编码。

举例:FTP的控制部分采用的是消息模式,数据部分采用的是流模式。

4.4.2 HTTP协议

HTTP是应用层的协议,而在传输层中由于UDP只适合于局域网且不能穿越路由,因此传输层协议选择TCP。

HTTP协议全称是Hyper Text Transfer Protocol,即“超文本传输协议”。

扫描二维码关注公众号,回复: 4267510 查看本文章

HTTP是一个应用层协议,它是基于TCP/IP协议来传输数据。当浏览器作为HTTP客户端,通过URL向HTTP服务器端(即万维网服务器:World Wide Web,简称www)发送请求,Web服务器收到请求后,向客户端发送响应。

当你使用360浏览器时,你会发现访问的网址头并不是HTTP,而是HTTPS,那么HTTPS又是什么呢?

HTTP协议传输的数据都是未加密的,因此使用HTTP协议传输隐私数据非常的不安全。于是网景公司设计了SSL协议,用于对HTTP协议传输的数据进行加密,从而诞生了HTTPS。即HTTPS = HTTP + SSL,HTTP默认端口号是80,HTTPS默认端口号是443。

4.4.3 URL

URI全称Uniform Resource Identifiers,即统一资源标识符。URI的作用是建立连接和传输数据,而URL(统一资源定位符:Uniform Resource Locator)是一种特殊的URI,它包含了查找某个资源的全部信息。

以下面的URL为例:

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

完整的URL包括7部分:
(1)协议部分:该URL的协议部分为”http:”,这代表网页使用的是HTTP协议,在"HTTP"后面的“//”为分隔符。

(2)域名部分:该URL的域名部分为”www.aspxfans.com”。

(3)端口部分:跟在域名后面的是端口,域名和端口之间使用”:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口。

(4)虚拟目录部分:从域名后的第一个”/”开始到最后一个”/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分,本例中的虚拟目录是”/news/”。

(5)文件名部分:从域名后的最后一个”/”开始到”?”为止,是文件名部分。如果没有”?”,则是从域名后的最后一个”/”开始到”#”为止,是文件部分;如果没有”?”和”#”,那么从域名后的最后一个”/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名。

(6)锚部分:从”#”开始到最后,都是锚部分。本例中的锚部分是”name”。锚部分也不是一个URL必须的部分。

(7)参数部分:从”?”开始到”#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用”&”作为分隔符。

CURL:用URL传输数据的命令行工具和库。

CURL官网:https://curl.haxx.se/

CURL下载URL文件:https://curl.haxx.se/libcurl/c/

CURL使用示例:https://curl.haxx.se/libcurl/c/example.html

CURL使用GET:https://curl.haxx.se/libcurl/c/simple.html

https://curl.haxx.se/libcurl/c/url2file.html

CURL使用POST:https://curl.haxx.se/libcurl/c/http-post.html

https://curl.haxx.se/libcurl/c/simplepost.html

CURL使用PUT:https://curl.haxx.se/libcurl/c/httpput.html

参考博客:http://blog.csdn.net/ergouge/article/details/8185219 

猜你喜欢

转载自blog.csdn.net/Bing_bing_bing_/article/details/83870492
今日推荐