网络原理之Http

Http原理

理解为何要有应用层?

我们已经学过 TCP/IP , 已经知道目前数据能从客户端进程经过路径选择跨网络传送到服务器端进程[ IP+Port ],可 是,仅仅把数据从A点传送到B点就完了吗?这就好比,在淘宝上买了一部手机,卖家[ 客户端 ]把手机通过顺丰[ 传送 +路径选择 ] 送到买家 [ 服务器 ] 手里就完了吗?当然不是,买家还要使用这款产品,还要在使用之后,给卖家打分评 论。所以,我们把数据从A端传送到B端, TCP/IP 解决的是顺丰的功能,而两端还要对数据进行加工处理或者使用, 所以我们还需要一层协议,不关心通信细节,关心应用细节!
这层协议叫做应用层协议。而应用是有不同的场景的,所以应用层协议是有不同种类的,其中经典协议之一的HTTP 就是其中的佼佼者。那么, Http 是解决什么应用场景呢?
早期用户,上网使用浏览器来进行上网,而用浏览器上网阅读信息,常见的是查看各种网页【其实也是文件数据, 不过是一系列的 html 文档,当然还有其他资源如图片, css , js 等】,而要把网页文件信息通过网络传送到客户 端,或者把用户数据上传到服务器,就需要 Http 协议【当然,http作用不限于此】

再谈 “协议”

那如何理解应用层协议呢?再回到我们刚刚说的买手机的例子,顺丰相当于 TCP/IP 的功能,那么买回来的手机都附 带了说明书【产品介绍,使用介绍,注意事项等】,而该说明书指导用户该如何使用手机【虽然我们都不看,但是父 母辈有部分是有看说明书的习惯的:)】,此时的说明书可以理解为用户层协议

HTTP协议

虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就 是其中之一.

认识URL

平时我们俗称的 “网址” 其实就是说的 URL

在这里插入图片描述

urlencode和urldecode

像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现. 比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.

转义的规则如下: 将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY 格式

urldecode就是urlencode的逆过程

HTTP协议格式

HTTP请求

首行: [方法] + [url] + [版本]
Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个ContentLength属性来标识Body的长度;

HTTP响应

首行: [版本号] + [状态码] + [状态码解释]
Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个ContentLength属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在body中.

HTTP常用方法GET,POST方法

HTTP的状态码

_类别原因短语
1xxInformational(信息性状态码)接受的请求正在处理
2xxSuccess(成功状态码)请求正常处理完毕
3xxRedirection(重定向状态码)需要进行附加操作以完成请求
4xxClient Error(客户端错误状态码)服务器无法处理请求
5xxServer Error(服务器错误状态码)服务器处理请求错误

常见的状态码, 比如 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)的功能

session和cookie

用户信息

Http 是一个无状态协议, 就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。这种无状态 的的好处是快速。坏处是需要进行用户状态保持的场景时[比如,登陆状态下进行页面跳转,或者用户信息多页面共 享等场景],必须使用一些方式或者手段比如: session 和 cookie

cookie

如上所述, Http 是一个无状态的协议,但是访问有些资源的时候往往需要经过认证的账户才能访问,而且要一直保 持在线状态,所以,cookie是一种在浏览器端解决的方案,将登陆认证之后的用户信息保存在本地浏览器中,后面每 次发起http请求,都自动携带上该信息,就能达到认证用户,保持用户在线的作用,设置cookie的方法在 Http 的 Response 报头中可以携带 Set-Cookie 字段来完成.

session

而将用户敏感信息放到本地浏览器中,能解决一定的问题,但是又引进了新的安全问题,一旦cookie丢失,用户信息泄露,也很容易造成跨站攻击,所以有了另一种解决方法,将用户敏感信息保存至服务器,而服务器本身采用md5算 法或相关算法生成唯一值(session id),将该值保存值客户端浏览器,随后,客户端的后续请求,浏览器都会自动 携带该id,进而再在服务器端认证,进而达到状态保持的效果

cookie vs session

两者有什么区别呢?
Cookie以文本文件格式存储在浏览器中,而session存储在服务端 因为每次发起 Http 请求,都要携带有效Cookie信息,所以Cookie一般都有大小限制,以防止增加网络压力,一 般不超过4k 可以轻松访问cookie值但是我们无法轻松访问会话值,因此session方案更安全

本地禁止cookie

要使用session,其实还是需要使用cookie机制来保存session id的,那么万一在 客户端cookie机制被禁掉了,那session貌似也就无法使用了?

其实替代方法是有的

经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。 还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把 session id传递回服务器

简单的html

html介绍

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>

html常见标签

HTML是由 一套标记标签(Markup Tag)组成的,通常叫做标签.
标签一般由开始标签和结束标签组成.
部分标签为 单标签或者空标签,即没有结束标签 开始标签 结束标签 单标签或者空标签

文本标签

  1. 段落标签
    段落标签使用p标签,是paragraph的缩写,自带换行效果
<p>段落标签使用p表示,是paragraph的缩写</p> 
<p>我爱高圆圆,虽然她已经39岁了</p>
 
  1. 标题标签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">
  1. 密码框 密码框与文本框类似 , 区别在于type取值不同, 取值为password, 输入时候自动显示为星号,如:
<input type="password" name="password" placeholder="请填写密码"> 
  1. 普通按钮 表示一般按钮
普通按钮<input type="button" value="登录">
  1. 提交按钮 当需要提交表单的时候,需要使用提交按钮。提交按钮需要配合form表单才能向服务 器提交数据。
提交按钮<input type="submit" value="提交"> 
  1. 表单 表单使用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方式信息是提交实体内容 提交大小无限制 适合私有数据

Http VS Https

简单理解,http传送数据(包括账号和密码),都是明文传送,很容易被窃取或者侦听,在现有的互联网应用中,很明显有不安全因素,所以有了https,可以简单理解成https多了一层加密解密层,在发送前加密,在收到后解密,在 网络里传输的都是经过加密的数据

多了一层ssl

市场上常见的Http服务器

Tomcat(web 应用服务器)
Nginx
Apache
Lighttpd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值