前言
http的概念,我相信只要是搞互联网的都不陌生,好比说我,用http,用三方的开源库调调接口,通常人均可以很顺利作到,可是真正别人问我一些http实质性相关的一些东西的时候,每每就懵逼,更别谈参加面试了,既然这样,那就学习,记录吧。html
HTTP方法有哪些
http请求方法有五种:POST,GET,HEAD,PUT,DELETE,TRACE,OPTIONS,CONNECTweb
- GET:向服务器发请求,但愿获得一些数据,通常作单向的获取数据,很简单。
- POST:也是向服务器发送请求,这时候咱们是post一个表单,数据比较多,例如上传文件。
- HEAD:和get差很少,只是返回的数据没有body,仅仅返回的是数据头部信息。一个典型的使用场景,就是当咱们要下载一个文件的时候先判断一下该文件的大小,这时候直接head一下就能够了。
- PUT:add数据到服务器而且替换服务器中指定的资源。
- DELETE:用于删除服务器指定的资源。
- TRACE:显示服务器收到的请求信息,好比丢包率等,主要用于诊断和测试。
POST和GET比较
- 请求数据传输方式不一样:GET是把请求信息放在url中,好比name,id等信息,POST是把包装在请求体中,通常是form的形式提交给服务器。
/books/?sex=man&name=Professional HTTP/1.1
复制代码
这就是一个get请求,咱们把一些数据信息直接放在url的后面。面试
- 安全性不一样:POST请求的数据在请求的body里面,而GET请求的数据在URL中,咱们经过缓存就能够很容易拿到请求信息。
- 数据类型不一样:GET请求只容许是ASCII字符,POST无限制。好比在请求数据的时候才有GET请求,查看URL当里面有中文的时候里面会出现不少%%%这种符号,这都是通过base64转换了的,由于get请求数据只能是ASCII字符,so。。。
- 提交的数据长度不一样:GET提交的数据长度是有限制的(这个限制得看浏览器本身了),POST是表单,因此没有限制。
- 特性:相对服务器来讲GET请求更加安全,这里的安全是指 1.幂等:客户端发送一次和发送屡次请求效果同样,不会形成服务器数据更改。 2,客户端发送的数据不会改变服务器的状态(咱们仅仅想获得数据,不会修改服务器数据),幂等是个很重要的概念,能够记住一下。
POST和PUT比较
这二者都是向服务器新增资源,区别在哪?最重要的区别就是幂等。PUT每每用于修改单一资源,而POST是向资源集合里面加数据。好比:我如今想修改我博客的头像为小猫,那么我就是发个请求,去修改头像小猫,哪怕你提交一万次,你的头像最后仍是小猫,这就是幂等;然而若是你想发一篇博客,那么你每次提交一次那文章确定是新增一篇咯,非幂等。浏览器
总结:PUT是幂等,POST是非幂,这也是二者最最重要的区别。
复制代码
请求消息Request
看一个抓包数据缓存
GET /562f25980001b1b106000338.jpg HTTP/1.1
Host img.mukewang.com
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept image/webp,image/*,*/*;q=0.8
Referer http://www.imooc.com/
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.8
复制代码
1.请求行:包含请求类型GET,须要请求的资源/562f25980001b1b106000338.jpg,HTTP的版本号 2.请求头部:包含目的地址,使用的浏览器代理,编码等信息。 3.空行 4.请求数据:这里包含咱们的请求数据name,id啥的。 安全
响应消息Respone
状态码
2XX 成功bash
- 200 OK,表示从客户端发来的请求在服务器端被正确处理
- 201 Created 请求已经被实现,并且有一个新的资源已经依据请求的须要而创建
- 202 Accepted 请求已接受,可是还没执行,不保证完成请求
- 204 No content,表示请求成功,但响应报文不含实体的主体部分
- 206 Partial Content,进行范围请求
3XX 重定向服务器
- 301 moved permanently,永久性重定向,表示资源已被分配了新的 URL
- 302 found,临时性重定向,表示资源临时被分配了新的 URL
- 303 see other,表示资源存在着另外一个 URL,应使用 GET 方法丁香获取资源
- 304 not modified,表示服务器容许访问资源,但因发生请求未知足条件的状况
- 307 temporary redirect,临时重定向,和302含义相同
4XX 客户端错误tcp
- 400 bad request,请求报文存在语法错误
- 401 unauthorized,表示发送的请求须要有经过 HTTP 认证的认证信息
- 403 forbidden,表示对请求资源的访问被服务器拒绝
- 404 not found,表示在服务器上没有找到请求的资源
- 408 Request timeout, 客户端请求超时
- 409 Confict, 请求的资源可能引发冲突
5XX 服务器错误post
- 500 internal sever error,表示服务器端在执行请求时发生了错误
- 501 Not Implemented 请求超出服务器能力范围,例如服务器不支持当前请求所须要的某个功能,或者请求是服务器不支持的某个方法
- 503 service unavailable,代表服务器暂时处于超负载或正在停机维护,没法处理请求
- 505 http version not supported 服务器不支持,或者拒绝支持在请求中使用的 HTTP 版本
Keep-Alive干吗的
在http1.0时代,每次发送http请求都要经历tcp的握手建立链接,这种操做是很耗时的,也许传送数据的时间尚未建立链接的时间长,这种状况就得不偿失了,因此就有了Keep-Alive,它告诉http此次请求结束后暂时不要关闭链接,等待有后续数据传送直接利用现有链接就行。
HTTP工做原理--在浏览器地址栏键入URL,按下回车后的流程
- 1.浏览器首先根据url解析dns服务器中对应的ip地址。
- 2.根据ip地址和端口号,建立web链接。
- 3.浏览器发送数据包给服务器。
- 4.服务器根据数据包解析出数据,而后提取数据,定位资源,返回给客户端,而且释放资源。
- 5.客户端拿到资源后,先判断是否正常返回,而后解析出对应的html数据。
- 6,完毕,关闭资源。
HTTPS如何保证安全
https主要就是保证数据在链路上传播安全的,主要原理采用:对称加密+非对称加密+CA技术。奇怪了,为啥采用这么复杂的方式啊。咱们作个简单的总结性的分析:
- 对称加密解密数据速度很快。
- 非对称加密更加安全,可是效率不行。
- CA就是第三方的认证,防止密钥被篡改。
https原理:加密解密真正的数据采用的是对称加密,可是对称加密的密钥(密钥A)通讯双方都是同样的,这是很不安全的,因此咱们采用了非对称加密对密钥A进行加密,此次加密仅仅是为了传输密钥A、只会传一次,因此效率问题能够忽略,至于CA技术嘛,要是第三方假冒了怎么办,这里就有个数字签名技术对CA作个认证咯,这样就相对很安全了。