http 简介
http 历史
1989, 蒂姆。伯纳斯-李在CERN发起
1999年6月,IETF(互联网工程小组)公布的RFC(征求意见稿) 2616/HTTP1.1(现在常用)
2014年12月,IETF(互联网工程小组)将HTTP2 提交IESG(互联网工程指导小组掌舵小组)讨论
2015年5月,RFC 7540(也就是HTTP2)正式发表(最新版的谷歌支持,别的支持还不是很好)
http协议概述
http协议实际上是工作在客户端和浏览器端的一个协议,它主要是在http之上的一个协议。
http.jpeg(1)用户在浏览器输入一个网址(可能是电脑端或者手机端等)
(2)浏览器去解析这个网址,去做相应的处理,根据这个网址去发一个符合HTTP协议的请求消息,带上一些具体的内容
中间: 会经过一些环节,可能是http代理,正向代理,反向代理,会到一个具体的服务器上
(3)具体的服务器呢,因为他收到的是一个标准的http请求,所以呢,他知道怎么样去解析这么个请求,他解析完以后,会拿到具体的请求的内容,然后去根据这些内容做一些相应的操作,做完操作以后,服务器会组织一个响应消息,这个响应消息当然也是符合http协议的一个消息
(4)然后再返回给浏览器,浏览器拿到这样的一个响应消息,浏览器就会根据这个响应消息去做具体的页面的渲染,如果是CSS文件,就去渲染,如果是js文件,就去执行js文件
交互.jpeg如何查看http请求和响应?
chrome-->network
- filter 过滤,可以按照域名来过滤
- 还可以根据具体的响应的内容来过滤
- 左边是http列表,就是累计发出的http请求,在左边都能看到
- 右边的话,是具体的http请求的 ,响应请求的一个具体内容
- 具体每一项的简单介绍:
- response header 就是http的响应头
- request header 就是请求的请求头,包含请求的各个字段,还有cookie ,请求的body
- response 就是具体的响应体
- preview 是对响应体做的一个简单处理,比如如果是一个json的话,谷歌会帮你格式化一下,看的时候比较方便
- cookie 也是帮我们格式化以后好看的一个页面
- timing 能看到请求的一个时间情况
HTTP 请求头
--host: 初始URL中的主机和端口
--accept: 浏览器可接受的MIME类型
--accept-charset: 浏览器可接受的字符集
--accept-encoding: 浏览器能够进行解码的数据编码方式,比如gzip.
--accept-language:浏览器所希望的语言种类
--connection: 表示是否需要持久连接.因为TCP连接是非常耗资源的,如果通过这个告诉浏览器的话,他就不会把连接断开了。
--content-length: 表示消息正文的一个长度。然后服务端可以根据具体的长度来取具体的消息内容。
--cookie: cookie 字符串。
--referer: 包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。
--user-agent: 浏览器类型,如果servlet返回的内容与浏览器类型有关则该值非常有用。
http响应头
--access-control-allow-origin: 指定哪些站点可以参与跨站资源共享。
--content-length: 响应体的字节长度。
--content-type: 设置响应体的mime类型。
--date: 消息发送的时间和日期。
--server: 服务器名称。
--set-cookie: 设置http cookie.
--transfer-encoding: 设置传输实体的编码格式,目前支持的格式:chunked, compress,deflate,gzip,identity
Http Method:指示针对给定资源要执行的期望动作
方法 | 作用 |
---|---|
get | 用于获取数据 |
head | 与get请求的响应结果相同,但没有响应体 |
post | 用于将实体提交到指定的资源,通常导致状态或服务器上的副作用的更改 |
put | 用于创建或更新指定资源 |
delete | 删除指定的资源 |
怎么区分这些method?
-安全性,资源不发生变化;
-幂等性,相同的请求无论执行几次,结果都是相同的;
方法 | 特性 |
---|---|
get | 安全且幂等 |
head | 安全且幂等 |
post | 不安全且不幂等 |
put | 不安全且幂等 |
delete | 不安全且幂等 |
http status code
分类 | 作用 |
---|---|
1XX | 消息,101 switching protocols |
2XX | 成功,200 OK, 201 created |
3XX | 重定向,301 永久重定向,302,临时重定向,304 告诉浏览器,资源没变化 |
4XX | 客户端错误 403,404 |
5XX | 服务器错误 500 服务器彻底挂了, 503 服务器临时挂了 |
content-type
-请求和响应的http内容类型
--type/subtype
常见的内容类型 |
---|
响应text/html, text/css,text/javascript |
给后端application/x-www-form-urlencoded |
给后端multipart/form-data |
给后端application/json |
referer 防盗链
给出一段后端代码举个例子:
if(/.*\.jpg/.test(this.path)){
let referer = this.request.header.referer;
if(referer.indexOf('my.qunar.com')>-1){
yeild next;
}else{
this.response.redirect('/rejected.jpg');
}
return;
}
意思就是说在我的域名下才能看到图片,否则的话,就返回rejected图片;这个很有限,防机器人抓取是放不了的;另外还可以进行网络流量来路统计;
user-agent
厂家标志/版本号(对它的解释)
厂家标志/版本号(对它的解释)
厂家标志/版本号(对它的解释)
作用:区别移动端、pc端;用户设备统计
网友评论