HTTP协议总结


参考:地址


HTTP

概述

HTTP是应用层协议,由HTTP客户端发起一个请求,创建一个到服务器指定端口的TCP连接。HTTP 服务器则在端口监听客户端的请求,一旦受到请求就会向客户端返回一个状态(200,500等),以及返回内容。
:HTTP是一个无状态的协议,通过服务器认证后成功请求了一个资源后再次请求这一资源时,服务器仍旧会要求你表明身份。


HTTP 请求

HTTP 的请求由三部分组成:

  1. 请求行
  2. 消息报头
  3. 请求正文

请求行

		POST http://127.0.0.1:8080/index.jsp HTTP/1.1
		对应:请求方法、请求的URL、HTTP协议版本、

四个请求的常用方法:
GET(获取)、POST(提交资源用以修改)、PUT(增加)、DELETE(删除)

消息报头
报头域格式:

名字+":"+空格+值

请求报头包含了普通报头、请求报头、实体报头。
1.普通报头(了解):用于所有请求和响应消息,只用于传输消息

  • Date:表示消息产生的日期和时间
  • Connection:允许发送指定连接的选项

2.请求报头:允许客户端向服务器传递请求的附加信息以及客户端自身的信息

  • Host:指定被请求资源的 Internet 主机和端口号,通常从HTTP URL中提取出来
  • User-Agent:允许客户端将当前的操作系统、浏览器等信息告诉服务器
  • Accept:指定客户端接收哪些类型的信息

3.实体报头:定义了正文和请求所标识的资源的信息

  • Content-Encoding:文档的编码
  • Content-Length:内容的长度

HTTP 响应

HTTP 的响应也由三部分组成:

  1. 状态行
  2. 消息报头
  3. 响应正文

状态行
所有HTTP响应的第一行都是状态行,格式:

HTTP版本号+空格+状态码+空格+描述状态的短语

1.状态码:服务器告诉客户端,发生了什么事
状态码类型:

  • 1xx(消息):请求已被服务器接收,继续处理
  • 2xx(成功):请求已被服务器接收、理解、接收
  • 3xx(重定向):需要后续操作完成请求
  • 4xx(客户端错误):请求无法被执行
  • 5xx(服务器错误):服务器处理请求时出错

常见状态码与状态短语:

  • 200 OK
  • 404 Not Found
  • 500 Intenal Server Error

消息报头
普通报头和实体报头和请求报头一样
响应报头:允许服务器传递不能放在状态行中的附加信息,以及关于服务器的信息和 对 Request-URI 所标识的资源进行下一步访问的信息

  • Location:用于重定向新的位置
  • Server:对应User-Agent

GET 和 POST 方法

前面有提到 HTTP 协议与服务器有四种基本的交互方法:GET、POST、PUT、DELETE,对应查、改、增、删四种操作。而最常用的就是 GET 和 POST ,前者用于获取查询资源,后者用于更新资源信息。

区别: https://blog.csdn.net/MOKEXFDGH/article/details/88257290#GET__POST__25


HTTP/1.0 和 HTTP/1.1 区别

  1. HTTP/1.0协议使用非持久连接(短连接),在非持久连接下,一个TCP连接只传输一个Web对象;请求到的资源,服务器会将整个对象发送过来。
  2. HTTP/1.1协议默认使用持久连接(长连接),在持久连接下,不必为每个Web对象新建一个TCP连接,而且可以传输传输多个对象;同时,在请求消息引入了range头域,允许只请求资源的某个部分。

Cookie 和 Session

概述中有提到 HTTP 是无状态协议,因此对于事务处理没有记忆能力,那我们怎么保存状态信息呢?这时 Cookie 和 Session 的出现就是为了解决无状态问题,用以保存客户端状态信息。

具体可见: Cookie 和 HttpSession


Web 缓存

WEB缓存位于服务器和客户端之间,缓存机制会根据请求保存输出内容的副本。发送一个请求,缓存会判断是否是相同URL,如果是则直接使用保存的副本响应给客户端,而不会再次向服务器发送相同的请求。

带缓存的请求流程:
HTTP协议总结
浏览器依靠请求和响应中的头信息来控制缓存:

  • Expires与Cache-Control:都是服务器用来约定和客户端的有效时间。前者属于HTTP/1.0,后者属于HTTP/1.1
  • Last-Modified/If-Modified-Since:缓存过期后,检查服务端文件是否更新的第一种方式
  • ETag/If-None-Match:缓存过期时check服务端文件是否更新的第二种方式

不能被缓存的请求

  1. HTTP信息头中包含Cache-Control:no-cache,pragma:no-cache,或Cache-Control:max-age=0
  2. POST请求无法被缓存
  3. 需要根据Cookie确定内容的动态请求不能缓存