http请求方式
HTTPv1.1后,默认都开启了Keep-Alive,可以保存长链接,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接
Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。
GET 方法
- GET 请求可被缓存
- GET 请求保留在浏览器历史记录中
- GET 请求可被收藏为书签
- GET请求只能进行URL编码,只接受ASCII字符
- GET产生一个TCP数据包, 浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
- GET 浏览器对URL长度有限制
- IE浏览器对URL的最大限制为2083个字符
- Firefox浏览器URL的长度限制为65,536个字符。
- Google浏览器URL最大长度限制为8182个字符。
POST 方法
- POST 请求不会被缓存
- POST 请求不会保留在浏览器历史记录中
- POST 不能被收藏为书签
- POST 请求对数据长度没有要求,Tomcat对POST大小限制默认2M;
- POST 支持多种编码方式
- 点击浏览器的回退时, 数据会被重新提交
- POST产生两个TCP数据包(Firefox就只发送一次),浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(发送2次包的TCP在验证数据包完整性上,有非常大的优点)。
- POST不是时幂等
PUT 方法
- PUT是幂等操作
- PUT请求中的URI表示请求中封闭的实体-用户代理知道URI的目标,并且服务器无法将请求应用到其他资源。如果服务器希望该请求应用到另一个URI,就必须发送一个301响应;用户代理可通过自己的判断来决定是否转发该请求。
DELETE 方法
- 删除指定资源
- PUT是幂等操作
HEAD 方法
- 类GET方法,不响应页面Body部分,用于获取资源的基本信息,即检查链接的可访问性及资源是否修改。
- 只请求资源的首部
- 检查超链接的有效性
PATCH 方法
- PATCH方法是幂等的。
- 对PUT方法的补充,对已知资源进行"局部更新"
常见HTTP状态码
- 信息代码:1xx:
- 100 客户端继续发送请求
- 101 切换协议(只能切换到更高级的协议,例如,切换到HTTP的新版本协议)
- 成功代码:2xx:
- 200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
- 201 (已创建) 请求成功并且服务器创建了新的资源。
- 202 (已接受) 服务器已接受请求,但尚未处理。
- 203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
- 重定向:3xx:
- 301(永久重定向)请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
- 302(临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。(禁止post变化get,可以用)。
- 303 该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。(http/1.1之前无法准确适用)
- 304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
- 307 (临时重定向)遵照浏览器标准,不会从post变为get。
- 客户端错误:4xx:
- 400(错误请求) 1、服务器不理解请求的语法,除非进行修改,否则客户端不应该重复提交这个请求。。2、请求参数有误。
- 401(未授权) 请求要求身份验证。服务器验证拒绝了用户证书。
- 403(禁止) 服务器拒绝请求。
- 404(未找到) 请求失败,请求所希望得到的资源未被在服务器上发现。服务器找不到请求的网页。
- 405(方法禁用) 禁用请求中指定的方法。鉴于 PUT,DELETE 方法会对服务器上的资源进行写操作,鉴于 PUT,DELETE 方法会对服务器上的资源进行写操作。
- 406(不接受) 无法使用请求的内容特性响应请求的网页。请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体。
- 408(请求超时) 服务器等候请求时发生超时。可以再次提交请求。
- 410(已删除) 如果请求的资源已删除,而且没有任何已知的转发地址,服务器就会返回此响应。
- 413(请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
- 414(请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
- 服务器错误:5xx:
- 500 (服务器内部错误) 服务器遇到错误,无法完成请求。
- 501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
- 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
- 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
- 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
- 505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。
HTTP中GET与POST的区别
- GET在浏览器回退时是无害的,而POST会再次提交请求。
- GET的url地址可以被添加为书签,而POST不可以。
- GET请求会被浏览器主动cache, 而POSt不会,可以主动设置。
- GET请求只能进行url编码,而POST支持多种编码。
- GET请求的参数会被保留在浏览器的历史记录中,而POST参数不会。
- GET请求通url传递参数,URL长度在传输中有限制,导致参数有限制,POST参数在body中不会限制。
- GET请求的参数只支持ASCII编码,而POST没限制。
- GET请求把参数直接暴露在URL上,比POST更不安全。
- GET请求,浏览器会把http header 和 data一起发送出去,服务器响应为 200
- POST请求,浏览器先发送header,服务器响应100 continue时,浏览器才会发送 data数据,服务器响应200(并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。)
- HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。
https 加密 (TSL 握手过程)
- client 发送一个 https 请求,连接到443端口(客户端请求公钥)
- server 收到请求, 通过第三方机构私钥加密,把数字证书(公钥)发个client。
- client接收到 数字证书,通过第三方公钥进行解密,根据签名规则,对网站信息与本地签名对比,匹配为成功,不匹配显示警告信息。
- 成功拿到服务器公钥的后,client会随机生成一个 对称秘钥,使用服务器的公钥进行加密后,发送给server。
- server 接收后,使用自己私钥进行解密,得到 对称秘钥,支持client 和 server 用相同的 对称秘钥。
- client 使用 对称秘钥 加密明文内容,发送给server
- server通过 对称密码 进行解谜,得到明文内容