忙完了学校乱七八糟的事终于又有时间学东西了,嘻嘻。(啊下个月就是考试月了,wsl
最近捡起了web,这里就记录一下web的http基础知识
写完才发现这里有个详细的整理http
HTTP请求
GET和POST
- get直接在浏览器输入,post需要工具发送请求
- get用url或者cookie传参,post将数据放在body中
- get的URL有长度限制,post数据可以非常大
- post比get安全,因为URL看不到数据
- get用来获取数据,post用来发送数据
HEAD
HEAD方法与GET类似,但是HEAD并不返回消息体。在一个HEAD请求的消息响应中,HTTP投中包含的元信息应该和一个GET请求的响应消息相同。
用法
特别适用在优先的速度和带宽下
- 检查资源的有效性。
- 检查超链接的有效性。
- 检查网页是否被串改
- 多用于自动搜索机器人获取网页的标志信息,获取rss种子信息,或者传递安全认证信息等。
HTTP数据包
包含
1.请求行:请求类型/请求资源路径、协议的版本和类型
2.请求头:一些键值对,一般由w3c定义,浏览器与web服务器之间都可以发送,表示特定的某种含义
3.【空行】请求头与请求体之间用一个空行隔开;
4.请求体:要发送的数据(一般post方式会使用);例:userName=123&password=123&returnUrl=/
含义
eg:
1 | # Request Headers |
1 | Accept:指浏览器或其他客户可以接爱的MIME文件格式。Servlet可以根据它判断并返回适当的文件格式。 |
HTTP状态码
1**:提示信息-表示请求已收到,继续处理
2**:发送成功(200)
3**:重定向(302)
4**:客户端错误
400.发送请求有语法错误
401.访问页面没有授权
403.没有权限访问该页面
404.没有该页面
5**:服务端错误
500.服务器内部异常
504.服务器请求超时,没有返回结果
cookie与session
贴俩链接吧
cookie特点
- cookie是一门客户端缓存技术
- cookie数据由服务器生成,发送给浏览器保存
- cookie数据的格式:键值对
- cookie数据过期机制:设置expire值
cookie是一门客户端技术,一般是由服务器生成返回给浏览器客户端来保存的,并且cookie是以键值对的形式保存在浏览器客户端的,每一个cookie都会有名称,值,过期时间…。
session特点
- session是一门服务端会话缓存技术。
- session由服务器端的web容器创建,保存在服务器端。
- session保存数据:键值对形式
- session过期:默认30分钟
session是服务端的会话技术,当用户登录了系统,服务器端的web容器就会创建一个会话,此会话中可以保存登录用户的信息,并且也是以键值对的形式去保存的,现在大部分系统都是使用的session技术来做的鉴权(权限鉴定),即:当用户登录完了才可以访问系统中的一些页面和数据。
token
app项目为例:
一般app项目都会基于一个token做鉴权。
因为此时客户端不是浏览器,因此就没有cookie这一说了。
当用户登录app时,服务器会响应回来一个token信息(一般都是返回的一串唯一的标识符,比如说uuid或其他)。
服务器端会将登录用户跟token(票据)保存一个映射关系,一般保存在redis或者表里面,服务器端响应回来的token会缓存在手机
的本地缓存里,后面手机去访问app的其他页面,就会带着这个token去服务器做验证,如果通过这个token能够从redis找到登录用户信息
那么就认为你是已经登录了的用户。
token失效:
一段时间后,服务器端的token失效了,那么就会把此token跟用户的映射关系从redis里删掉,那么后面再来访问的时候,根据你手机请求带来的token就匹配不上登录用户了,服务器就告诉客户端,需要去做重新登录了。
Referer
Referer是HTTP请求Header的一部分,当浏览器向Web服务器发送请求的时候,请求头信息一般需要包含Referer。该Referer会告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。
作用
- 防盗链
比如办事通服务器只允许网站访问自己的静态资源,那服务器每次都需要判断Referer的值是否是zwfw.yn.gov.cn,如果是就继续访问,不是就拦截。 - 防止恶意请求
比如静态请求是*.html结尾的,动态请求是*.shtml,那么所有的*.shtml请求,必须 Referer为我自己的网站才可以访问,这就是Referer的作用。
空Referer
空Referer是指Referer头部的内容为空,或者,一个HTTP 请求头中根本不包含Referer,那么什么时候HTTP请求会不包含Referer字段呢?
根据Referer的定义,它的作用是指示一个请求是从哪里链接过来,那么当一个请求并不是由链接触发产生的,那么自然也就不需要指定这个请求的链接来源。
比如,直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含Referer字段的,因为这是一个“凭空产生”的HTTP请求,并不是从一个地方链接过去的。
允许Referer为空,意味着你允许比如浏览器直接访问,就是空
X-Forwarded-For
X-Forwarded-For 是一个扩展头。HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引入,用来表示 HTTP 请求端真实 IP,现在已经成为事实上的标准,被各大 HTTP 代理、负载均衡等转发服务广泛使用,并被写入 RFC 7239(Forwarded HTTP Extension)标准之中。