文章目录
- 认识url
- urlencode和urldecode
- HTTP协议格式
- HTTP的方法
- HTTP的状态码
- HTTP常见Header
虽然应用层的协议是由人为规定的,但是已经有大佬们定义了一些现成的,又非常好用的应用层协议,供我们直接参考使用. HTTP(超文本传输协议)就是其中之一。
认识url
我们经常所说的网址就是url;
- http:协议名称
- www.example.jp代表一个IP地址;80代表端口号。这样就可以定位到一个主机的一个进程上了;在应用层上进行DNS域名解析:
- /dir/index代表的是你想访问的资源路径
- 像上述 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现
urlencode和urldecode
如果在搜索关键字当中出现了像 / ? : 这样的字符,由于这些字符已经被URL当作特殊意义理解了,因此URL在呈现时会对这些特殊字符进行转义。
在线编码工具
HTTP协议格式
请求格式
- 首行: [方法] + [url] + [版本]
- Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
- Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度;
响应格式
- 首行: [版本号] + [状态码] + [状态码描述]
- Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
- Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在body中.
HTTP的方法
从服务器上拿下来资源数据——GET
GET方法分为两种,分别是带参数和不带参数的;
带参数的,将数据上传给服务器(参数是url中?后面的字符);
不带参数的,从服务器取出数据;
把客户端的数据上传到服务器进行处理——POST
POST只进行将数据上传给服务器(有参数,但并不在url中),他的参数在HTTP请求报头中的请求正文中;
综上,GET通过url传参,将参数回显在url中;
而POST是通过请求正文传参,相对于GET来说比较私密
但实际上两者都是明传输,都不安全
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)的功能
一个网站如果你经常访问或只访问过一次, 当你下一次访问时会自动登录你的账号以及相关信息
这就是Header中的Cookie所完成的。
当我们第一次访问一个网站时,会注册我们的账号信息,这个账号信息是被放在你当前计算机的文件中,称为cookie文件。当你再次打开这个网站后,你cookie文件中保存的用户相关的信息,比如你曾经输入的账号密码就会被放在HTTP的header中的cookie字段中一起发送给服务器,服务器直接让你使用。
首先,我们知道HTTP协议是一种无状态协议,HTTP的每次请求/响应之间是没有任何关系的,如果没有cookie的存在,那么每当我们要进行页面请求时都需要重新输入账号和密码进行认证
当我们第一次进入某个网页,我们输入账号和密码,如果服务器判定你是一个合法的用户,为了后续进行某些网页请求时不用重新输入账号和密码,此时服务器就会进行Set-Cookie的设置,当认证通过并在服务端进行Set-Cookie设置后,服务器在对浏览器进行HTTP响应时就会将这个Set-Cookie响应给浏览器。而浏览器收到响应后会自动提取出Set-Cookie的值,将其保存在浏览器的cookie文件当中