http请求从TCP建立三次握手后进行,客户端按照规定的格式向服务器发送http请求,服务器在接收到这个请求之后,首先要对其进行解析,发掘出客户端所需要的相关资源,然后经过相应的业务逻辑处理,找到这个相应的资源,并将它以特定的形式返回给客户端。注意:不论是请求还是响应他都按照http协议的相关格式来进行,那都是比较通用的。

http的请求格式

  http的请求格式主要包括这几部分:请求行、请求头、空行、消息体。具体结构如下图所示:

请求行:是指请求中的第一行,它主要有3部分构成:GET、POST等方法名,请求资源的URI,所用http的版本号。

请求头中的信息:有和缓存相关的信息和客户端身份(user-Agent)的信息。

消息体:是指客户端向服务器请求的数据资源,这部分数据不是每个请求所必有得。

http的响应格式

http的请求格式主要包括这几部分:响应行、响应头、空行、消息体。具体结构如下图所示:

响应行:它主要包含三部分内容:所使用的http版本号、状态码及状态说明。

响应头:响应头是服务器传递给客户端用于说明服务器的一些信息,以及将来继续访问该资源时的策略。

消息体:是指服务器向客户端回应的html文件,或者是其他形式的内容,如视频文件、图片等。

Socket

http页面请求的这一部分内容与Socket编程紧密相关,又称之为网络编程,网络协议通过一个叫做socket的对象抽象出来,socket可以建立网络连接,读数据,写数据。socket模块定义了一些常量参数,用来指定socket的的地址族、socket的类型、以及支持的TCP/IP协议。

socket.socket([family[, type[, proto]]]):根据指定的地址族和套接字类型、协议编号(默认为0)来创建套接字对象。AF_INET对应的IPV4, AF_INET6对应的IPV6。现在最常用的是IPV4协议。具体的参数分配如下图:

服务器端的编程(ser):

Socket   :制定期望的通讯协议类型。AF_INET :IPV4,现在使用最多的。SOCK_STREAM :流式套接字。

Bind() ip: port:给套接口分配一个本地协议地址,对于TCP,调用函数bind可以制定一个端口号,用于标识某个计算机上的某个进程,它还可以指定一个IP地址

Listen:仅被TCP服务器调用,它是一个将调用connect发起连接的客户套接口,它指示内核指向此套接口的连接请求。该函数在accpect之前被调用。对于监听套接口,内核必须维护连个队列:未完成连接队列和已完成连接队列的状态。

Accept:从已完成连接队列头返回下一个已完成的连接,如果已完成的连接队列为空,则进入睡眠状态。如果accept执行成功,则代表与客户连接成功

Recv/read:接收客户端发来的信息。

Send/write:给客户端返回一个ok;

Close:关闭连接。

客户端cli:

Socket:制定期望的通讯协议类型。AF_INET :IPV4,现在使用最多的。SOCK_STREAM :流式套接字。

Connect:建立一个与服务器的链接。客户端在调用connect之前不必再调用bind,如果是tcp套接口的话,函数connect激发TCP的三次握手过程,且仅在连接建立成或错误时返回

Send:给客户端发送信息。只能说明成功地将数据写入发送缓冲区内,至于是否到达还不一定。

Recv:接收客户端发过来的ok.

Close:执行si'ci'hui'shou

Getsockname和getpeername返回与套接口有关的本地协议地址。Getsockname可用来获取某套接口的地址族。在不调用bind的客户机上,connect成功返回后,Getsocknam返回内核分配给此连接的本地端口号和IP地址。

三次握手

     最初始客户机和服务器的Tcp进程他们都处于CLOSED状态,首先是B的TCP服务器进程先创建了传输控制块TCB,准备接受客户端的连接请求,然后B服务器进程端就处于LISTEN状态,等待客户端的连接请求。然后A的TCP客户进程也是首先创建了一个传输控制模块,然后向B发出连接请求报文段,报文段的首部同步位SYN=1,同时给自己设定一个初始量S,此时客户进程进入一个SEND状态即就是同步已发送状态。接着,B接收到A发出的连接请求以后, 同意连接建立,则需要向A发送一个确认。即把SYN和ACK都置为1,确认号为ack=S+1,同时还应发送一个自己的初始值假定为n,此时B进入同步收到状态。最后客户机A收到B的确认后,还应向B发出确认,将ACK置为1,另外将ack置为n+1,然后A将进入ESTABLISHED已建立连接状态。在B收到A的确认后,也进入ESTABLISHED状态。如下图所示:

四次挥手

A进程先向TCP发出一个连接释放报文段,并停止再发送数据,主动关闭TCP连接,需要将终止控制位FIN置为1,并设置它的初始值U,这时A进入终止等待1状态,等待B的确认。B收到链接释放报文段后立即发出确认,确认号ack=U+1,例外设置一个自己的初始值v,然后B就进入CLOSE-WAIT状态。当tcp通知高层应用程序后,然后A和B之间的连接就释放了,但是此时TCp处于半关闭状态,即A到B之间的连接释放了,但是B还可以向A发送数据,A收到B的确认后就进入终止等待2状态,等待B发出的连接释放报文段。假设B发出连接释放报文段,则要将终止控制位FIN置为1,同时发出确认号ack=u+1,还要再设置一个自己的初始值为W,然后B就进入了最后确认状态LAST-ACK,等待A的确认;A收到B的链接释放报文段后,向B发出确认,将ACK置为1,确认号置为W+1,然后A就进入TIME-WAIT时间等待状态。,当A等待上2MSL最长报文段寿命后,即4S进入CLOSED状态,才能开始下一个新连接的建立。

请求http页面的相关过程的更多相关文章

  1. HTTP 错误 500.19 请求的页面的相关配置数据无效 解决办法

    "HTTP 错误 500.19 请求的页面的相关配置数据无效" 解决办法   HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该 ...

  2. "HTTP 错误 500.19 请求的页面的相关配置数据无效" 解决办法

    HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效. 问题"详细错误信息模块 IIS Web Core通知 Begin ...

  3. win server2012r2上发布网站常见错误 "HTTP 错误 500.19 请求的页面的相关配置数据无效" 解决办法

    HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效. 问题“详细错误信息模块 IIS Web Core通知 BeginReque ...

  4. win7下IIS错误:"无法访问请求的页面,因为该页的相关配置数据无效"的解决方法(转)

    今天新装win7,然后在IIS下布署了一个网站,布署完成后运行,提示如下错误:HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效 ...

  5. HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。

    HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 详细错误信息模块 IIS Web Core 通知 BeginReques ...

  6. IIS7 无法访问请求的页面,因为该页的相关配置数据无效

    HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 解决方案: C:\Windows\Microsoft.NET\Frame ...

  7. 遭遇“HTTP 错误 500.19 无法访问请求的页面,因为该页的相关配置数据无效。”

    windows 2008下IIS7 安装ASP.NET 遇到如下错误: HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. ...

  8. Error-MVC:HTTP Error 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。

    ylbtech-Error-MVC:HTTP Error 500.19 - Internal Server Error  无法访问请求的页面,因为该页的相关配置数据无效. 1.返回顶部 1. IIS ...

  9. IIS7.5 HTTP 错误500.19-Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效

    IIS7.5 HTTP 错误500.19-Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效 --------------------------------- ...

随机推荐

  1. 清除代码中的svn文件。

    @echo on color 2f mode con: cols=80 lines=25 @REM @echo 正在清理SVN文件,请稍候...... @rem 循环删除当前目录及子目录下所有的SVN ...

  2. 想对list里面的对象进行排序

    不必使用排序算法.实现Comparator接口就行

  3. CodeForces 721C Journey(拓扑排序+DP)

    <题目链接> 题目大意:一个DAG图有n个点,m条边,走过每条边都会花费一定的时间,问你在不超过T时间的条件下,从1到n点最多能够经过几个节点. 解题分析:对这个有向图,我们进行拓扑排序, ...

  4. xshll 连接ubuntu出现 ssh服务器拒绝了密码

    一般进行到这一步,可能是sshd的设置不允许root用户远程登录 首先修改一下vim /etc/sshd/ssh_config 修改成如下图: 如果找不到或修改不行 可以先用普通用户登录再su到roo ...

  5. springboot 使用 swagger2

    段时间,同事分享了一下 swagger-ui,于是自己尝试了一下.大致的使用过程这里记录一下: 1.添加依赖 <!--swagger-ui--><dependency> < ...

  6. 9. http协议_响应状态码_页面渲染流程_路由_中间件

    1. http协议 超文本传输协议 协议详细规定了 浏览器 和 万维网服务器 之间互相通信的规则 客户端与服务端通信时传输的内容我们称之为报文(请求报文.响应报文) 常见的发送 get 请求方式 在浏 ...

  7. hdfs 路径不支持‘:’

    hdfs 路径不支持‘:’,但Linux支持. -put: Pathname /public/platform/control_center/file_center/weiflow/core-user ...

  8. Web Service学习(一)

    1.WebMethod特性包含哪些属性,都有什么用? 1.BufferResponse属性 该属性表明是否启用对Web Service方法响应的缓冲.当设置为true时,Web Service方法将响 ...

  9. PHP算法学习(1) 全局唯一ID

    2019年1月8日16:11:13 svn地址:svn://gitee.com/zxadmin/live_z    代码在code里面 全局唯一ID 生产 后续会添加其他方法 <?php /* ...

  10. 如何设置 jenkins 任务执行的历史记录在左侧显示的格式?

    java -jar I:\CDC\jenkins\jenkins-cli.jar -s http://$ENV:MasterHost.us.oracle.com set-build-display-n ...