HTTP请求/响应的步骤:
- 客户端连接到WEB服务器:浏览器与web服务器的HTTP端口建立一个TCP套接字连接,例如:http://www.baidu.com
- 发送HTTP请求:通过TCP套接字,客户端向WEB服务器发送一个文本的请求报文,请求报文=请求行+报文头+空行+请求数据;
- 服务器接受请求并返回HTTP响应:WEB服务器解析请求,定位请求资源。服务器将资源副本写到TCP套接字,由客户端读取,响应=状态行+响应头部+空行+响应数据;
- 释放TCP连接:若connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection模式为keepalive,则该链接会保持一段时间,在该时间内可以继续接受请求;
- 浏览器解析HTML内容:客户端浏览器首先解析状态行查看表明请求是否成功的状态代码,然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。浏览器读取数据相应数据HTML根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:
1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
5、释放TCP连接;
6、浏览器将该html文本解析并显示内容;
POST和GET的区别:
1、GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456.,POST方法是把提交的数据放在HTTP包的Body中;
2、GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据大小没有限制;
3、GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值;
4、GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码,而POST相对安全。