views:

169

answers:

9

I've only recently been getting involved with PHP/AJAX/jQuery and it seems to me that an important part of these technologies is that of POST & GET.

First, what is the difference between POST and GET? Through experimenting, I know that GET appends the returning variables and their values to the URL string but POST doesn't:

website.com/directory/index.php?name=YourName&bday=YourBday

So is this the only difference or are there specific rules or conventions for using one or the other?

Second, I've also seen POST & GET outside of PHP... also in AJAX and jQuery. How do POST & GET differ between these 3? Are they the same idea, same functionality, just utilized differently?

Thanks.

A: 

GET and POST are HTTP request methods.

POST and GET are based on HTTP, so they are the same regardless of what engine/language is calling them. i.e jquery/php/etc... they are accessed differently, but work the same.

Viper_Sb
+10  A: 

GET and POST are two different types of HTTP requests.

According to Wikipedia:

GET requests a representation of the specified resource. Note that GET should not be used for operations that cause side-effects, such as using it for taking actions in web applications. One reason for this is that GET may be used arbitrarily by robots or crawlers, which should not need to consider the side effects that a request should cause. See safe methods below.

and

POST submits data to be processed (e.g., from an HTML form) to the identified resource. The data is included in the body of the request. This may result in the creation of a new resource or the updates of existing resources or both.

So essentially GET is used to retrieve remote data, and POST is used to insert/update remote data.

An important consideration when using GET for AJAX requests is that some browsers - IE in particular - will cache the results of a GET request. So if you, for example, poll using the same GET request you will always get back the same results, even if the data you are querying is being updated server-side. One way to alleviate this problem is to make the URL unique for each request by appending a timestamp.

Justin Ethier
@Justin... Interesting. Thanks for explaining the caching behind this. Two questions... 1. Doesn't this mean there are security issues with using `GET` 2. Does this mean I could use `POST` to do the same thing as `GET`?
Hristo
@Hristo: You could make an update on the server by using `GET` as well yes. And vice-a-versa. You could use `POST` to just fetch some data. Using my analogy with a car again: Even though your car has reverse gear, you wouldn't drive to work in reverse. Even though you could of course.
Robert Koritnik
@Hristo: There are no issues with GET itself -- every site's home page is gotten by a GET, as are just about all links, so any security issues with it could break the whole web. The problem happens when web developers don't know a GET should be idempotent, and use it for things like "delete" or "add to cart" links/buttons.
cHao
Hristo
+1  A: 

If you are working RESTfully, GET should be used for requests where you are only getting data, and POST should be used for requests where you are making something happen.

Some examples:

  • GET the page showing a particular SO question

  • POST a comment

  • Click the "Add to cart" button and send a POST request.

Skilldrick
@Skilldrick... I'm not sure what you mean by "RESTfully", but so are you saying that if `GET` is for getting data... `POST` is for sending data? or can `POST` also get data and use it to make something happen?
Hristo
@Hristo I've added a link.
Skilldrick
@Skilldrick... alright thanks! sorry for not knowing what that is :)
Hristo
No need to apologise, we're all here to learn!
Skilldrick
+1  A: 

Learn underlaying HTTP Protocol

This is similar to driving a car. You buy yourself a car and go on the road, but you don't know any of the signs, lights or other rules you must obey. Obviously you're not able to drive even though you know how to manage a car. At least not safely. Not for yourself, neither for others.

You should learn a bit about HTTP protocol. GET/POST are not related (at least not directly) to PHP/AJAX/jQuery or similar. They use them because they are using HTTP protocol for communication. And there's much more to HTPP Protocol than just GET and POST.

Check out some of these and then search on your own as well:

Robert Koritnik
@Robert... Cool! Thanks for the suggestion. I've never been in a place where I need to take a look at the HTTP protocol... but it seems like its about the right time to do so.
Hristo
+2  A: 

POST and GET are two HTTP request methods. GET is usually intended to retrieve some data, and is expected to be idempotent (repeating the query does not have any side-effects) and can only send limited amounts of parameter data to the server. GET requests are often cached by default by some browsers if you are not careful.

POST is intended for changing the server state. It carries more data, and repeating the query is allowed (and often expected) to have side-effects such as creating two messages instead of one.

Victor Nicollet
Also would pay to mention that bots and the like know not to do POST stuff just in case it causes some action (like deleting data) to happen.
Aidan Kane
+2  A: 

With POST you can also do multipart mime encoding which means you can attach files as well. Also if you are using post variables across navigation of pages, the user will get a warning asking if they want to resubmit the post parameter. Typically they look the same in an HTTP request, but you should just stick to POST if you need to "POST" something TO a server and "GET" if you need to GET something FROM a server as that's the way they were intended.

Matt Williamson
A: 

The only "big" difference between POST & GET (when using them with AJAX) is since GET is URL provided, they are limited in ther length (since URL arent infinite in length).

Activist
@Activist... what about how they are used?
Hristo
Oh well, that is the "only" big difference if you ignore all other differences, such as semantics, linking, caching, repeatability, etc.
Julian Reschke
I mean the big difference when using them as the OP speak of in AJAX...
Activist
+1  A: 

A POST, unlike a GET, has its relevant information in the body of the request. (A GET request has no body, so aside from cookies, the only place to pass info is in the URL.) Besides keeping the URL relatively cleaner, POST also lets you send much more information (as URLs are limited in length, for all practical purposes), and lets you send just about any type of data (file upload forms, for example, can't use GET -- they have to use POST plus a special content type/encoding).

Aside from that, a POST connotes that the request will change something, and shouldn't be redone willy-nilly. That's why you sometimes see your browser asking you if you want to resubmit form data when you hit the "back" button.

GET, on the other hand, should be idempotent -- meaning you could do it a million times and the server will do the same thing (and show basically the same result) each and every time.

cHao
+1  A: 

Whilst not a description of the differences, below are a couple of things to think about when choosing the correct method.

  • GET requests can get cached by the browser which can be a problem (or benefit) when using ajax.
  • GET requests expose parameters to uses (POST does as well but they are less visible)
  • POST can pass much more information in to the server and can be of almost any length
Alex
@Alex... thanks. that is good to know!
Hristo