初识HTTP
HTTP全称超文本传输协议。HTTP是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。
认识URL
URL就是我们俗称的“网址”,又叫“统一资源定位符”,一个完整的url应该是如下格式:
**
-
协议方案名称://用户名:密匙@服务器地址:端口号/请求资源路径?查询字符串#片段标识符**
-
URL编码/解码:查询字符串是用户提交给服务器的数据信息,这些提交的数据中若是出现特殊字符,则有可能与URL中间隔符产生歧义导致url解码失败,因此查询字符串中不能出现特殊字符串。若是提交的数据中真的有特殊字符需要对查询字符串中的数据进行url编码操作,编码之后的数据在对端需要进行url解码操作。
-
(1).url编码:将特殊字符每一个字节转换为16进制数字字符串,并且为了表明这两个字符是经过了url编码后的数据,需要在转换后的数据前加上% + --> %2b (2).url解码:当遇到%,则认为紧跟其后的两个字符需要转码,将第一个字符转换为数字,左移4位,与第二个字符转换后的数字进行相加。 例如: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190722205852383.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2tvdXJvdWJveQ==,size_16,color_FFFFFF,t_70) “+” 被转义成了“%2B”
HTPP协议格式
1.HTTP请求
- 请求首行:请求方法 + URL + 协议版本
- Header:请求的属性,冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束;
- Body:空行后面的内容都是Body,Body可以为空字符串;如果Body存在,则Header中会有一个Content-Length属性来标识Body的长度;
- 例如:
2.HTTP响应
- 响应首行:协议版本 +响应状态码 +状态码描述信息
- Header:请求的属性,冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束;
eg:
Content-Length/Transfer-Encoding;chuncked
Content-Type
3**/Location
Cookie/Set-Cookie
- Body: 空行后面的内容都是Body,Body可以为空字符串;如果Body存在,则Header中会有一个Content-Length属性来标识Body的长度;如果服务器返回了一个html页面,那么html页面就是在Body中;
- 例如:
- 例如:
3.HTTP方法
根据 HTTP 标准,HTTP 请求可以使用多种请求方法。
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
最常用的是GET方法和POST方法。
4.HTTP的状态码
浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
下面是常见的HTTP状态码:
- 200 - 请求成功
- 301 - 资源(网页等)被永久转移到其它URL
- 404 - 请求的资源(网页等)不存在
- 500 - 内部服务器错误
具体的请参考:HTTP状态码列表
5.HTTP常见的Header
- Content-Type: 数据类型(text/html等)
- Content-Length: Body的长度
- Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
- User-Agent: 声明用户的操作系统和浏览器版本信息;
- referer: 当前页面是从哪个页面跳转过来的;
- location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
- Cookie: 用于在客户端储存少量信息,通常用于实现会话(session)的功能;