目录
一. 认识URL
1.1 URL的概念及格式
1.2 URL编码和解码
二. http的请求和响应信息
三. 建立简单的http通信
四. http协议内容解读
4.1 http方法
4.2 http状态码
4.3 http常见的header
五. 会话管理
六. 总结
我们通常使用网址来访问一个网址,URL就是我们常说的网址。
URL的通用格式见图1.2,真正在使用URL访问网站时,不一定每个部分都出现在URL中。
我们在查询一些资源的时候,那么会用到一些和URL标准格式中固有字符相冲突的字符,这些字符如果直接使用在URL中,就可能会引发误读从而错误解析URL。
这些特殊字符,必须通过特定的编码规则,转变为不发生冲突的字符,再写入到URL中,如图1.3所示在百度搜索引擎中搜索C++11,其中字符'+'就被编码为%2B。
转义规则:将需要转义的字符对应的编码值写为16进制,从右到左取4位,每两位算做一组,前面加上%,最终转义格式为%XY。
在使用HTTP协议通讯时,客户端向服务端发送的请求信息以及服务端返回客户端的信息,都遵循特定的格式,可以总结为:请求行/状态行、请求报头(属性信息)、正文。
其中客户端发送给服务端的请求包括请求方法(GET、POST等)、访问资源的路径、协议版本,服务端发回客户端的信息包括协议版本、错误码以及错误码描述信息。
需要特别强调的是访问资源的路径是相对于系统本身的路径的,并不是这台机器的根目录开始的路径。一般而言,如果在url中不显示的指出路径,那么服务端就会默认接收到"\"表示根目录,而在服务端程序中,根目录一般显示给定。
代码2.1:客户端向服务器发送的请求信息
GET / HTTP/1.1
Host: 175.178.238.165:8080
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.186.400 QQBrowser/11.3.5199.400
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Real Content -- 正文内容
Http协议通信底层是通过TCP协议来实现的,所以要依次创建套接字、绑定端口号、建立链接等操作。服务端在接收到客户端的请求信息时,截取所请求的资源,即:第一行请求行中的资源路径。服务器将客户端请求的资源作为Reponse的正文内容,并配以状态行和报头(属性信息),发回给客户端即可。
注意:如果客户端用户在url中不显示给出要访问资源在服务器中的路径,那么服务器收到的资源路径就会说"/",表示服务器的根目录。一般在服务器程序中,根目录下会存放默认的资源文件,当检测到资源路径为"/"时,就访问默认资源。
代码gitee链接:Linux Learning: Linux系统和网络编程学习文件 - Gitee.com
对于通信的测试,我们不需要再撰写客户端代码来进行,只需要在浏览器中,输入主机ip+端口号即可,我们还可以输入要访问的资源(文件)所在的路径,指定服务器返回给客户端正文的内容。图3.1和3.2为测试方法,图3.1没有显示给出路径,因此返回默认根目录wwwroot/index.html中的内容,显示出对应的前端界面,图3.2给出了访问文件的路径/path/test.html,显示出对应前端界面。
我们平常上网进行的操作分为两种:(a). 向服务器传输资源 (b).从服务器获取资源,在http中最常用的两种方法为GET和POST,可实现资源的传输和获取。其余的方法在很多服务器中会被禁止,以免恶意操作或操作失误引发不可预期的后果。而LINK和UNLINK仅支持HTTP1.0版本,已经被淘汰。
方法 | 意义 | 支持HTTP版本 |
---|---|---|
GET | 获取资源 | HTTP1.0 HTTP1.1 |
GET、POST | 向服务器传输资源 | HTTP1.0 HTTP1.1 |
HEAD | 获取报文首部 | HTTP1.0 HTTP1.1 |
DELETE | 删除文件 | HTTP1.0 HTTP1.1 |
OPTIONS | 查询支持的方法 | HTTP1.1 |
TRACE | 路径追踪 | HTTP1.1 |
CONNECT | 要求隧道协议链接代理 | HTTP1.1 |
LINK | 建立和资源之间的联系 | HTTP1.0 |
UNLINK | 断开和资源之间的链接 | HTTP1.0 |
GET和POST方法都可以实现向服务器传输资源,但是他们存在着一定的不同,通过测试来观察不同。为了进行测试,首先要对表单有一定了解。
表单是用于向服务器传递数据的,文件后缀名为.html,其中可以指定方法、路径以及协议版本,还可以为前端界面添加各种组件。代码4.1为典型的表单,其中,
之间的内容我们不需要关注,而