• HTTP协议详解


    一、TCP协议与HTTP协议

           TCP协议主要用于数据传输控制,HTTP协议主要用于应用层的数据交互,两者有本质的区别;

            HTTP协议工作在应用层,是第七层。TCP协议在第四层传输层,所以HTTP协议是建立在TCP协议的基础上。HTTP协议主要以客户端发送请求、服务端响应应答为标准。浏览器一般称为客户端,Web服务器一般称为服务端,比较常用的Web服务器比如:Nginx ,Apache。

             一般的流程就是:1,客户端打开任意一个端口向服务端的指定端口(默认80端口)发送HTTP请求,首先会建立TCP三次握手,TCP三次握手的目的就是保证数据传输的可靠性、稳定性,TCP三次握手通道建立成功后,会进行数据交互。

                                         2,当客户端请求的数据全部接受完毕后,HTTP服务器会断开TCP连接,整个HTTP连接过程非常短,也被称之为无状态的连接,无状态连接是指客户端每次向服务器发起HTTP请求时,每次请求都会建立一个新的HTTP连接,而不是在一个HTTP连接上进行数据交互。

    二、资源定位标识符

           HTTP请求的内容资源由统一资源标识符来标识 (uniform resource identifiers URI)  关于资源定位及标识有三种

            URI: 统一资源标识符 (uniform resource identifier,URI)

            URL:统一资源定位符 (uniform resource locator,URL)

            URN:统一资源命名    (uniform resource name, URN)

    我们常用的就是URL,对URL,我们详细说明一下,比如:

    https://i.cnblogs.com/EditPosts.aspx?opt=1  

    其实就是:

    protocol://host[ :port]/path/.../[?query-string][#anchor]

    所以:

    protocol:HTTP协议

    host:主机或IP

    path:路径 

    query-string: 传递给服务器的参数及字符串,  像opt=1就是

    anchor:锚定结束,(上条地址中是没有的)

    三,HTTP与端口通信

    HTTP Web服务器默认在本机会监听80端口,当然如果是HTTPS默认就会是443端口。在linux中,每个软件程序执行后,会以进程的方式启动,,程序就会启动并监听本地接口的端口。

    端口是TCP/IP协议中应用层进程与传输层实体间的通信接口。端口是操作系统可分配的一种资源。应用程序通过系统调用与某个端口绑定后,传输层给该端口的数据会被该进程接收,相对应的进程发给传输层的数据都通过该端口绑定。

    TCP/IP协议中引入了一种被称为套接字(socket)的应用程序接口,基于socket接口技术,一台计算机就可以与任何一台具有socket接口的结算及进行通信,而监听的端口在服务端也被称之为socket接口

    四,HTTP request和response详解

    客户端浏览器向Web服务器发起request,Web服务器接到request后进行处理,会生成相应的response信息返回给浏览器,浏览器收到服务端的response信息后会进行解析处理,最终用户看见的网页内容就是浏览器解析出的response信息。

    可以使用curl -v命令打印request和response信息 比如:

    1,request

    第一部分 :请求行,请求类型,访问的资源以及使用的HTTP协议版本,GET表示request请求的类型,  html表示访问资源,HTTP/1.1表示HTTP协议版本

    第二部分:请求头部,指定服务器要使用的附加信息,User-Agent表示用户使用的代理软件,常指浏览器,Host表示服务器地址,也就是请求的主机

    第三部分:请求行,请求头部后面的空行表示请求发送完毕

    第四部分:请求数据,也叫body ,GET方式的请求的body默认为空

    2,response

    第一部分:响应行,包括HTTP版本号、状态码、状态消息。HTTP/1.1表示版本协议号,200表示返回状态吗,OK表示消息

    第二部分:消息报头,响应头部附加信息,Date表示生成响应的日期和时间,Content-Type表示指定MIME类型的HTML(text/html),编码类型....等等

    第三部分:空行,表示消息报头响应完毕

    第四部分:响应正文,服务器返回给客户端的文本信息。

    3,request类型

    GET:向特定的资源发出请求,获取服务端数据

    POST:向Web服务器提交数据进行处理请求,常指提交新数据

    PUT:向Web服务器提交上传最新内容,常指更新数据。

    DELETE:请求删除request-URL所标识的服务器资源。

    TRACE:回显服务器收到的请求,主要用于测试或诊断

    CONNECT:HTTP/1.1协议中预留给能够连接改为管道方式的代理服务器

    OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法

    HEAD:和GET方式相同,只不过服务器响应时不会返回消息体

    五,HTTP 1.0/1.1协议区别

    在HTTP/1.1中

    1,在一个TCP连接上可以传送多个HTTP请求和响应

    2,多个请求和响应过程可以重叠

    3,增加了更多的请求头和响应头,比如,Host,If-Unmodified-Since请求头等

             

  • 相关阅读:
    python的is和==
    pycharm设置
    springboot 配置中心 nacos 简易部署+ 手把手教 涂涂
    解决: springboot 有了eurake怎么再添加 nacos? 【springboot配置多注册中心,同时生效~,不是切换】 涂涂
    .NET Core/.NET5/.NET6 开源项目汇总5:(权限)管理系统项目
    解决ueditor报错:ZeroClipboard undefined
    如何评价 Qt 的发展前景?
    WPF HandyControl开源UI库学习笔记
    C#中的深度学习(一):使用OpenCV识别硬币
    使用SVN进行文档管理和部门知识库建设的建议
  • 原文地址:https://www.cnblogs.com/luoyan01/p/9935389.html
Copyright © 2020-2023  润新知