HTTP协议
- HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。
- HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。
一:HTTP工作过程
1.1 地址解析
如果浏览器客户端要请求一个页面,就要先解析请求该页面的URL地址,例如要访问 http: // localhost.com: 8080 /index.html这个页面,
就要从中分解出协议名,主机名,端口,路径等相关部分
- 协议名: http
- 主机名:localhost.com
- 端口:8080
- 路径:/index.html (访问该文件所在服务器的文件路径,当没有路径名时,就代表访问根目录下事先设置的默认文件,例如index.html)
1.2 封装http请求数据包
对URL解析过后,浏览器就确定了服务器和文件名,就要根据这些信息来生成HTTP请求信息了,HTTP请求一般是GET或POST请求
- GET请求格式:
GET 路径/文件名 HTTP/1.0
1.3 封装成TCP包,建立TCP链接,三次握手
因为HTTP协议是应用层最高层协议,因此在建立连接前,web浏览器需要先通过网络与服务器通过TCP来建立连接,根据规则,只有当低层协议建立连接之后,才可以进行更高层的协议连接,TCP与IP协议共同构建Internet,TCP/IP网络
1.4 应答
服务器接受请求,并根据请求信息返回数据作为应答
1.5 服务器与web客户端断开连接
一般情况下,一旦web客户端获取到了服务器返回的数据,就要断开TCP连接,如果使用长连接,会在一定时间内保持连接,一旦超过一定时间没有发生请求,会自动断开连接
二:HTTP协议格式
- 首行:POST URL HTTP/1.1
- 请求头部分
- 空行
- 请求体
HOST: 表示服务器主机的地址和端口
Content-Length:表示body数据的长度
Content-type:表示body数据的格式
application/x-www-form-urlencoded
form表单提交数据的格式,body参数格式为,query: {字段:参数}
application/json
body数据为json格式
Connection:keep-alive,表示长连接,HTTP 长连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。
Accept:*/ * ,表示可以接受任何格式的数据
三:HTTP请求方法
3.1 GET请求
GET 的语义是从服务器获取指定的资源,这个资源可以是静态的文本、页面、图片视频等。GET 请求的参数位置一般是写在 URL 中
- 首行里面的第一个部分就是 GET
- URL 里面的参数可为空可不为空
- GET 请求的 body 一般是空的
3.2 POST请求
POST 的语义是根据请求负荷(报文body)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST 请求携带数据的位置一般是写在报文 body 中,body 中的数据可以是任意格式的数据
- 首行第一个部分就是 POST
- URL中的参数一般为空
- POST 请求的 body 一般不为空,格式一般由content-type来决定
3.3 GET和POST的请求的区别
- 安全:指的是请求的方法不会对服务器上的资源进行破坏
- 幂等:多次执行相同操作,返回的数据是相同的
GET方法一般都是安全和幂等的,因为GET方法是只读操作,不管怎么操作,都是不会去破坏服务器的数据的,因为是只读,所以返回的数据不管是多少次都是一样相同的。可以对GET请求的数据做缓存
POST方法一般都不是安全和幂等的,POST是提交数据的操作,因此会修改服务器的数据,并且会新增数据,所以不是安全和幂等的。
四:HTTP状态码
2XX: 类状态码表示服务器成功处理了客户端的请求
- 200:(成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
- 204:(无内容) 服务器成功处理了请求,但没有返回任何内容。
- 206:(部分内容) 服务器成功处理了部分 GET 请求。
3XX: 表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向
- 300:(多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者选择一项操作,或提供操作列表供请求者选择。
- 302:(临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
- 304:(未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
4XX: 客户端错误,请求包含语法错误或无法完成请求
- 400:(错误请求) 服务器不理解请求的语法。
- 403:(禁止) 服务器拒绝请求。
- 404:(未找到) 服务器找不到请求的网页。
5XX: 这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错
- 500:(服务器内部错误) 服务器遇到错误,无法完成请求。
- 501:(尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
- 502:(错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
- 504:(网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。