应用层:
一般我们写的⼀个个解决我们实际问题,满⾜足我们⽇日常需求的网络程序,都是在应用层。
HTTP协议:
认识URL:
平时我们俗称的“网址”,其实就是说的URL。
urlencode和urlecode
像 / ? :等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现. 比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义。
转义的规则如下: 将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做⼀位,前⾯面加上%,编码 成%XY格式。
HTTP协议格式:
- 首行:[方法] + [url] + [版本]
- Header:请求的属性,冒号分割的键值对;每组属性之间使用\n分割遇到空行表示Header部分结束。
- Body:空行后面的内容都是Body,Body允许为空字符串。如果Body存在,则在Header中会有一个Content-length属性来标识Body的长度。
HTTP响应: - 首行:[版本号] + [状态码] + [状态码解释]
- Header:请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束 。
- Body:空行后面的内容都是Body。Body允许为空字符串,如果Body存在, 则在Header中会有一个 Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在 Body中。
HTTP的方法:
其中最常用的就是GET和POST方法。
HTTP的状态码:
最常见的状态码:比如200(OK),404(NOT Found),403(Forbidden),302(Redirect,重定向),504(Bad Gateway).
HTTP常见Header: - Content-Type: 数据类型(text/html等);
- Content-Length: Body的长度;
- Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
- User-Agent: 声明用户的操作系统和浏览器版本信息;
- referer: 当前页面是从哪个页⾯面跳转过来的;
- location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;