目录
一.HTTP协议
1.1http简介
HTTP定义:超文本传输协议,是一个 无链接,无状态的应用层协议。在编写网络通信代码时,我们可以自己进行协议的定制,但已经有很多优秀的工程师早就已经写出了许多非常成熟的应用层协议,其中最典型的就是HTTP协议。
注意:http协议底层是tcp,tcp是面向链接的,http只是使用了tcp的链接能力,但是http本身是无链接的。
HTTP(Hyper Text Transfer Protocol)协议又叫做超文本传输协议,是一个简单的请求-响应协议,HTTP通常运行在TCP之上。
1.2URL简介
URL就是我们常说的网址。
URL:统一资源定位服务(unit resource locate),用于在互联网中定位某种资源。
例如:
1.协议方案名
http://
表示的是协议名称,表示请求时需要使用的协议,通常使用的是HTTP协议或安全协议HTTPS。HTTPS是以安全为目标的HTTP通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。
一些常见的应用层协议:
DNS(Domain Name System)协议:域名系统。
FTP(File Transfer Protocol)协议:文件传输协议。
TELNET(Telnet)协议:远程终端协议。
HTTP(Hyper Text Transfer Protocol)协议:超文本传输协议。
HTTPS(Hyper Text Transfer Protocol over SecureSocket Layer)协议:安全数据传输协议。
2.登入信息
usr:pass
表示的是登录认证信息,包括登录用户的用户名和密码。虽然登录认证信息可以在URL中体现出来,但绝大多数URL的这个字段都是被省略的,因为登录信息可以通过其他方案交付给服务器。
3.服务器地址
www.example.jp
表示的是服务器地址,也叫做域名。域名和ip地址是等价的,我们用IP地址标识公网内的一台主机,但IP地址不适合给用户看。我们可以通过ping
命令去获取www.qq.com
这两个域名解析后的IP地址。例如:
4.服务器端口号
上面的80
表示的是服务器端口号。HTTP协议是位于应用层的,在进行套接字编程时我们需要给服务器绑定对应的IP和端口,而这里的应用层协议需要有明确的端口号。
这些常用的服务与端口号之间的对应关系都是明确的,特定的服务有特定的端口号,所以我们在使用某种协议时,可以不指定写端口号,因此在URL当中,使用确定协议的时候,一般显示的时候,会缺省端口号。
补充:用户自己写的网络服务bind端口的范围:[1024,n],前1023个是给httpserver这些服务的
5.文件路径
首先要知道,我们访问某一个资源,是要在对端上,找到对应的文件,服务器都是Linux系统的,这些资源都是文件,即资源文件在Linux服务器上。通过ip和端口找到对应的服务器进程了,此时要做的就是指明该资源所在的路径。
例如:
这里的路径分隔符是/
,而不是\
,这也就证明了实际很多服务是部署在Linux上的。
6.查询字符串
上图中的uid=1
表示的是请求时提供的额外的参数,这些参数是以键值对的形式,通过&
符号分隔开的,例如:
这里表示的就是我们搜索时的搜索关键字wd=cpp,
也可以说明说双方在进行网络通信时,是能够通过URL进行用户数据传送的。
7.片段标识符
ch1
表示的是片段标识符,是对资源的部分补充
8.urlencode和urldecode
例如上面这个例子,符号++并没显示出来,而是用其它的字符给替代了。
解释:有一些字符被url 当做特殊意义理解了 ,因此这些字符不能随意出现 ,若某个参数中需要带有这些特殊字符 , 就必须先对特殊字符进行转义 .
转义的规则如下: