网络上存在很多资源,也持续不断地生成新的资源。为了新建、获取和操作这些资源,引来了两个问题:如何定位资源,如何对他们进行操作。第一个问题引申出了 URI / URL 即 uniform resource identifier / locator,第二个问题则引申出了 HTTP 超文本传输协议。(刚接触 HTTP 不足一礼拜,所以,从这里往下,极可能存在一些错误和理解偏差,单纯个人记录,勿引用)

HTTP 是基于 TCP 传输层协议的一种应用层协议,是 connection oriented 然而无状态(stateless)的一种协议。归根结底,其目的,《A Beginner's Guide to HTTP and REST》将其概括为「The HTTP client and HTTP server exchange information about resources identified by URLs.」

对于资源的增删查改,分别对应于 PUT DELETE GET POST 四种基本的 HTTP 操作,其中最为常用的,则是 GET 和 POST,而这两种操作的本质区别,则在于是否 idempotent 即多次重复操作不会引发多次实际的资源变更(具体可参考《HTTP POST GET 本质区别详解》、《GET vs POST: Don't Mis-Use It Now》、《HTML 表单》,第二篇文章里提到了 google 爬虫开始处理表单的问题,更进一步表明不可在本该使用 POST 的地方使用 GET,否则会引起麻烦),细节层面的区别则包括诸如 form content type 之类的问题。

下面给两个例子,都是通过 GET 直接获取指定 URL 所标定的资源,如:
# http://www.baidu.com/img/bdlogo.gif  - 读取百度的 logo 图片。
# https://www.google.com/search?newwindow=1&q=stackoverflow  - 在 Google 里获取 stackoverflow 相关的索引条目。

由于 HTTP 是无状态的一种协议,所以面对诸如「记住登陆状态」、「记住上次访问这个网页时设定的背景颜色」的需求,就需要在 client-side 设计一种机制,能够存储某些状态。于是催生了 cookie 这种东东。

cookie 记录了用户的一些隐私,需要得到保护;浏览器引入了 domain 的概念,规范和限制前端 Javascript 对 cookie 的获取和操作权限(仅有生成该 cookie 的 HOST domain 能够读取并操作该 cookie)。
然而,某些场景里,如单点登录(single sign-on),希望能够跨域访问 cookie,所以催生了一系列实用手段如《新浪微博如何实现 SSO 分析》,以及 P3P (the Platform for Privacy Preferences) 约定用于保护用户隐私的协议(参考搜狐武汉研发中心企业邮箱团队成员 qyb 的单点登录文章、香港某 CDN 团队成员的博客),还有 stackoverflow 一则已经锁定的 community wiki 帖子《How do I send a cross-domain POST request via JavaScript?》(未细读 #mark#)。

P.S.

其他东东备份(这几天看 HTTP 顺带看了些 web 相关的其他东西,颇有刘姥姥进大观园的惊奇感…… 囧):

## 《HTTP Made Really Easy - A Practical Guide to Writing Clients and Servers》,极好的文章
## 《HTTP keep-alive 模式》即传输层使用长连接模式,避免反复建立和断开连接所增加的开销。使用 Content-Length 或者 Transfer-Encoding: chunkded(有点类似于 Intel extended HEX 格式)来确定单个 HTTP 响应的长度。
## 《HTTP 协议详解》,其实不够详解,但是图文并茂(大量 Fiddler 抓包截图),很不错。

## XSS (Cross site scripting) 跨域脚本攻击科普文:http://www.houbysoft.com/v/en/papers/xss/
## 两则 HTTP cookie and XSS wikipedia 链接,信息量很大,未细看。#mark#
## session cookies vs. persistent cookies - 如果没有设定 expiration date 则属于 session cookie(这个站点都是和 cookie 相关的信息)。

## 《REST : PUT or POST》,依然是 idempotent 的问题。
## 《Learn REST: A Tutorial》系列文章FAQ(填坑专用)。未读完,没细看。#mark#

## 如何通过 Python urllib2 or requests 库编写搜索引擎爬虫 && 如何记住 cookie 留待以后使用,有道云笔记链接

## HTTP proxy 相关的笔记链接,其中提到了 HAProxy 以及其作者提出的 proxy protocol 和 stackoverflow 问答里提到的 HTTP 1.1 RFC 2616 和 SNMP applications RFC 3413(Command Generators, Command Responders, Notification Originators, Notification Receivers, and Proxy Forwarders)。似乎每个主题展开都是极其庞大…… #mark#

HTTP 初步探究的更多相关文章

  1. 初步探究java中程序退出、GC垃圾回收时,socket tcp连接的行为

    初步探究java中程序退出.GC垃圾回收时,socket tcp连接的行为 今天在项目开发中需要用到socket tcp连接相关(作为tcp客户端),在思考中发觉需要理清socket主动.被动关闭时发 ...

  2. Asp.NetCore初步探究

      1,  新建一个空的AspNetCore项目,默认Program下的代码如下: public static void Main(string[] args) { BuildWebHost(args ...

  3. iOS中的预编译指令的初步探究

    目录 文件包含 #include #include_next #import 宏定义 #define #undef 条件编译 #if #else #endif #if define #ifdef #i ...

  4. 自定义ViewGroup初步探究

    由于项目需要,实现类似于地图控件,能够让一张图标自由缩放并且在其上固定位置,标记一些地点,所以在这里,我考虑了一下,决定使用自定义ViewGroup来实现.

  5. 「2014-3-11」HTTP 初步探究

    网络上存在很多资源,也持续不断地生成新的资源.为了新建.获取和操作这些资源,引来了两个问题:如何定位资源,如何对他们进行操作.第一个问题引申出了 URI / URL 即 uniform resourc ...

  6. xvfb 初步探究

    有时候我们不关注程序是否有界面(比如自动化测试),只要程序在运行就可以了 很感谢 xvfb 这个工具给我们提供了相关的功能 比如在没有 X server 的机器上运行 gedit, 可以用下面的命令 ...

  7. Lucene 搜索的初步探究

    搜索应用程序和 Lucene 之间的关系 一般的搜索引擎都会采用这样的 Lucene 采用的是一种称为反向索引(inverted index)的机制.反向索引就是说我们维护了一个词 / 短语表,对于这 ...

  8. 初步探究Android App API接口测试--实战

    一.Android App API接口测试 1.如何学好Android App API接口测试 postman可以用来实现API接口自动化测试,但是也有弊端,无法实现接口测试数据的参数化,为了达到接口 ...

  9. redis-4.0.11主从配置初步探究

    redis-4.0.11相较于以前版本,新增了几个安全措施,稍稍研究了6379.conf配置文件,在这里记录一下. 实验环境: centos7.4 redis:redis-4.0.11 1. redi ...

随机推荐

  1. MyEclipse10.0的破解过程详细及图解

    MyEclipse10.0的破解过程详细图解 准备阶段 : 1. 破解软件(网上有下载) 2. JDK软件(免费软件) 开始破解: 1. 关闭MyEclipse 10.0 2. 安装 JDK 然后解压 ...

  2. 大数据入门到精通19--mysql 数据导入到hive数据中

    一.正常按照数据库和表导入 \\前面介绍了通过底层文件得形式导入到hive的表中,或者直接导入到hdfs中,\\现在介绍通过hive的database和table命令来从上层操作.sqoop impo ...

  3. JAVA8 Stream集合操作:中间方法和完结方法

    StreamLambda为java8带了闭包,这一特性在集合操作中尤为重要:java8中支持对集合对象的stream进行函数式操作,此外,stream api也被集成进了collection api, ...

  4. pandas和re中正则表达式的意思

    这里()有两种意思,第一个就是表示匹配范围,另外一个就是输出这个匹配 下面那条语句就是告诉程序,是输出整个句子,“?:”非获取匹配,匹配冒号后的内容但不获取匹配结果,不进行存储供以后使用.

  5. <web-view>中JSSDK

    如果只是使用wx.miniProgram.navigateTo这种导航的接口,jssdk可以不用做配置,引用js后直接使用就行,如果chooseImage这种,就需要获取配置了,步骤如下: 先在后端通 ...

  6. spring-framework源码编译及导入

    环境说明: 时间:2017-09-26 OS name: "mac os x", version: "10.12.4", arch: "x86_64& ...

  7. 淘宝API对接实例

    以为公司祖传代码太多使用的PHP5.4.45版本,所以无法使用SDK包,只能原生自己写,踩了不少坑. 1.授权 https://oauth.taobao.com/authorize?response_ ...

  8. 实用矩阵类(Matrix)(带测试)

    引言: 无意间看到国外一个网站写的Matrix类,实现了加减乘除基本运算以及各自的const版本等等,功能还算比较完善,,于是记录下来,以备后用: #ifndef MATRIX_H #define M ...

  9. opencv关于Mat类中的Scalar()---颜色赋值

    这个 CvScalar就是一个可以用来存放4个double数值的数组(O'Reilly的书上写的是4个整型成员):一般用来存放像素值(不一定是灰度值哦)的,最多可以存放4个通道的. typedef s ...

  10. ROS零门槛学渣教程系列(二十)——ROSJAVA和Android

    ros wiki地址:http://wiki.ros.org/android 第一步:安装JDK (参考博文:https://blog.csdn.net/Hong_A/article/details/ ...