目录
URL格式
HTTP请求和响应报文的字段?
HTTP请求方法
常见的状态码
GET 和 POST 的区别
Cookie 和 Session
?:是用来分割URL的主体部分(通常是路径)和查询字符串(query string)查询字符串是一组键值对的参数
query string:是键值对的结构,&分割键值对,=分割键和值
Content-Type: 数据类型(text/html等)。
Content-Length: 正文的长度。
Host: 客户端告知服务器,所请求的资源是在哪个主机的哪个端口上。
User-Agent: 声明用户的操作系统和浏览器的版本信息。
Referer: 当前页面是哪个页面跳转过来的。
Location: 搭配3XX状态码使用,告诉客户端接下来要去哪里访问。
Cookie: 用于在客户端存储少量信息,通常用于实现会话(session)的功能。
Connection 字段 ---> 长连接
HTTP/1.1 版本的默认连接都是长连接,但为了兼容老版本的 HTTP,需要指定 Connection 首部字段的值为 Keep-Alive。
开启了 HTTP Keep-Alive 机制后, 连接就不会中断,而是保持连接。当客户端发送另一个请求时,它会使用同一个连接,一直持续到客户端或服务器端提出断开连接。
Content-Encoding 字段
Content-Encoding 字段说明数据的压缩方法。表示服务器返回的数据使用了什么压缩格式
Content-Encoding: gzip
GET:用于从服务器获取资源,通常是通过URL传递参数来请求资源。GET请求是幂等的,即多次请求相同资源不会产生不同的结果。
POST:用于向服务器提交数据,通常用于创建新资源或在服务器上执行某些操作。POST请求不幂等,多次提交相同的数据可能会产生不同的结果。
HEAD:类似于GET请求,但只返回资源的头部信息,不返回实际的数据。通常用于检查资源是否存在或获取资源的元数据。
PUT:用于更新或创建指定的资源,通常将请求的数据放在请求体中,以覆盖服务器上的现有资源或创建新资源。
DELETE:用于删除指定的资源。DELETE请求用于删除服务器上的资源。
OPTIONS:用于获取目标资源支持的通信选项。客户端可以使用OPTIONS请求来查询服务器支持的请求方法、头部信息等。
PATCH:用于部分更新资源,通常将请求的数据放在请求体中,只更新资源的一部分而不是整个资源。
TRACE:用于追踪请求在传输过程中的轨迹,通常用于诊断和调试。
CONNECT:通常用于建立与代理服务器的网络连接,以便进行加密通信(如HTTPS)或隧道传输。
1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。
2xx 类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。
3xx 类状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向。
301 和 302 都会在响应头里使用字段 Location,指明后续要跳转的 URL,浏览器会自动重定向新的 URL。
4xx 类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。
5xx 类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。
RFC代表"Request for Comments",它是一种用于制定和描述互联网标准、协议和相关信息的文档系列。RFC文档是由互联网工程任务组和其他互联网相关组织发布的,用于记录互联网的技术规范和协议。
根据 RFC 规范,GET 的语义是从服务器获取指定的资源。GET 请求的参数位置一般是写在 URL 中,URL 规定只能支持 ASCII,以?分割URL和传输数据,参数之间以&相连
根据 RFC 规范,POST 的语义是根据请求负荷(报文body)对指定的资源做出处理(POST方法一般用于将数据上传给服务器)。POST 请求携带数据的位置一般是写在报文 body 中
先说明下安全和幂等的概念:
如果从 RFC 规范定义的语义来看:
上面是从 RFC 规范定义的语义来分析的。
但是实际过程中,开发者不一定会按照规范定义的语义来实现 GET 和 POST 方法。比如:
如果「安全」放入概念是指信息是否会被泄漏的话,虽然 POST 用 body 传输数据,而 GET 用 URL 传输,这样数据会在浏览器地址拦容易看到,但是并不能说 GET 不如 POST 安全的。
虽然在浏览器地址拦看不到 POST 提交的 body 数据,但是只要抓个包就都能看到了。
GET和POST没有本质区别,使用GET实现的场景基本上也可以使用POST,使用POST实现的场景基本上也可以使用GET
Cookie和Session是用于在Web应用中维护用户状态和跟踪用户会话的两种常见方式
Cookie
Cookie不是缓存,是持久化存储数据的手段,浏览器自动帮你存储,这个存储是保存到硬盘上的;而缓存的数据不一定是持久化的(也可以在内存里缓存);缓存的数据是用来提高访问速度的!
Session
会话的本质就是一个哈希表,存储着一些键值对。其中key就是身份标识(sessionId),value就是用户信息(session)。