请求http页面的相关过程
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页面的相关过程的更多相关文章
- HTTP 错误 500.19 请求的页面的相关配置数据无效 解决办法
"HTTP 错误 500.19 请求的页面的相关配置数据无效" 解决办法 HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该 ...
- "HTTP 错误 500.19 请求的页面的相关配置数据无效" 解决办法
HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效. 问题"详细错误信息模块 IIS Web Core通知 Begin ...
- win server2012r2上发布网站常见错误 "HTTP 错误 500.19 请求的页面的相关配置数据无效" 解决办法
HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效. 问题“详细错误信息模块 IIS Web Core通知 BeginReque ...
- win7下IIS错误:"无法访问请求的页面,因为该页的相关配置数据无效"的解决方法(转)
今天新装win7,然后在IIS下布署了一个网站,布署完成后运行,提示如下错误:HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效 ...
- HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。
HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 详细错误信息模块 IIS Web Core 通知 BeginReques ...
- IIS7 无法访问请求的页面,因为该页的相关配置数据无效
HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 解决方案: C:\Windows\Microsoft.NET\Frame ...
- 遭遇“HTTP 错误 500.19 无法访问请求的页面,因为该页的相关配置数据无效。”
windows 2008下IIS7 安装ASP.NET 遇到如下错误: HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. ...
- Error-MVC:HTTP Error 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。
ylbtech-Error-MVC:HTTP Error 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 1.返回顶部 1. IIS ...
- IIS7.5 HTTP 错误500.19-Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效
IIS7.5 HTTP 错误500.19-Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效 --------------------------------- ...
随机推荐
- web中cookie的使用
一:cookie在浏览器中什么地方查找写入成功 二:如何用js写 function addCookie(name,value,expireHours){ var cookieString=name+& ...
- React Component Lifecycle(生命周期)
生命周期 所谓生命周期,就是一个对象从开始生成到最后消亡所经历的状态,理解生命周期,是合理开发的关键.RN 组件的生命周期整理如下图: 如图,可以把组件生命周期大致分为三个阶段: 第一阶段:是组件第一 ...
- GUI Design Studio的使用方法
一.GUI Design Studio的介绍 GUI DesignStudio 是一个给应用软件设计图形用户界面的专业工具,它可在画基于web形态的原型时,可以用 Axure RP. Balsamiq ...
- 潭州课堂25班:Ph201805201 tornado 项目 第十课 深入应用异步和协程(课堂笔记)
tornado 相关说明 需求: 增加 /save 的 handler,实现异步保存指定 URL 图片的功能 从网页上得到一张图片地址,由这个地址将图片保存到服务器,并将相关数据保存到数据库 impo ...
- 修改Ueditor的图片上传地址
文件地址:ueditro/php/config.json /* 前后端通信相关的配置,注释只允许使用多行方式 */ { /* 上传图片配置项 */ "imageActionName" ...
- ajax 传递中文字符参数 问题
使用ajax 传递中文字符串时, 服务端会接收不到预期的 中文字符. 此时,需要对 js中的中文字符参数进行 编码, 到达服务端后, 再为其解码 即可. 前端: var url = '....'; ...
- js函数声明和函数表达式的区别
Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实现封装.继承等,也可以让代码得到复用.但事物都有两面性,Javascrip ...
- vue源码阅读(一)
版本:2.5.17-beta.0 核心模块(src/core):包括组件.全局API.vue实例.对象属性监测系统.公共方法.虚拟dom.配置等模块 src/core/index.js import ...
- 提高你的python:解释 yield 和 Generators(生成器)
转自:http://www.oschina.net/translate/improve-your-python-yield-and-generators-explained 原文:http://www ...
- 扫毒>>观后感
观后感 中学时期,甚至在小学时期,那个很懵懂的年龄, 看了什么电影,去了哪里,都要写观后感. 那个时候觉得观后感很玄学,为啥看的电影都一样,去的地方都一样, 为啥人家的观后感貌似说的真的有那么点道理, ...