网络爬虫之HTTP原理

技术标签: 爬虫  网络爬虫基础  http  网络协议  

image.png

**

image.png

URI和URL

URI的全称Uniform Resource Identifier ,即统一资源标志符。URL的全称Uniform Resource Locator 即统一资源定位符。 URL是URI的子集,也就是每一个URL就是URI,但是每一个URI不一定是URL,URI还有一个子类叫URN,它的全称Universal Resource Name-统一资源名称,URN只命名资源而不指定资源位置。

image.png

image.png

HTTP和HTTPS 

HTTP的全称叫 Hyper Text Transfer Protocol(超文本传输协议)。 HTTPS的全称叫 Hyper Text Transfer over Secure Socket Layer(加密的超文本协议),HTTP加入SSL层。

HTTPS的安全基础是SSL,因此通过它传输的内容都是经过SSL加密的,它的主要作用可以分为两种:

  • 建立信息安全通道,来保证数据传输的安全

  • 确认网站的真实性,凡是使用了HTTPS的网站,都可以通过点击浏览器地址的锁头标志来查看网站认证之后的真实的信息,也可以通过CA机构颁发的安全签章来查询

HTTP的请求过程

image.png

右侧栏点击社区社交,即发送了一个请求。这个过程浏览器向网站所在的服务器发送了一个请求,网站的服务器收到请求解析处理和解析并返回了接口,浏览器拿到接口的数据进行渲染并显示。

image.png

请求

请求,由客户端向服务器发送,可以分为四部分,请求方法,请求网址(URL)、请求头、请求体

请求方法 常见的请求方法有两种:GET和POST

方法 描述
GET 请求页面,并返回页面内容
HEAD 类似GET请求,只不过返回的响应中没有具体的内容,用于获取报头
POST 大多用于提交表单或上传文件,数据包含在请求体中
PUT 从客户端向服务器传送的数据取代指定文档中的内容
DELETE 请求服务器删除指定的页面
CONNECT 把服务器当作跳板,让服务器代替客户端访问其它网页
OPTIONS 允许客户端查看服务器的性能
TRACE 回显服务器收到的请求,主要用于测试或诊断

请求头 请求头,用来说明服务器需要使用的附加信息,重要的有Cookies、Referer、User-Agent。

  • Accept:请求报头域,用于指定客户端可接受哪些类型的信息

  • Accept-Language:指定客户端可接受的语言类型

  • Accept-Encoding:指定客户端可接受的内容编码

  • Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置。从HTTP1.1版本开始,必须包含此内容。

  • Cookie:也常用复数形式Cookies,这是为了辨别用户进行会话跟踪而存储在用户本地的数据。它的主要功能是维持当前访问会话。

  • Referer:此内容用来标识这个请求从哪个页面发过来的,服务器可以拿到这信息并做相应的处理,如来源统计、防盗链处理等

  • User-Agent:简称UA,它是一个特殊的字符串头,可以使服务器识别客户使用操作系统及版本、浏览器及版本信息。

  • Content-Type:也叫互联网媒体类型,在HTTP协议消息头中,它用来表示请求中的媒体类型信息,如text/html代表HTML,image/gif 代表GIF图片,application/json代表JSON类型。

请求体 请求体一般的内容是POST请求中的表单数据,而对GET请求,请求头为空。

Content-Type 提交数据方式
application/x-www-form-urlencoded 表单数据
multpart/form-data 表单文件上传
application/json 序列化JSON数据
text/xml XML数据

响应

 响应,由服务器返回客户端,可分为三部分:响应状态码(Response Status Code)、响应头(Response Headers)、响应体(Response Body).

响应状态码 响应状态码表示服务器的响应状态,如200表示服务器正常,404表示资源找不到,500表示服务器内部出错。

状态码

说明

详情

100

继续

请求者应当继续提出请求

服务器已收到请求的一部分,正在等待其余部分

101

切换协议

请求者已要求服务器切换协议,服务器已确认并准备切换

200

成功

服务器已成功处理了请求

201

已创建

请求成功并且服务器创建了新的资源

202

已接受

服务器已接受了请求,但尚未处理

203

非授权信息

服务器成功处理了请求,但返回的信息可能来自另外一个源

204

无内容

服务器成功处理了请求,但没有返回任何内容

205

重置内容

服务器成功处理,内容被重置

206

部分内容

服务器成功处理了部分请求

300

多种选择

针对请求,服务器可执行多种操作

301

永久移动

请求的网页已永久移动到新的位置,即永久重定向

302

临时移动

请求网页暂时跳转到其它位置,即暂时重定向

303

查看其它位置

如果原来的请求是POST,重定向目标文档应该通过GET提取

304

未修改

此请求返回的网页未修改,继续使用上次资源

305

使用代理

请求者应该使用代理访问该网页

307

临时重定向

请求的资源临时从其它位置响应

400

错误请求

服务器无法解析该请求

401

未授权

请求没有进行身份验证或验证不通过

403

禁止访问

服务器拒绝此请求

404

未找到

服务器找不到请求的网页

405

方法禁用

服务器禁用了请求指定的方法

406

不接受

无法使用请求的内容响应请求的网页

407

需要代理授权

请求者需要使用代理授权

408

请求超时

服务器请求超时

409

冲突

服务器在完成请求时发生冲突

410

已删除

请求的资源已永久删除

411

需要有效长度

服务器不接受不含有效内容长度长度标头字段的请求

412

未满足前提条件

服务器未满足请求者在请求中设置的其中一个前提条件

413

请求实体过大

请求实体过大,超出服务器的处理能力

414

请求URL过长

请求网址太长,服务器无法处理

415

不支持类型

请求格式不被请求页面支持

416

请求范围不符

页面无法提供请求的范围

417

未满足期望值

服务器未满足期望请求标头字段的要求

500

服务器内部错误

服务器遇到错误,无法完成请求

501

未实现

服务器不具备完成请求的功能

502

错误网关

服务器作为网关或代理,从上游服务器收到无效响应

503

服务不可用

服务器目前无法使用

504

网关超时

服务器作为网关或代理,但没有及时从上游服务器收到请求

505

HTTP版本不支持

服务器不支持请求中所用的HTTP版本协议

响应头 响应头包含服务器对请求的应答响应,如Content-Type,Server,Set-Cookie等

  • Date:标识响应产生的时间

  • Last-Modified:指定资源的最后的修改时间。

  • Content-Encoding:指定响应内容的编码

  • Sever:包含服务器的信息,比如名称、版本号等

  • Content-Type:文档类型,指定返回的数据类型是什么,如text/html

  • Set-Cookie:设置Cookies。响应头中的Set-Cookie告诉浏览器需要将此内容放在Cookies中,下次请求携带Cookies请求

  • Expires:指定响应的过期时间,可以使代理服务器或浏览器将加载的内容更新到缓存中。如果再次访问时,就可以直接从缓存中加载,降低服务器负载,缩短加载时间。

响应体 最重要当响应属性响应体的内容。响应体的正文数据都在响应体中。请求网页时,响应的就是HTML代码;请求一张图片时,响应的数据就是二进制数据。

image.png

1、GET和POST有什么区别

        数据传输的不同:GET请求通过URL传输数据,而POST请求通过请求体传输。

        安全性不同:GET请求在URL中可以看见,通过历史记录、缓存可看;POST的数据在请求体中,安全相对较高。

        数据类型不同:GET只允许ASCII字符;POST无限制。

        特性不同:GET是安全(这里的安全是指只读特性,就是使用这个方法不会引起服务器状态变化)且幂等(幂等的概念是指同一个请求方法执行多次和仅执行一次的效果完全相同),而POST是非安全非幂等

2、HTTP和HTTPS的区别

         HTTP无CA证书,HTTPS有CA证书。

         HTTP明文传输,HTTPS是具有安全性的SSL加密传输。

         HTTP默认的端口是80;HTTPS默认的端口是443.

image.png

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Uncle_wangcode/article/details/138174772

智能推荐

在线电脑内存测试软件,Everest/PC Mark内存基准测试_金士顿 8GB DDR3 1600_内存硬盘-中关村在线...-程序员宅基地

文章浏览阅读3.5k次。AIDA64(原Everest)作为一个系统检测软件,它可以详细的显示出PC每一个方面的信息。软件自带的Memory Latency评测,可以通过对内存延时的评测,直观显示出内存子系统的效能。对于普通用户来说,内存系统的快慢可以简单理解成双击文件夹的响应速度。一、原始1614MHz读:12.1GB/s 写:12.3GB/s 拷贝:11.8GB/s 延迟:47.4纳秒二、超频1696MHz读:12...._内存延迟软件

get请求中传json参数报400的错误。_get 参数传递对象400-程序员宅基地

文章浏览阅读1.5w次,点赞6次,收藏9次。需要对特殊字符进行转义后来在网上查资料找到原因了:HttpGet或 HttpPost都不能传包含 " 、“{"、"}"这样的参数,需要对特殊字符进行转义,把 " 转成%22,把 { 转成%7b,把 } 转成%7d..._get 参数传递对象400

C++ malloc/free/new/delete详解(内存管理)-程序员宅基地

文章浏览阅读8.8k次,点赞33次,收藏138次。这里写目录标题malloc/free典型用法内存分配实现过程new/delete典型用法内存分配实现过程new/delete和malloc/free的区别malloc/free典型用法malloc()负责动态配置内存,大小由size决定,返回值成功时为任意类型指针,失败时为NULL。void * malloc(size_t size)free()负责释放动态申请的内存空间,调用free( )后ptr所指向的内存空间被收回,如果ptr指向未知地方或者指向的空间已被收回,则会发生不可预知的错误,如果_c++ malloc

Node.js和Npm_node.js npm-程序员宅基地

文章浏览阅读7.4k次,点赞3次,收藏18次。简单介绍使用Node.js和Npm_node.js npm

breadweb控制台下载_路由器刷breed web控制台助手通用版下载-程序员宅基地

文章浏览阅读3.3k次。路由器刷breed web控制台助手通用版是一款非常实用,安全的路由器刷机工具。它的优势在于能帮助用户刷各种路由器死亡固件,能够让用户的上网速度得到极大的提高。路由器使用久了往往就会出现很多毛病,特别是网上变慢,不稳定等,大家可以试试这工具。使用教程斐讯K2路由器刷不死固件工具使用教程开始刷机教程(记住你的宽带帐号和密码)前期准备,wan口连猫,lan口连电脑,k2可以正常上网,这都不用废话了吧当..._breed web 恢复控制台下载

python 中关联数据库中日期相加减需要转换为什么数据类型-程序员宅基地

文章浏览阅读174次。在 Python 中,要对日期进行相加减,通常需要将日期转换为 datetime 类型。这是因为 datetime 模块中的 datetime 类提供了很多方便的日期操作函数,可以方便地对日期进行加减。举个例子,假设我们要将当前日期加上 10 天,可以这样写:from datetime import datetime, timedelta# 当前日期today = datetime.no..._python日期和数据相加

随便推点

嵌入式学习DAY26 --- 进程间通信(管道(有名,无名),信号,共享内存)_tmra_intcmd 函数是-程序员宅基地

文章浏览阅读370次,点赞2次,收藏2次。嵌入式入门学习笔记,遇到的问题以及心得体会!DAY25概述:一、进程资源的回收二、守护进程三、进程间通信机制四、无名管道五、有名管道六、信号七、使用有名管道,实现聊天(代码实现)笔记:特殊的进程:1.孤儿进程父进程先于子进程退出,子进程被init进程收养,子进程被称为孤儿进程2.僵尸进程在僵尸态的进程,子进程退出后,父进程没有回收子进程的资源一、进程资源的回收问题如何避免僵尸进程的产生,即子进程退出后,父进程回收子进程的资源。回收的手段:wait()和waitpid_tmra_intcmd 函数是

Jenkins配置基于角色的项目权限管理-Role Strategy Plugin_jenkins role strategy plugin-程序员宅基地

文章浏览阅读1.4k次。本文将介绍如何配置jenkins,使其可以支持基于角色的项目权限管理。由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,本文将使用Role Strategy Plugin,介绍页面:https://wiki.jenkins-ci.org/display/JENKINS/Role+Strategy+Plugin一、配置插件安_jenkins role strategy plugin

mysql容器没有vi命令_Xshell终端连接CentOS7.0下Docker容器中的MySql镜像后无法键入中文问题...-程序员宅基地

文章浏览阅读328次。首先在宿主机输入env 查看LANG 或者 locale 查看 LANG发现本地使用的字符集是: zh_CN.UTF-8然后执行 docker exec -it mysql bash进入docker的mysql 的 bash 子程序控制台, 执行locale 查看mysql 的字符集发现问题!!!本地的LANG与docker里mysql的LANG不一致!!! (ps: "POSIX"是UNIX标准..._mysql的容器怎么没有vi命令

base64转二进制文件流并显示_base64转文件流-程序员宅基地

文章浏览阅读1.3k次。2.base转二进制文件流3.填坑 字符串中不含 否则解码报错,不解码也无法加载_base64转文件流

js前端加密 后端java解密(简单的转码) 密码加密_如何实现简单的js加密,后台java进行解密-程序员宅基地

文章浏览阅读1.6k次。**一、 js转码的方法:**function stringToHex(str){var bytesT = [];for(var i = 0; i < str.length; i++){bytesT.push(str.charCodeAt(i).toString(16));}return bytesT;}**二、js调用方式:**提交的时候,把密码加密重新赋值给 ..._如何实现简单的js加密,后台java进行解密

霍夫曼算法,构造霍夫曼树 (C++)_霍夫曼树算法c++-程序员宅基地

文章浏览阅读443次。霍夫曼算法,构造霍夫曼树_霍夫曼树算法c++

推荐文章

热门文章

相关标签