网络上存在很多资源,也持续不断地生成新的资源。为了新建、获取和操作这些资源,引来了两个问题:如何定位资源,如何对他们进行操作。第一个问题引申出了 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. 云笔记项目-Spring事务学习-传播MANDATORY

    接下来测试事务传播属性MANDATORY Service层 所有Service层实现类都设置事务传播属性为MANDATORY. LayerT层代码 package LayerT; import jav ...

  2. java List递归排序,传统方式和java8 Stream优化递归,无序的列表按照父级关系进行排序(两种排序类型)

    当有一个List列表是无序的,List中的数据有parentid进行关联,通过java排序成两种排序类型: 所用的测试列表最顶级无parentid,若为特殊值,修改下判断方法即可. 第一种排序:按照树 ...

  3. 你使用的ie版本过低请。。。

    放到body里面 <body> <!--[if lte IE 8]> <p class="chromeframe">您使用的IE浏览器版本过低. ...

  4. SQL数据库索引理解与应用【转贴--收藏】

    SQL数据库中索引分为聚集索引(CLUSTERED)和非聚集索引(NONCLUSTERED)两种. 聚集索引确定表中数据的物理顺序,它就类似与电话簿,按照姓氏排列数据.由于聚集索引规定数据表中的物理顺 ...

  5. Mac终端中输入ps aux显示全部进程

    ps命令是Process Status的缩写. ps aux命令用来列出系统中当前运行的那些进程. ps aux | grep chrome 表示查询关于chrome的所有程序(grep可作为文件内的 ...

  6. Python学习笔记1环境搭建

    1.在浏览器输入https://www.python.org/psf/,点击download下载python3.7.2(https://www.python.org/)   https://www.p ...

  7. 把多个字符串里面的项写到不同的对象中,然后在push到一个数组中

    otherUserNames: "甲,乙,丙,丁"otherUserIds: "10008750,10008711,10003348,10008747" oth ...

  8. centos7 使用ss和Privoxy 实现命令行访问google

    1.更新yum 这里可能更新时间有点长,,稳住~别急 yum -y upgrade 2.安装 epel-release 这个必须先安装,因为: python-pip 和 privoxy 都在EPEL源 ...

  9. Linode KVM安装Windows系统的设置方法

    以前我们用老的Linode VPS主机的时候是采用的XEN架构的,如今我们新注册账户,以及新开的机器是KVM架构.根据后台的设置,我们看到好多网友有在LINODE中安装WINDOWS系统,理论上是可以 ...

  10. new delate he typedef的含义

    new:        new 类型[初值] 如: new int ;                                     //开辟一个存放整数的存储空间,返回一个指向该存储空间的 ...