Htpp详解

574 阅读3分钟

1.Htpp简介

HTTP是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

  1. HTTP:超文本传输协议
  2. 文本:数字,字符串
  3. 超文本:声音,图片,地址,定位等
  4. 默认端口:80
  5. Https:'s'是指Secure(安全)
  6. 默认端口:443

2 请求-响应协议

  • 请求(Request):客户端向服务端发送请求
    • 请求方式
    • Get:会将请求的参数加在URL的后面,不安全,因URL的长度限制get请求数据的大小
    • Post:请求参数放在请求体内,安全,数据大小不限制
    • 请求包括:请求行 + 请求头 + 请求体
  • 响应(Response):服务器收到请求后,反馈给浏览器的数据,就是响应
    • 响应包括:响应行 + 响应头 + 响应体

3 状态码

  • 2xx:成功
    • 200 OK 表示客户端请求成功
    • 204 Not Content 表示服务器成功处理,但是没有内容
  • 3xx:重定向
    • 301 Moved Permanently 永久重定向
    • 302 Found 临时重定向,表示请求的资源临时被转移到了别的位置
    • image.png
  • 4xx:客户端错误
    • 404 Not Found 客户端请求的资源不存在

4 Http协议的版本

  • Http1.0 发送请求,创建一次连接,获取一个web资源,连接断开
  • Http1.1 发送请求,创建一次连接,获取多个web资源,连接断开

5 Http通信流程

由Http客户端发起一个请求,建立一个到服务器指定端口的TCP连接,Http服务器监听到客户端发来的请求,返回一个状态码如:Status Code:200 OK和响应的消息(在响应体中则会包含请求的文件或html页面等)。

6 常见请求头

Accept // 浏览器可以支持的类型 */*(任意)、text/html、js etc.
Accept-Encoding// 支持的压缩的类型 gzip
Accept-Language// 浏览器支持的语言 zh-CN
Cache-Control:max-age=0 // 缓存控制
Connection:keep-alive // 保持连接
/*在Http1.0早期,没进行一次http通信,就会有一次TCP连接,
而TCP连接一次需要3次握手,这种方式增加了通信消耗。
所以在http1.1中使用持久连接(keep-alive),
即连接后,只要客户端没有断开,就会一直保持连接状态
*/

7 常见响应头

Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html; charset=utf-8
Set-Cookie:BDSVRTM=0; path=/
Set-Cookie:BD_HOME=1; path=/
Set-Cookie:H_PS_PSSID=36556_37299_36885_36804_36786_37534_37500_37576_26350_22157; path=/; domain=.baidu.com
Strict-Transport-Security:max-age=172800

8 web无状态特征

http 协议是无状态的,无状态即是说不会对请求和响应之间的通信状态做保存。 例如:当你登录一个网站,在网站跳转一个页面后,有提示你重新登录。对于这种用户体验是极差的。为解决这一缺陷引入会话技术。

10 客户端--Cookie

  • 通过请求和响应报文中写入Cookie信息来控制用户客户端的状态。通过响应中的Set-Cookie字段来通知客户端保存Cookie。

11 服务端--Session

  • 基于Tomcat这类的Servlet/JSP容器中,会利用Session来保存服务端的对象状态。 Session采用哈希表结构(key:value)保存信息。当某个网站需要为某个请求建立Session时,服务端会检查当前请求是否存在某个键值对(如果没有则创建hahahha),然后根据key将对应value返回给客户端。