HTTP协议用于客户端和服务器之间的通信,请求访问的一段是客户端,提供资源响应的一段是服务器端。

HTTP通信是采用请求应答的方式来进行的,客户端发出请求,服务器响应。如果没有客户端的请求,服务器端是不进行任何响应的。HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列4个步骤:

(1)建立TCP连接

在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP /IP完成,这是在网络层进行的。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。

(2)Web浏览器向Web服务器发送请求命令

一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令,如下所示,其中GET表示请求服务的类型,随后的字符串/index.html指明了请求访问的资源对象,也叫做请求URI。最后的HTTP/1.1表示HTTP的版本号。综合来看,请求报文包括请求方法、请求URI、协议版本、可选的请求首部字段和内容实体。

GET /index.htm HTTP/1.1

Host:hackr.jp

(3)Web服务器应答

客户机向服务器发出请求后,服务器会客户机回送应答,如下所示。开头的HTTP/1.1表示服务器对应的版本号,接下来的200 OK表示请求处理的处理结果的状态码和原因短语。接下来是响应首部字段。

HTTP/1.1 200 OK

Date:Tue ,10 July 2016 08:33:16 GMT

Content-Length:362

Conten-Type:text/html

<html>

……

(4)Web服务器关闭TCP连接

一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码

Connection:keep-alive

TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

在HTTP的请求服务类型主要有以下八种:

GET:获取资源

GET方法用来请求访问已经被URI识别的资源,具体的请求与响应的例子如下:

请求

GET /indexhtml HTTP/1.1

Host:www.hackr.jp

响应

返回index.html的页面资源

POST:传输实体主体,具体的请求响应例子如下:

请求

POST /submit.cgi HTTP/1.1

Host:www.hackr.jp

Content-Length:1560(1560字节的数据)

响应

返回submit.cgi接收数据的处理结果

PUT:传输文件,具体的请求响应例子如下:

请求

PUT /example.html HTTP/1.1

Host:www.hackr.jp

Content-type:text/html

Content-Length:1560(1560字节的数据)

响应

返回状态码

HEAD:获得保温首部

请求

HEAD /indexhtml HTTP/1.1

Host:www.hackr.jp

响应

返回index.html有关的响应首部

DELETE:删除文件

请求

DELETE /example.html HTTP/1.1

Host:www.hackr.jp

响应

返回状态码

OPTIONS:询问支持的方法

请求

OPTIONS* HTTP/1.1

Host:www.hackr.jp

响应

HTTP/1.1 200 OK

Allow:GET,POST,HEAD,OPTIONS

(返回服务器支持的方法)

TRACE:追踪路径

请求

TRACE HTTP/1.1

Host:www.hackr.jp

Max-Forwards:2

响应

HTTP/1.1 200 OK

Content-type:message/http

Content-Length:1024

TRACE HTTP/1.1

Host:www.hackr.jp

Max-Forwards:2

CONNECT:要求用隧道协议链接代理

请求

CONNECT proxy.hackr.jp:8080 HTTP/1.1

Host:proxy.hackr.jp

响应

HTTP/1.1 200 OK(之后进入网络隧道)

浅谈HTTP请求与响应的更多相关文章

  1. 浅谈Spring 5的响应式编程

    这篇使用Spring 5进行响应式编程的入门文章展示了你现在可以使用的一些新的non-blocking, asynchronous.感谢优锐课老师给予的指导! 近年来,由于响应式编程能够以声明性的方式 ...

  2. 浅谈HTTP请求头content-type

    请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成.实体头域包含关于实体的原信息,实体头包括Allow.Content- Base.Content-Encoding.Content ...

  3. 浅谈JavaScript的事件响应

    原文出处: Christian Heilmann   译文出处:Chajn Science 每当猴子们问我JavaScript和DOM里啥东西最牛逼时,我都会一巴掌打回去:卧槽还用问么当然是事件响应了 ...

  4. 浅谈http请求数据分析

    前段时间,我一个朋友给我打了个电话.说是现在在搞网络销售,问我能不能帮他整个自动发帖机.说实在的,以前没有弄过这块,我就跟他讲我试试看吧,能不能成不能保证.毕竟是搞程序的嘛,自学的能力还是有滴.经过一 ...

  5. 浅谈jmeter请求参数获取的方式

    一.传统的web端请求参数我们在浏览器url栏看到传递的参数是什么,比如百度: 1.我们假如百度有一个这样的地址: https://www.baidu.com/s?wd=jmeter&name ...

  6. 浅谈Vue响应式(数组变异方法)

    很多初使用Vue的同学会发现,在改变数组的值的时候,值确实是改变了,但是视图却无动于衷,果然是因为数组太高冷了吗? 查看官方文档才发现,不是女神太高冷,而是你没用对方法. 看来想让女神自己动,关键得用 ...

  7. 浅谈HTTP中GET和POST请求方式的区别

    浅谈HTTP中GET和POST请求的区别 HTTP认知: HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议.HTTP的底层是TCP/IP.所以GET和POST的底层也是TCP/IP,也 ...

  8. 浅谈WebService SOAP、Restful、HTTP(post/get)请求

    http://www.itnose.net/detail/6189456.html 浅谈WebService SOAP.Restful.HTTP(post/get)请求 2015-01-09 19:2 ...

  9. 浅谈flask源码之请求过程

    更新时间:2018年07月26日 09:51:36   作者:Dear.   我要评论   这篇文章主要介绍了浅谈flask源码之请求过程,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随 ...

随机推荐

  1. xc_domain_save.c

    /****************************************************************************** * xc_linux_save.c * ...

  2. std::stringstream(1)

    在编写应用程序时,我们经常要使用到字符串.C++标准库中的<string>和<sstream>为我们操作字符串提供了很多的方便,例如:对象封装.安全和自动的类型转换.直接拼接. ...

  3. 让asp.net程序在修改web.config后不重启

    默认情况下web.config修改后,asp.net程序会被重启.为了防止程序重启,要修改machine.config 文件. machine.config默认在C:\WINDOWS\Microsof ...

  4. 【BZOJ3648】寝室管理 树分治

    [BZOJ3648]寝室管理 Description T64有一个好朋友,叫T128.T128是寄宿生,并且最近被老师叫过去当宿管了.宿管可不是一件很好做的工作,碰巧T128有一个工作上的问题想请T6 ...

  5. java模块开发关键步骤

    1. 创建数据表 a) 确定表名(如:role) b) 确定表中的业务列(如:role_name.role_desc) c) 添加其它基本列 i. 如:role_id(主键).status(数据状态, ...

  6. Zabbix添加web页面监控告警

    一,选择添加了web监控的主机 二,创建一个告警触发器 三,定义监控项 设置完毕假如网站down就会触发告警 怎么设置web监控以及触发告警action参考 Zabbix使用SMTP发送邮件报警并且制 ...

  7. dstat命令--检查linux系统性能

    系统性能的相关工具:vmstat.netstat.iostat.ifstat. dstat命令可以查看虚拟内存.网络连接和接口.cpu活动.输入/输出设备等.

  8. 【numpy】

    ndarray在某个维度上堆叠,np.stack() np.hstack() np.vstack() https://blog.csdn.net/csdn15698845876/article/det ...

  9. python脚本前两行

    1. 第一行指定解释器路径 推荐写法: #!/usr/bin/env python 详细说明: #!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python ...

  10. JVM内存四大类型:Heap,Stack,Contant,DirectMemory等

    Stack属于栈的区域,属于每条线程私有的. 方法区和本地方法栈有很大的不同,方法区是用Java级别角度做的代码,本地方法栈指向的是C/C++. Java开发,对象就在堆中,一般而言,堆中只有对象. ...