zoukankan      html  css  js  c++  java
  • HTTP请求过程和状态响应码

    HTTP请求过程

    我们在浏览器中输入一个URL,回车之后便可以在浏览器中观察到页面内容。实际上,这个过程是浏览器向网站所在的服务器发送了一个请求,网站服务器接收到这个请求后进行处理和解析,然后返回对应的响应,接着传回给浏览器。响应里包含了页面的源代码等内容,浏览器再对其进行解析,便将网页呈现了出来。
    # 客户端发送request(请求)给服务器,服务器则会返回一个response(响应)给客户端
    此处客户端即代表我们自己的PC或手机浏览器,服务器即要访问的网站所在的服务器。
    为了更直观的说明这个过程,这里用Chrome浏览器的开发者模式下的Network监听组件来做下演示,它可以显示访问当前请求网页时发生的所有网络请求和响应。
    打开Chrome浏览器,右击并选择"检查"项,即可打开浏览器的开发者工具。这里访问百度http://www.baidu.com/,输入该URL后回车,观察这个过程中发生了怎样的网络请求。可以看到,在Network页面下方出现了一个个的条目,其中一个条目就代表一次发送请求和接受响应的过程。
    

    我们先观察第一个网络请求,即www.baidu.com,其中各列的含义如下。:

    • 第一列Name:请求的名称,一般会将URL的最后一部分内容当作名称。
    • 第二列Status:响应的状态码,这里显示为200,代表响应是正常的。通过状态码,我们可以判断发送了请求之后是否得到了正常的响应。
    • 第三列type:请求的文档类型。这里为document,代表我们这次请求的是一个HTML文档,内容就是一些HTML代码
    • 第四列initiator:请求源。用来标记请求是由哪个对象或进程发起的。
    • 第五列size:从服务器下载的文件和请求的资源大小。如果是从缓存中取得的资源,则该列会显示fromcache
    • 第六列time:发送请求到获取响应所用的总时间。
    • 第七列waterfall:网络请求的可视化瀑布流
    首先是general部分,request URL为请求的URL;request method为请求的方法,status code为响应状态码,remote address为远程的服务器的地址和端口,referrer policy为referraer判别策略。
    再继续往下,可以看到,有response headers和request headers,这分别代表响应头和请求头。请求头里带有许多请求信息,例如浏览器标识、cookies、host等信息,这是请求的一部分,服务器会根据请求头内的信息判断是否合法,进而作出对应的响应。response headers就是响应的一部分,例如其中包含了服务器的类型、文档类型、日期等信息,浏览器接受到响应后,会解析响应内容,进而呈现网页内容。
    

    请求

    请求,由客户端向服务端发出,可以分为4部分内容:请求方法(request Method)、请求的网址(request URL)、请求头(request headers)、请求体(request Body)
    

    请求方法

    常见的请求方法有两种:get和post。
    在浏览器中直接输入URL并回车,这便发起了一个get请求,请求的参数会直接包含到URL里。例如,在百度中搜索Python,这就是一个get请求,链接为https://www.baidu.com/s?wd=python,其中URL中包含了请求的参数信息,这里参数wd表示要搜寻的关键字。post请求大多在表单的提交时发起。比如,对于一个登录表单,输入用户名和密码后,点击"登录"按钮,这通常会发起一个post请求,其数据通常以表单的形式传输,而不会体现在URL中。
    

    get和post请求方法有如下区别:

    • GET请求中的参数包含在URL里面,数据可以在URL中看到,而post请求的URL不会包含这些数据,数据都是通过表单形式传输的,会包含在请求体中。

    • GET请求提交的数据最多只有1024字节,而post请求没有限制。

    一般来说,登录时,需要提交用户名和密码,其中包含了敏感信息,使用get方式请求的话,密码就会暴露在URL里面,造成密码泄露,所以这里最好以post方式发送。上传文件时,由于文件内容比较大,也会选用post方式。
    

    我们平时遇到的绝大部分请求都是get或post请求,另外还有一些请求方法,如head、put、delete、options、connect、trace等:

    • get 请求页面,并返回页面内容
    • head 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
    • post 大多用于提交表单或上传文件,数据包含在请求体中
    • put 从客户端向服务器传送的数据取代指定文档中的内容
    • delete 请求服务器删除指定的页面
    • connect 把服务器当做跳板,让服务器代替客户端访问其他网页
    • options允许客户端查看服务器的性能
    • trace回显服务器收到的请求,主要用于测试或诊断

    请求的网址,即统一资源定位符URL,它可以唯一确定我们想请求的资源。

    请求头

    请求头,用来说明服务器要使用的附加信息,比较重要的信息有 Cookie、Referer、User-Agent 等。下面简要说明一些常用的头信息。
    
    • Accept:请求报头域,用于指定客户端可接受哪些类型的信息。
      Accept-Language:指定客户端可接受的语言类型。
      Accept-Encoding:指定客户端可接受的内容编码。
      Host:用于指定请求资源的主机 IP 和端口号,其内容为请求 URL 的原始服务器或网关的位置。从 HTTP 1.1 版本开始,请求必须包含此内容。
      Cookie:也常用复数形式 Cookies,这是网站为了辨别用户进行会话跟踪而存储在用户本地的数据。它的主要功能是维持当前访问会话。例如,我们输入用户名和密码成功登录某个网站后,服务器会用会话保存登录状态信息,后面我们每次刷新或请求该站点的其他页面时,会发现都是登录状态,这就是 Cookies 的功劳。Cookies 里有信息标识了我们所对应的服务器的会话,每次浏览器在请求该站点的页面时,都会在请求头中加上 Cookies 并将其发送给服务器,服务器通过 Cookies 识别出是我们自己,并且查出当前状态是登录状态,所以返回结果就是登录之后才能看到的网页内容。
      Referer:此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计、防盗链处理等。
      User-Agent:简称 UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时加上此信息,可以伪装为浏览器;如果不加,很可能会被识别出为爬虫。
      Content-Type:也叫互联网媒体类型(Internet Media Type)或者 MIME 类型,在 HTTP 协议消息头中,它用来表示具体请求中的媒体类型信息。例如,text/html 代表 HTML 格式,image/gif 代表 GIF 图片,application/json 代表 JSON 类型,更多对应关系可以查看此对照表:http://tool.oschina.net/commons。

    请求体

    请求体一般承载的内容是post请求中的表单数据,而对于get请求,请求体则为空。
    

    img

    在爬虫中,如果要构造post请求,需要使用正确的content-type,并了解各种请求库的各个参数设置时使用的是哪种content-type,不然可能会导致post提交后无法正常使用。
    

    响应

    响应,由服务端返回给客户端,可以分为三部分:响应状态码(response status code)、响应头(response headers)和响应体(response body)。
    

    响应状态码

    响应状态码表示服务器的响应状态,如 200 代表服务器正常响应,404 代表页面未找到,500 代表服务器内部发生错误。在爬虫中,我们可以根据状态码来判断服务器响应状态,如状态码为 200,则证明成功返回数据,再进行进一步的处理,否则直接忽略。下表列出了常见的错误代码及错误原因。
    

    img

    为了舒适的结果,眼前的坎坷路程即使再长都是值得的。
  • 相关阅读:
    git常用指令 github版本回退 reset
    三门问题 概率论
    如何高效的学习高等数学
    数据库6 关系代数(relational algebra) 函数依赖(functional dependency)
    数据库5 索引 动态哈希(Dynamic Hashing)
    数据库4 3层结构(Three Level Architecture) DBA DML DDL DCL DQL
    梦想开始的地方
    java String字符串转对象实体类
    java 生成图片验证码
    java 对象之间相同属性进行赋值
  • 原文地址:https://www.cnblogs.com/abudrSatan1998/p/14211463.html
Copyright © 2011-2022 走看看