网络原理之http
1.http原理
1.1http协议
应用层协议是自己定的。但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就是其中之一。
1.2URL
平时我们俗称的 “网址” 其实就是说的 URL
1.3urlencode和urldecode
像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现。
比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义。
转义的规则如下:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式
urldecode就是urlencode的逆过程;
1.4http协议格式
Request
首行(请求行): [方法] + [URL] + [版本]
Header(请求报头): 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
Body(请求正文): 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-
Length属性来标识Body的长度;
Response
首行(状态行): [版本号] + [状态码] + [状态码解释]
Header(响应报头): 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
Body(响应正文): 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-
Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在body中.
1.5http方法
方法 | 说明 |
---|---|
GET | 获取资源 |
POST | 传输实体主体 |
PUT | 传输文件 |
HEAD | 获得报文首部 |
DELETE | 删除文件 |
OPTIONS | 询问支持的方法 |
TRACE | 追踪路径 |
CONNECT | 要求用隧道协议代理连接 |
LINK | 建立和资源之间的联系 |
UNLINK | 断开连接关系 |
其中最常用的就是GET方法和POST方法.
GET和POST的区别
GET | POST | |
---|---|---|
后退刷新 | 无害 | 数据会被重新提交 |
书签 | 可收藏为书签 | 不可收藏为书签 |
缓存 | 可以被缓存 | 不可被缓存 |
历史 | 参数保存在浏览器历史中 | 参数不会保存在浏览器历史中 |
对数据长度限制 | 发送数据时,GET方法向URL中添加数据最大为2048字符 | 无限制 |
对数据类型限制 | 只允许ASCII字符 | 无限制 |
安全性 | 安全性差,因为数据是URL的一部分 | 安全,参数不会保存在浏览历史或者服务器日志中 |
可见性 | 数据在URL中对所有人可见 | 数据不会显示在URL中 |
1.GET请求只能放在URL中,POST可以放在URL中,也可以放在请求体中(GET没有请求体)
2.URL长度有限,GET请求的数据有限。
3.GET请求的数据在URL中,对所有人可见,相对安全性更低。
1.6http状态码
分类 | 说明 |
---|---|
1** | 信息,服务器收到请求,需要操作者继续 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需求进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或者无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生错误 |
状态码 | |
---|---|
200 | 请求成功,一般用于get和post请求 |
301 | 永久移动,请求的资源被永久移动到新的URL,返回信息会包含新的URL,会自定向到新的URL。 |
302 | 临时移动,和301类似,但是客户端可继续使用原来的URL |
307 | 临时重定向,和302类似,使用GET请求重定向 |
304 | 未修改,所请求资源未修改,客户端可在缓存中找到该资源 |
400 | 客户端请求语法错误 |
401 | 请求要求用户的身份认证 |
403 | 服务端理解用户请求,但是拒绝该请求 |
404 | 服务器无法找到请求资源 |
405 | 客户端请求的方法被禁止了,URL以及找到,但是服务器提供的方法不包含请求方法 |
500 | 服务器内部错误 |
502 | 网关错误 |
1.7http常见请求报头
1.Content-Type: 数据类型(text/html等)
2.Content-Length: Body的长度
3.Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
4.User-Agent: 声明用户的操作系统和浏览器版本信息;
5.referer: 当前页面是从哪个页面跳转过来的;
6.location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
7.Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;
2.session和cookie
2.1用户信息
Http 是一个无状态协议, 就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。这种无状态的的好处是快速。坏处是需要进行用户状态保持的场景时[比如,登陆状态下进行页面跳转,或者用户信息多页面共享等场景],必须使用一些方式或者手段比如: session 和cookie
2.2cookie
cookie是一种在浏览器端解决的方案,将登陆认证之后的用户信息保存在本地浏览器中,后面每次发起http请求,都自动携带上该信息,就能达到认证用户,保持用户在线的作用,具体如下图:
2.3session
而将用户敏感信息放到本地浏览器中,能解决一定的问题,但是又引进了新的安全问题,一旦cookie丢失,用户信息泄露,也很容易造成跨站攻击,所以有了另一种解决方法,将用户敏感信息保存至服务器,而服务器本身采用md5算法或相关算法生成唯一值(session id),将该值保存值客户端浏览器,随后,客户端的后续请求,浏览器都会自动携带该id,进而再在服务器端认证,进而达到状态保持的效果
2.4session和cookie
两者有什么区别呢?
1.Cookie以文本文件格式存储在浏览器中,而session存储在服务端
2.因为每次发起Http 请求,都要携带有效Cookie信息,所以Cookie一般都有大小限制,以防止增加网络压力,一般不超过4k
3.可以轻松访问cookie值但是我们无法轻松访问会话值,因此session方案更安全
2.5本地禁止cookie
要使用session,其实还是需要使用cookie机制来保存session id的,那么万一在客户端cookie机制被禁掉了,那session貌似也就无法使用了?其实替代方法是有的经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器
3.简单的html
3.1html介绍
HTML是用于创建网页的语言。我们通过使用HTML标记标签创建html文档来创建网页。HTML代表超文本标记语言。HTML是一种标记语言,它是标记标签的集合。
HTML标签是由尖括号括起来的词,如, 。标签通常成对出现,例如和 。
一对中的第一个标签是开始标签;第二个标签是结束标签。如是开始标签,而是结束标签,我们还可以将开始标签称为起始标签,结束标签称为闭合标签。
HTML文档结构至少要包括head, body两部分.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>html基础</title>
</head>
<body>
<h3>黑芝麻</h3>
</body>
</html>
3.2常见标签
文本标签
1.段落标签
<p>段落标签使用p表示,是paragraph的缩写</p>
2.标题标签
标题标签h1 ~ h6 标题标签从名字就能看出,是用来定义文字标题的,包括h1-h6,数字越小对应的字体越大 .如下:
<h1>我是一级标题</h1>
<h2>我是二级标题</h2>
...
<h6>我是老六</h6>
表单标签
1.文本框:
input标签
属性:type ,表示文本的类型;
name,表示文本的名称,后端使用name来获取框中的属性值;
value,默认属性框的填充值,用户输入后显示输入的内容
placeholder,文本框内容为空显示的内容;
size,文本框的长度
<input type="text" name="name" value="黑芝麻" placeholder="请输入姓名" size="10">
2.密码框
密码框与文本框类似 , 区别在于type取值不同, 取值为password, 输入时候自动显示为星号,如:
<input type="password" name="password" placeholder="请填写密码">
3.普通按钮
<input type="button" value="登录">
4.提交按钮
当需要提交表单的时候,需要使用提交按钮。提交按钮需要配合form表单才能向服务 器提交数据。如下:
<input type="submit" value="提交">
5.表单
表单使用form来表示,表示提交到的服务器的信息,一般在注册或者登陆两个应用场景中使用 如下:
<form method="post" action="http://how2j.cn/study/login.jsp">
账号:<input type="text" name="name"> <br/>
密码:<input type="password" name="password" > <br/>
<input type="submit" value="登陆">
</form>
action表示将表单提交的后台地址,method="post"表示提交的方式,提交方式有get方式和post方式两种 get和post方式区别 get方式将信息提交到url的后面 提交大小有限制 不适合私有数据 post方式信息是提交实体内容提交大小无限制 适合私有数据