HTTP协议

一、概念

HTTP是一个客户端(用户)和服务器端(网站)请求和响应的标准(TCP),通过使用网络浏览器、网络爬虫、其他工具,客户端发起一个http请求到服务器上指定端口(默认80端口)的TCP连接,收到请求,服务器会给客户端返回一个状态

称客户端为用户代理程序,响应服务器为源服务器,用户代理和源服务器中间存在“中间层”,eg:代理服务器、网关、隧道。

http协议是基于TCP/IP协议之上的应用层协议

二、工作原理

HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。

客户端向服务器发送一个请求报文,请求报文包含请求方法、URL、协议版本、请求头部和请求数据,服务器以一个状态作为响应,响应内容包含协议版本、成功/错误代码、服务器信息、响应头和响应数据

三、HTTP请求响应步骤

1、客户端连接到Web服务器

    一个HTTP客户端(浏览器),与Web服务器的HTTP端口(80端口)建立一个TCP套接字连接,eg:http://xqp.jd.com。

2、发送HTTP请求

    通过TCP套接字,客户端向Web服务器发送一个文本的请求报文(请求行、请求头、空行、请求数据)。

3、服务器接受请求并返回HTTP响应

    Web服务器解析请求,定位请求资源,服务器将资源复本写到TCP套接字,由客户端读取;一个响应由状态行、响应头部、空行、响应数据。

4、释放连接TCP连接

    若connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接

    若connection模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求。

5、客户端浏览器解析HTML内容

    客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码,然后解析每一个响应头,响应头告知以下若干字节的HTML文档和文档的字符集,客户端浏览器读取响应数据HTML,根据HTML的语法对齐进行格式化,并在浏览器窗口中显示。

总结:在浏览器地址栏输入URL,按下回车之后会经历以下流程

    1、浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址。

    2、解析出IP地址后,根据该IP地址和默认端口80,和服务器建立TCP链接。

    3、浏览器发出读取文件(URL中域名后面部分对应的文件)的HTTP请求,该请求报文作为TCP三次握手的第三个报文的数据发送给服务器。

    4、服务器对浏览器请求作出响应,并把对应的html文本发送给浏览器。

    5、释放TCP连接。

    6、浏览器将解析html文本并显示内容。

    请求必须由客户端发出,而服务器端回复响应

注意!三次握手!!!

     三次握手协议指的是在发送数据的准备阶段,服务器端和客户端之间需要进行三次交互:

       第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认。

     第二次握手:服务器收到syn包,必须确认客户的syn(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。

     第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。连接建立后,客户端和服务器就可以开始进行数据传输了。

四、无状态保存

HTTP是一种不保存状态,即无状态协议,HTTP协议自身不对请求和响应之间的通信状态进行保存,也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理;为了实现期望的保持状态功能(保持某个页面的登录状态等),引入Cookie技术,有了Cookie再用HTTP协议通信,就可以管理状态了

五、HTTP请求8种方法

get、head、post、put、delete、trace、options、connect

1、Get

      向指定的资源发出“显示”请求,使用GET方法只用在读取数据。

2、Head

    与get方法一样,都是向服务器指定资源发送的请求,使用head方法的好处是,不用传输全部内容,即可获取该资源的详细信息。

3、Post

    向指定资源提交数据,请求服务器进行处理,数据被包含在请求包中,这个请求可能会创建新的资源或者修改现有资源。

4、Put

    指定资源位置,上传最新内容。

5、Delete

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

6、Trace

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

7、Options

    可以使服务器,传回该资源所支持的所有HTTP请求方法,用"*"代替资源名称,向Web服务器发送Options请求,可以测试服务器功能是否正常运作(eg:检验是否存在跨域问题)。

8、Connect

    能够将连接改为管道方式的代理服务器,常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

Get与Post请求的区别

get请求

    get请求会直接将数据附加在url之后,用?分割url和传输数据,用&分割多个参数

    get请求可以被缓存,可以保留在浏览器历史记录中,可以被设置为书签

    get请求有长度的限制

    一般用来查询数据的操作

post请求

    post请求的数据会直接被放在http请求包的包体中,安全性更高

    post请求不会被缓存,也不会保留到浏览器的历史记录中,不会被设置为书签

    post请求没有长度的限制

    一般被用来敏感数据源的传输以及数据的更新操作

六、HTTP状态码

HTTP响应的第一行为状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分割。

状态代码第一个数字代表当前响应的类型

  • 1xx信息状态码——请求已被服务器接收,正在处理

  • 2xx成功状态码—请求已成功被服务器接收,并且正常出完毕

  • 3xx重定向状态码——需要后续操作才能完成这一请求

  • 4xx客户端请求错误状态码——请求含有词法错误或者无法被执行(服务器无法处理请求)

  • 5xx服务器错误状态码——服务器在处理某个正确请求时发生错误

七、URL

HTTP的统一资源定位符,从因特网获取信息的五个基本元素包括在一个简单的地址中

  • 传送协议 

  • 层级URL标记符号(//—固定不变)

  • 访问资源需要的凭证信息(可省略)

  • 服务器(通常为域名/IP地址)

  • 端口号(以数字方式表示,若为http的默认值“:80”可省略)

  • 路径(get模式的窗体参数,以“?”字符为起点,每个参数以“&”分割,再以“=”分开参数名称与数据[通常以UTF8的URL编码,避开字符冲突的问题])

  • 片段(以“#”为起点)

eg: http://www.luffycity.com:80/news/index.html?id=250&page=1

八、HTTP请求格式(请求协议)

eg:以JD为例,看一下user-agent(告诉你的服务器,我是用什么发送的请求)

      看一个爬虫的例子,爬京东的时候没问题,但是爬抽屉的时候必须带着user-agent,因为抽屉对user-agent做了判断,来判断你是不是一个正常的请求,算是反扒机制的一种。

九、HTTP响应格式(响应协议)

对HTTP深入了解:http://www.blogjava.net/zjusuyong/articles/304788.html

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值