HTTP
1、什么是HTTP协议?
HTTP协议是超文本传输协议,是计算机之间传输超文本数据的约定和规范,基于【请求/响应】模式、无连接无状态、基于TCP协议的应用层协议。
2、HTTP协议特点
1、简单快速:客户向服务器请求服务时,只需要传送请求方法和路径。 请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。 由于HTTP协议简单,使得HTTP服务的程序规模小,因而通信速度很快。
2、灵活:HTTP允许传输任意类型的数据对象。
正在传输的类型由Content-Type字段标记
3、无连接:每次连接只处理一个请求。服务器处理完客户的请求,并收到客户端的应答后,即断开连接。
缺点:无法处理乱序和重复的IP数据报。
优点:简单、高效
4、无状态:指协议对事务处理没有记忆能力。
服务器不知道客户端是什么状态,即我们给服务器发送HTTP请求之后,服务器根据请求,会给我们发送数据,但是发送完不会记录任何信息。
5、支持B/S(浏览器/服务器)及C/S(客户端/服务器)模式
6、默认端口80
7、基于TCP协议
3、怎么解决无状态、无连接?
怎么解决无连接? Keep-Alive功能使客户端到服务器的连接持续有效,当出现对服务器的后续请求时,Keep-Alive功能避免了重新建立连接。
怎么解决无状态?
方法1、使用Cookie将状态信息保存在客户端。
方法2、使用Session将状态信息保存在服务端。
4、HTTP请求/响应步骤
1. 客户端连接到Web服务器 一个HTTP客户端(即浏览器),与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如:http://www.baidu.com。
2. 客户端向服务器发送一个请求报文。
- 请求报文包含三个部分:【请求行、首部行、请求内容实体】
3. 服务器接收请求并返回HTTP响应报文。
- 响应报文包含三个部分:【状态行、首部行、响应内容实体】
4. 客户端将返回的内容解析并呈现,断开连接。
客户端首先解析状态行,查看表明请求是否成功的状态代码。
然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。
客户端读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
5、请求报文与响应报文格式
请求报文包含三个部分:【请求行、首部行、请求内容实体】
其中,请求行包含:请求方法、请求资源的URL、HTTP协议版本
响应报文包含三个部分:【状态行、首部行、响应内容实体】
其中,状态行包含:HTTP协议版本、状态码、状态码描述语
6、常见的HTTP方法
GET
:请求从服务器获取资源,这个资源可以是静态的文本、页面、图片、视频等。
POST
:它向URI指定的资源提交数据,数据就放在报文的body里。
PUT
:传输文件,报文主题中包含文件内容,保存到对应URI位置;
HEAD
:获得报文首部,与GET
方法类似,只是不返回报文主体,一般用于验证URI是否有效;
DELETE
:删除对应URI位置的文件,与PUT
方法相反;
OPTIONS
:查询相应URI支持哪些HTTP请求方法。
PATCH
:对资源进行部分修改。//PUT也可以用于修改资源,但是只能完全替代原始资源,PATCH允许部分修改。
- TRACE:要求目标服务器返回原始HTTP请求的内容。它可用来查看中间服务器对HTTP请求的影响。
- CONNECT:用于某些代理服务器,它们能把请求的连接转化为一个安全隧道。
7、GET和POST区别?
1. GET用于获取资源;而POST用于传输实体主体。 2. GET方法不会改变服务器状态,是安全的;POST的目的是传送实体主体内容,这个内容可能是用户上传的表单数据,上传成功之后,服务器可能把这个数据存储到数据库中,因此状态也就发生了改变。 3. GET是幂等的;POST不是。
安全概念:请求方法不会破坏服务器上的资源。 幂等概念:多次执行相同的操作,结果都是相同的。
第二种回答:
1、GET参数通过URL传递,POST放在request body中 2、GET请求在URL中传递的参数是有长度限制的,而POST没有 3、GET比POST更不安全,因为参数直接暴露在URL中,所以不能用来传递敏感信息 4、GET请求只能进行URL编码,而POST支持多种编码方式 5、GET请求浏览器会主动cache,而POST支持多种编码方式 6、GET请求参数会被完整保留在浏览历史记录里,而POST中的参数不会被保留 7、GET和POST本质上就是TCP连接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致它们在应用过程中体现出一些不同 8、GET产生一个TCP数据包;POST产生两个TCP数据包
8、状态码
200 OK
:请求被正常处理
204 No Content
:请求被受理单没有资源可以返回;即响应头没有body数据
206 Partial Content
:响应返回的body数据并不是资源的全部
301 Moved Permanently
:表示永久重定向,说明请求的资源已经不存在了,需改用新的URL再次访问
302 Found
:临时重定向,说明请求访问的资源还在,但暂时需要用另一个URL来访问
304 Not Modified
:缓冲重定向,用于缓冲控制
400 Bad Request
:表示客户端请求的报文有错误,笼统的错误
403 Forbidden
:表示服务器禁止访问资源(并不是客户端的请求出错)
404 Not Found
:表示请求的资源在服务器上不存在或找不到
500 Internal Servel Error
:服务器内部错误,笼统的错误
501 Not Implemented
:客户端请求的功能还不支持
502 Bad Gateway
:通常是服务器作为⽹关或代理时返回的错误码,表示服务器⾃身⼯作正常,访问后端服务器发⽣了错误
503 Service Unavailable
:表示服务器当前很忙,暂时⽆法响应服务器
哪些情况需要做301重定向?
网页开发过程中,时常会遇到网站目录结构的调整,将页面转移到一个新地址;网页扩展名的改变,这些变化都会导致网页地址发生改变,此时用户收藏夹和搜索引擎数据库中的旧地址是一个错误的地址,访问之后会出现404页面,直接导致网站流量的损失。或者是我们需要多个域名跳转至同一个域名,例如本站主站点域名为 www.conimi.com ,而还有一个域名 www.nico.cc,由于对该域名设置了301重定向,当输入www.nico.cc 时,自动跳转至 www.conimi.com 。
301重定向有什么优点?
有利于网站首选域的确定,对于同一资源页面多条路径的301重定向有助于URL权重的集中。例如 www.conimi.com和 conimi.com 是两个不同的域名,但是指向的内容完全相同,搜索引擎会对两个域名收录情况不同,这样导致网站权重和排名被分散;对conimi.com 做301重定向跳转至www.conimi.com 后,权重和排名集中到www.conimi.com,从而提升自然排名。
302重定向又是什么鬼?
302重定向(302 Move Temporarily),指页面暂时性转移,表示资源或页面暂时转移到另一个位置,常被用作网址劫持,容易导致网站降权,严重时网站会被封掉,不推荐使用。
9、字段
Host
:客户端发送请求时,指定服务器的域名
Connection
:用于客户端要求服务器使用TCP持久连接
Content-Length
:服务器返回数据时,表明本次回应的数据长度
Content-Type
:服务器返回数据时,表明本次数据的格式
Content-Encoding
:服务器返回数据时,表明本次数据压缩方法
Host:www.A.com //C -> S Content-Length:1000 //S -> C Keep-Alive:timeout=10,max=500 //S -> C Connection:Keep-Alice Content-Type:text/html; charset=utf-8 //S -> C Accept-Encoding:gzip, deflate //C -> S Content-Encoding:gzip //S -> C