HTTP协议

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网络

img

1.4 应答

服务器接受请求,并根据请求信息返回数据作为应答

1.5 服务器与web客户端断开连接

一般情况下,一旦web客户端获取到了服务器返回的数据,就要断开TCP连接,如果使用长连接,会在一定时间内保持连接,一旦超过一定时间没有发生请求,会自动断开连接

二:HTTP协议格式

  • 首行:POST URL HTTP/1.1
  • 请求头部分
  • 空行
  • 请求体

image-20230729112524572

  • 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:(网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值